贪心算法的证明题

简介: 贪心算法的证明题

贪心算法的证明一般是比动态规划要复杂。

原因是贪心算法的证明有两个,一个是最优子结构,另外一个是贪心选择性质。

贪心选择性质: 可以通过局部最优选择来构造全局最优解

证明:一般考虑某个子问题的最优解,然后考虑用一个贪心选择替换其中某个选择,修改此解,导出更小子问题。

最优子结构同动态规划,而且其实一般也不是特别需要证明,关键还是在证明问题具有贪心选择性质,下面是尝试证明。


1.活动选择问题

1685018882650.jpg

贪心选择性质的证明:假设一个子问题是Si,其一个最优解为Ai,(考虑一个子问题的最优解),我们选择子问题中最高结束的活动am(贪心选择),假设Ai中最早结束的活动我ae,如果ae=am,显然am在Ai中,如果ae>am,如果用am代替ae所得Ai’也还是最优解(代替),所以该子问题最优解可以表示为am+Si’最优解(拆分)。

大概证明步骤如下:子问题最优解,贪心选择,代替,拆分。


最优子结构的证明:假设Aij是活动i到j(不含j)的最优解,若Aij中包含ak,则可以将其划分为Aik+ak+Akj,反证法证明Aik、Akj都是最优解即可。


2.分数背包问题

1685018908231.jpg

1685018918419.jpg

贪心选择性质的证明:不妨假设p1/w1>=p2/w2>=…>=pn/wn

则按照贪心选择的最优解是X(x1,x2,…xn),如果全为1,显然是最优解,如果不全为则假设在j处最先不为,可知前面全为1,后面全为0,xj在两者之间。

又假设Y(…)为理想最优解,设两者的序号最小在k处有xk!=yk,显然xk>yk(k>j,超重,k=j,要么Y是X,要么后面还有得证,k<j,xk=1,显然得证 )

然后假设有xk代替yk,构造Z,证明效应更高,用Z代替Y,如此反复直到Z=X。

这个证明也是一步步局部构造得到最优解的过程。按照先前的步骤xk是贪心选择,构造Z为代替。


3.Huffman编码


1685018928804.jpg

注意最后得到的树一定是一棵满二叉树。

贪心选择性质的证明:

1685018939406.jpg

这里的证明用构造法,用x,y代替a,b位置。

1685018956912.jpg

反证法

1685018970347.jpg

(注,这里两个引理的1证明特别是第二个我不太熟悉,日后再补充吧)

相关文章
|
3月前
|
算法
KPM算法求字符串的最小周期证明
公式 `ans = n - LPS[n-1]` 描述了最小周期,其中 `n` 是子串长度,`LPS[n-1]` 是前缀函数值。证明分为特殊情况和一般情况:对于完整周期字符串,`LPS[n-1] = 3*T`,故 `ans = T`;对于非完整周期,通过分析不同长度的 `[末部分]` 和 `[前部分]`,展示 `ans` 始终等于周期 `T` 或由 `[e][b]` 构成的最小周期,从而证明公式正确。
|
机器学习/深度学习 算法
经典机器学习系列(六)【集成学习】之周志华西瓜书-AdaBoost算法证明解析
经典机器学习系列(六)【集成学习】之周志华西瓜书-AdaBoost算法证明解析
146 0
|
11月前
|
存储 算法 测试技术
欧拉图的构造性证明与算法实现
学生综合应用DFS、欧拉图定理的构造性证明、图的建模、并查集,编程解决给出的问题。
114 0
【基础算法】单链表的OJ练习(5) # 环形链表 # 环形链表II # 对环形链表II的解法给出证明(面试常问到)
【基础算法】单链表的OJ练习(5) # 环形链表 # 环形链表II # 对环形链表II的解法给出证明(面试常问到)
|
机器学习/深度学习 算法 数据挖掘
【机器学习算法】9、EM算法与K-Means算法的收敛性证明
【机器学习算法】9、EM算法与K-Means算法的收敛性证明
455 0
|
机器学习/深度学习 人工智能 开发框架
【有营养的算法笔记】基础算法 —— 推导证明前缀和与差分2
【有营养的算法笔记】基础算法 —— 推导证明前缀和与差分
82 0
【有营养的算法笔记】基础算法 —— 推导证明前缀和与差分2
|
人工智能 移动开发 算法
【有营养的算法笔记】基础算法 —— 推导证明前缀和与差分
【有营养的算法笔记】基础算法 —— 推导证明前缀和与差分
101 0
【有营养的算法笔记】基础算法 —— 推导证明前缀和与差分
|
算法
算法:试证明求平方根的牛顿迭代法一定收敛
算法:试证明求平方根的牛顿迭代法一定收敛
123 0
算法:试证明求平方根的牛顿迭代法一定收敛
|
机器学习/深度学习 算法 Java
【每日算法】详解为何能从 LCS 问题转化为 LIS 问题,以及 LIS 贪心解的正确性证明 |Python 主题月
【每日算法】详解为何能从 LCS 问题转化为 LIS 问题,以及 LIS 贪心解的正确性证明 |Python 主题月
|
算法 Java Python
【每日算法】最大数对和的最小值,贪心解的正确性证明|Python 主题月
【每日算法】最大数对和的最小值,贪心解的正确性证明|Python 主题月

热门文章

最新文章