贪心算法
【贪心算法的定义】
贪心算法又称做“贪婪算法”。
在对问题求解时,总是做出在当前看来是最好的选择(贪心)。
不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题,它能产生整体最优解或者是整体最优解的近似解。
【数据结构中的贪心算法实例】
Huffman算法
单源点最短路径算法:Dijkstra算法
最小生成树算法
Prim算法
Kruskal算法
拓扑排序
【贪心算法的基本要素】
1.贪心选择性质
可通过做局部最优(贪心)选择来达到全局最优解。
2.最优子结构性质
问题的最优解包含了子问题的最优解。
【动态规划 VS. 贪心算法】
共同点:
都要求问题具有最优子结构性质;
动态规划算法:
自底向上,求解出很多子问题,然后再做出选择;
贪心算法:
自顶向下,第一步为贪心选择,将原问题变成一个相似的、但规模更小的问题,而后每一步都是当前看似最佳的选择。
从求解的全过程来看,每一次贪心选择都将当前问题归纳为更小的相似子问题,而每一次选择都仅做一次,无重复回溯过程,具有较高的时间效率。