大家好,欢迎来到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
- ai ∈! S → S 是 P(A{ai}) 的最优解
- ai ∈ S → S {ai} 是 P(A\N[i]) 的最优解,但不一定是 P(A{ai}) 的最优解<
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132559.html