贪婪算法是一种算法范例,它遵循在每个阶段做出局部最优选择[1] 的启发式求解方法,目的是寻找到一个全局最优解。在许多问题中,贪婪策略通常不会产生最优解,但是贪婪启发式可能会在合理的时间内产生近似全局最优解的局部最优解。
例如,旅行推销员问题(计算复杂度很高)的贪婪策略的启发式方法如下:“在旅程的每一步,访问最近的未游览城市。”这种启发式方法并不打算找到最佳的解决方案,但它以合理数量的步骤结束;为如此复杂的问题找到最佳解决方案通常需要进行多次不合理的步骤。在数学优化中,贪婪算法优化求解具有拟阵性质的组合问题,并对具有子模型结构的优化问题给出了常数因子逼近。
一般来说,贪婪算法有五个组成部分:
贪婪算法对一些数学问题能够产生很好的解决方案,但对另一些其他数学问题却没有。他们解决的大多数问题都有两个属性:
举例说明贪婪算法可能无法达到最优解
对于许多其他问题,贪婪算法无法产生最优解,甚至可能产生唯一的最坏可能的解。一个例子是上面提到的旅行推销员问题:对于每一个城市数量,都有一个城市之间的距离分配,对于这个分配,最近邻启发式产生了唯一的最坏可能的旅行。[3]
贪婪算法可以被描述为“短视的”,也可以被描述为“不可恢复的”。它们仅适用于具有“最佳子结构”的问题。尽管如此,对于许多简单的问题,最适合的算法是贪婪算法。但是更需要注意的是,贪婪算法可以用作选择算法,在搜索中对选项进行优先排序,或者分支定界算法。贪婪算法有一些变化:
贪婪算法在组合优化和理论计算机科学领域有着悠久的研究历史。众所周知,贪婪启发式在许多问题上产生次优结果,[4] 所以自然的问题是:
有大量的文献回答了一般类问题,如拟阵,以及特殊问题,如集合覆盖。
拟阵是一种数学结构,它将线性无关的概念从向量空间推广到任意集合。如果一个优化问题具有拟阵结构,那么适当的贪婪算法将使其得到最优解。[5]
函数 定义在集合的子集上 叫做 子模型 如果每个 我们有 。
假设有人想找一套 最大化 。贪婪算法,建立一个集合 通过增量地添加的元素 每一步最多产生一个至少为 的集合作为输出。[6] 也就是说,贪婪在一个常数因子内执行 和最优解一样好。
当对输出施加额外的约束,例如基数约束[7] ,尽管通常需要对贪婪算法进行细微的改变,但类似的保证也是可以实现的。
贪婪算法提供了强有力的保证但不是最优解的其他问题包括
许多这些问题都有匹配的下限;即,在最坏的情况下,贪婪算法没有比保证的性能好。
贪婪算法大多(但不总是)无法找到全局最优解,因为它们通常不会对所有数据都进行彻底的操作。他们可能过早地做出某些选择,这妨碍了他们以后找到最优解。例如,所有已知的图着色问题和所有其他NP完全问题的贪婪着色算法都不能始终找到最优解。然而,它们是有用的,因为它们很快就能想出,并且经常给出很好的近似最优解。
如果贪婪算法能够被证明为给定问题类产生全局最优,它通常会成为选择的方法,因为它比其他优化方法(如动态规划)更快。这种贪婪算法的例子是用于寻找最小生成树的克鲁斯卡尔(Kruakal)算法和普林(Prim)算法,以及用于寻找最优霍夫曼树(Huffman trees)的算法。
贪婪算法也出现在网络路由中。使用贪婪路由,消息被转发到离目的地“最近”的相邻节点。节点位置的概念(以及因此的“接近度”)可以由它的物理位置来确定,如在自组织网络使用的地理路由中。在区域路由和分布式哈希表中,位置也可以是完全人工构建的。
^Black, Paul E. (2 February 2005). "greedy algorithm". Dictionary of Algorithms and Data Structures. U.S. National Institute of Standards and Technology (NIST). Retrieved 17 August 2012..
^Introduction to Algorithms (Cormen, Leiserson, Rivest, and Stein) 2001, Chapter 16 "Greedy Algorithms"..
^Traveling salesman should not be greedy: domination analysis of greedy-type heuristics for the TSP (G. Gutin, A. Yeo and A. Zverovich, 2002).
^U. Feige. A threshold of ln n for approximating set cover. Journal of the ACM (JACM), 45(4):634–652, 1998..
^Papadimitriou, Christos H., and Kenneth Steiglitz. Combinatorial optimization: algorithms and complexity. Courier Corporation, 1998..
^G. Nemhauser, L.A. Wolsey, and M.L. Fisher. "An analysis of approximations for maximizing submodular set functions—I." Mathematical Programming 14.1 (1978): 265-294..
^N. Buchbinder, et al. "Submodular maximization with cardinality constraints." Proceedings of the twenty-fifth annual ACM-SIAM symposium on Discrete algorithms. Society for Industrial and Applied Mathematics, 2014..
^https://web.archive.org/web/20221028205735/http://www.win.tue.nl/~mdberg/Onderwijs/AdvAlg_Material/Course%20Notes/lecture5.pdf.
暂无