动态规划的解释
动态规划(Dynamic Programming,简称 DP)是一种用于解决优化问题的算法策略,它通过将一个复杂的问题分解为一系列相互关联的子问题,并避免重复计算子问题的解,从而高效地求解原问题。
其核心思想包含以下几点:
- 分解问题:把原问题拆分成多个子问题,这些子问题通常具有相似的结构,而且子问题的解能够帮助构建原问题的解。例如,计算斐波那契数列时,第
n
个斐波那契数可以依赖于第n - 1
个和第n - 2
个斐波那契数,这就是把计算整个数列的大问题分解成计算一个个具体位置数字的子问题。 - 记忆化(避免重复计算):在求解子问题的过程中,会记录已经求得的子问题的解(通常使用数组等数据结构来存储),当下一次再遇到同样的子问题时,就可以直接使用之前记录的结果,而不用重新计算,大大提高了效率。比如在计算有重叠子问题的递归函数时,通过记录中间结果,能减少很多不必要的重复递归调用。
- 最优子结构:原问题的最优解可以由子问题的最优解组合而成。例如,在背包问题中,如果想找到能装入背包获得最大价值的物品组合这个最优解,那么对于背包容量更小、物品数量更少等子情况的最优解可以被用来构建整体的最优解。
C++ 案例之斐波那契数列
1. 问题描述
斐波那契数列指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、…… ,从第三项开始,每一项都等于前两项之和