高级算法包括:动态规划,贪心算法
(1)动态规划
动态规划算法是通过整合子问题来解决整个问题的,也就是说通过子问题的求解,可以得出次问题的解。
动态规划关键是找出问题求解方程,即找到子问题和问题解的关系。
例如:跳台阶问题
题目:一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级,求总共有多少总跳法。
这是一道组合数学的题目,只要找到求解方程即可:
f( n )= f( n-1 ) + f( n-2 ) 并且 f(1)=1,f(2)=2
方程含义是说 n个台阶的走法=最后走1级的走法+最后走两级的走法
通过这个方程,可以很轻松的求解此问题,而这个问题就是典型的动态规划问题。
(2)贪心算法
贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。
例如背包问题:与0-1背包问题类似,所不同的是在选择物品i装入背包时,可以选择物品i的一部分,而不一定要全部装入背包,1 <= i <= n。这2类问题都具有最优子结构性质,极为相似,但背包问题可以用贪心算法求解,而0-1背包问题却不能用贪心算法求解。
基本步骤:
1、算每种物品单位重量的价值Vi/Wi
2、依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包
3、若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价值次高的物品并尽可能多的装入背包
4、依此策略一直地进行下去,直到背包装满为止
(3)回溯算法