1.回溯算法: 参看这篇博文https://blog.csdn.net/crystal6918/article/details/51924665,如果能够完全理解,则真的进步不小,它解决了一类问题
2.动态规划算法:有点不好理解,典型的最短路径问题,参看博文:https://blog.csdn.net/u013527937/article/details/53140686
看一下动态规划的简单例子:计算斐波那契数列
f(n) = f(n-1) +f(n-2) f(5) = f(4) + f(3) ;
通常做法是,分别计算法f(4), f(3),并且采用递归。可以看到其实f(4)中也计算了f(3),这就出现了重复计算,严重影响算法效率。这个用动态规划思想的说法,就是存在重叠的子问题,也就是重叠子问题。这是我们就可以用动态规划思想,优化这个算法,就是存储f(3)的值,不用重复计算,也就是以空间换时间,并且这个交易是很值得的,同理还有找硬币问题。
参考书籍:《算法设计》
《计算机程序的构造和解释》