算法学习(九)贪婪技术

时间:2021-07-05 09:49:12

贪婪法通过一系列步骤来构造问题的解,每一步对目前构造的部分解做一个扩展,直到获得问题的完整解为止。所作的每一步必须:

  • 可行
  • 局部最优
  • 不可取消
    贪婪法的困难之处在于如何证明某一贪婪算法能获得最优解。常用的证明是使用数学归纳法。
    第二个证明方法是证明在接近问题目标的过程中,贪婪法每一步的选择都不比其他任何算法差。
    第三个证明是基于算法的输出。
    贪婪技术背后复杂的理论是拟阵。

Prim算法

最小生成树
Prim算法通过一系列不断扩张来构造一棵最小生成树。从图中的任一顶点开始,每一次迭代时一贪婪的方式扩张当前子树,即把不在树中的最近顶点添加到树中。

Kruskal算法

Kruskal算法生成最小生成树,将边按照权重的非递减顺序排列,然后每次从中挑出最短的边加到当前的子树中,如果构成了回路则把这条边跳过。

Dijkstra算法

单起点最短路径问题,求出它到所有其他顶点的最短路径。
Dijkstra算法按照从给定顶点到图中顶点的距离,顺序求出最短的路径。

哈夫曼树和编码

最短变长前缀码