贪婪算法
贪婪算法(Greedy Algorithm)也叫算贪心法,贪婪法.它是一个遵循启发式解决问题的算法范式.它的核心思想就是通过在每一步的选择中都选用当前步骤下最优的选择,期望结果是最优的算法.如 旅行推销员问题.
贪婪算法尤其适用于有最优子结构的问题中,最优子结构的意思是局部的最优解可以导出全局的最优解.贪婪算法与动态规划 的不同在于贪婪算法对每一个子问题都作出选择,不能回退;动态规划则会保存以前的运算结果,根据以前的结果对当前进行选择,可以回退.
贪婪算法可以解决一些最优化(如最大值最小值等)问题,比如求图中的最小生成树、求哈夫曼编码…其他大多数的情况都不适用贪婪算法,一旦一个问题可以使用贪婪算法来解决,那么贪婪算法一般是解决这个问题的最好办法.由于贪婪算法的高效性以及其答案比较接近最有结果,也可以作为辅助算法或直接解决一些结果要求不那么精确的问题.
原文首发于 leonchen1024.com/2018/12/03/…
原理
步骤
-
建立数学模型来描述问题,并建立一个备选答案区
-
把求解的问题分成若干个子问题,
-
使用一个选择函数对每个子问题求解最优解,并判断是否可用于整体问题
-
把所有子问题的最优解合成一个整的解
适用情况
贪婪算法适用于一些数学问题等,大部分适用的问题都有两个特点: