[算法] 贪心算法证明思路

最优子结构

动态规划和贪心算法都需要问题具有最优子结构,但不同的是贪心自顶向下,先做选择再求解一个结果子问题,而动态规划自底向上求解子问题,需要先求出子问题的最优解再做选择。这是因为,动态规划最优解有两个子问题时,求解子问题S_{ij}时有j-i-1种选择,但贪心选择特征能够使其中一个子问题必定为空,这种子问题和选择数目的减少使得子问题能够自顶向下被解决。

最优子结构的证明思路:

a) 定义子问题空间,做出一个选择从而产生一个或多个子问题。子问题空间的定义结合需要求解的目标和选择后子问题的描述刻画来考虑。
b) 利用“剪切-粘贴”证明作为最优解的组成部分的每个子问题的解也是它本身的最优解。如果子问题的解不是最优解,将其替换为对应的最优解从而一定能得到原问题一个更优的解,这与最初的解是原问题的最优解的前提假设矛盾,因此最优子结构得证。

活动选择问题为例:
首先活动选择问题的子问题空间为S_{ij} = \{a_k \in S: f_i \le s_k < f_k \le s_j \}, 假设已知S_{ij}的最优解包含活动a_k和根据a_k划分出的两个子问题S_{ik}S_{kj}对应的最优解A_{ik}A_{kj},如果S_{ik}有一个解A'_{ik}包含比A_{ik}更多的活动,那么将A_{ik}A_{ij}中剪切并粘贴A'_{ik}得到的新的解应该比A_{ij}包含更多的活动,由此可以证明该问题具有最优子结构。

贪心选择性质

贪心的本质是局部最优解能产生全局最优解,即产生两个子问题S_1S_2时,可以直接解决子问题S_1(在子问题S_1中,使用贪心策略选择a作为局部最优解)然后对子问题S_2进行分解,最终可以合并为全局最优解。
因此,要证明贪心选择性质只需要证明存在一个最优解是通过当前贪心选择策略得到的,反过来,即证明**通过非贪心策略得到的原问题的最优解中也一定包含局部最优解a。

Exchange Argument方法

定义通过非贪心策略的选择可以得到的一个最优解A,将最优解中的元素和当前贪心策略会选择的元素逐个交换后得到的解A'并不比
A差(假设贪心策略会选择的元素在当前最优解中未被选择,通过“剪切-粘贴”证明得到的仍是最优解),可以证明存在原问题的最优解可以通过贪心选择得到。

活动选择问题为例:
S_{ij}的最优解A_{ij},将A_{ij}中活动按结束时间单调递增排序,设a_kA_{ij}中第一个活动即结束最早的活动,a_mS_{ij}中结束最早的活动。如果a_k = a_ma_mA_{ij}中得证;否则如果问题空间中结束时间最早的活动a_m没有在A_{ij}中被选择,构造子集A'_{ij} = A_{ij} - {a_k} +{a_m},因为{a_m}是最早结束的活动,因此f_m \le f_k所以A'_{ij}中的活动不相交,又因为A'_{ij}中活动个数和A_{ij}相同,因此A'_{ij}也是问题的最优解。

CLRS 16-4 单位时间任务调度问题 为例:
假设存在一个并非通过贪心策略得到的最优解A,其中第j个活动为a_j,如果a_j被安排在它的截止时间之前,那么a_j可以和它截止时间之前安排的任何活动向后交换且不会使得惩罚增加,因此a_j一定可以位于不晚于其截止时间的空时间槽的最晚位置;如果a_j被安排在它的截止时间之后的位置p_j,且存在被安排在a_j活动之后的活动a_m,假设a_m位于p_m位置且d_m \le p_j,那么交换a_ja_m的位置可以使总惩罚减少,这与A是问题的最优解矛盾,因此活动a_j后面的任一活动a_m必定满足d_m \ge p_j,将两者交换位置不会改变总惩罚值,因此a_j一定可以交换至最晚的空时间槽处,通过逐个交换可以得到采用题目贪心方案所得的解,仍为最优解,贪心选择性质得证。

Huffman树为例:
设问题空间C对应的最优前缀编码树为Tl, m, rC中具有频度最低的三个字符,要证一定存在C的一种最优前缀编码其中l, m, r的编码长度相同但最后一位不同,即通过贪心选择能得到问题的最优解:
假设a, b, c为任一种最优编码树中T具有最大深度的兄弟叶子节点,因为l, m, r具有最低的频度,因此l.freq \le a.freq, m.freq \le b.freq, r.freq\le c.freq。交换节点l和a产生树T',交换节点m和b产生树T'',交换节点r和c产生树T'''。首先求解一次交换后树代价的变化:
B(T') - B(T) = \sum_{c \in C} {c.freq*d_{T'}(c)} - \sum_{c \in C}{c.freq*d_{T}(c)}
= a.freq*d_{T'}(a) + l.freq*d_{T'}(l) - a.freq*d_{T}(a) - l.freq*d_{T}(l)
= a.freq*d_{T}(l) + l.freq*d_{T}(a) - a.freq*d_{T}(a) - l.freq*d_{T}(l)
= (a.freq - l.freq)(d_{T}(l) - d_{T}(a))
因为l.freq \le a.freq, d_{T}(l) \le d_{T}(a)所以B(T')\le B(T)经过三次这样的交换可得B(T''') \le B(T), 所以T^{'''}是问题的最优解,即一定存在C的一种最优解其中l, m, r为具有最大深度的兄弟叶子节点,他们编码长度相同但最后一位不同,由此贪心选择性质得证。

最小生成树为例:
参考http://www.cs.cornell.edu/courses/cs482/2007su/exchange.pdf

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容