贪婪算法(Greedy Algorithms)

贪婪算法(Greedy Algorithms)本文深入探讨了贪婪算法 包括其定义 最短路径问题 活动选择问题 背包问题和 Huffman 编码

大家好,欢迎来到IT知识分享网。

一,什么是贪婪算法

解决最简化问题的演算法,其解题过程可看成是由一连串的决策步骤所组成,而每一步骤都有一组选择要选定。

贪婪演算法的特性是 每一次选择都采取区域最佳接(locally optimal solution),而透过每一个区域最佳解最后综合成为全域最佳解(globally optimal solution)从而将问题解决

  • 一个贪婪算法在每一决策步骤总是选定当下看来最好的选择
  • 贪婪算法并不保证总是得到最佳解,但在有些问题可以得到最佳解

二,最短路径

三,使用贪婪解题策略的演算法

  • 活动选择(activity-selection)演算法
  • 背包(Knapsack)演算法
  • Huffman编码演算法
  • Kruskal最小扩张树演算法
  • Prim最小扩张树演算法
  • Dijkstra最短路径演算法

3.1 活动选择问题

  • 假设有n活动提出申请要使用一个场地,而这场地在同一时间点时最多只能让一个活动使用
  • 从这n个活动选一组数量最多,且可以在这场地举办的活动集。
  • 假设活动 ai 其提出申请使用场地的时段为半开半闭的区间 [ si, fi )

一个活动选择问题

假设我们有一集合 S = { a1, a2, …,an },其中有 n 个行销活动

  • 对于每一个活动 ai,其开始时间为 si结束时间为 fi(当 0 ≤ ai < fi < ∞)
  • 活动 ai在半开放时间间隔内发生 [ si, fi )

如果间隔[si,fi)和[sj,fj)不重叠,则活动ai和aj是兼容的(compatible)

  • 如果si ≥ fi 或 si ≤ fi,则说 ai和aj 是兼容的(compatible)
  • 我们首先对这个程序制定一个动态规划解,其中我们将两个子问题的最优解结合起来,形成原始问题的最优解。
  • 然后我们将观察到,我们只需要考虑一个选择——贪婪的选择——并且当我们做出贪婪的选择时,其中一个子问题被保证为空,因此只剩下一个非空的子问题。

活动选择问题的最优子结构

  • Sij= { ak∈S : fi ≤ sk < fk ≤ sj }
    因此,Sij 是 S 中活动的子集,可以在活动ai结束之后开始,在活动aj开始之前结束。
  • 若 f0 = 0 和 sn+1 = ∞;
    则 S = S0,n+1(0 ≤ i, j ≤ n+1.)
  • Sij = Sik ∪ {ak} ∪ Skj
  1. ai ∈! S → S 是 P(A{ai}) 的最优解
  2. ai ∈ S → S {ai} 是 P(A\N[i]) 的最优解,但不一定是 P(A{ai}) 的最优解<

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132559.html

(0)
上一篇 2025-07-30 17:26
下一篇 2025-07-30 17:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信