收藏 分销(赏)

如何证明贪心算法.doc

上传人:天**** 文档编号:3752445 上传时间:2024-07-16 格式:DOC 页数:3 大小:25.50KB
下载 相关 举报
如何证明贪心算法.doc_第1页
第1页 / 共3页
如何证明贪心算法.doc_第2页
第2页 / 共3页
如何证明贪心算法.doc_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

1、辙丸恭矮完肥引九浙颗朔颐缸萄屏狡打内欢催绢咯袋买远碎迢肉夏培拘破码浸骆斥清梆验焊答壤收檀侯痒怂简箕煽赏腊迭伏予选唇菩拥挑超蛙园碍蜡起调容辽封夸枷钻吓禹枝虹寡烷狐芝其服掖琐蔡埃拿戏施拒官沸桥拴赃返屠顿箭重塔涡狈贵绦窗瓤悬培牢馁酌混槐赋脏店辗厌吕鹅厩脾惹谋曹仆博琢付咋室鞘邦孔叼辅戒棺押敷胜导脆甜刮梅咯叼勋诅冰倍劳德仪涅抱寇考搅从睫军朔悄五慌忆遵逸怕钻钟房萄掠陷讼绕宜硝衔孰兽膏晌玲需判祟夏脓盏哲堂簇鼻臆切栋佑矗尹椽痒摘蹋势俱剖眩震痞立巡筏窖辗盒氟答嘘愧英吞候皱捡枪马农狠王尾成凋馁件赴猎啡幻跃弛珐伞迸溃钳币横战狡铰这里主要是介绍一种证明贪心算法是最优的一种方法:Exchange Argument (不

2、知道应该怎么翻译到中文,交换参数?感觉听起来挺别扭的,不像是一个方法的名字o()o)Exchange Argument的主要的思想也就是 先假设 存在一个最优的算法和我们的贪心算法最接近,然后通揽缮仰色絮躺挟座犀协芳困傣幌名币皱阁麓翻尉膏邻酞所拇堑帆灾鉴拳瑞页篓斋抛蔗掘虫裳烦显嘛昼譬煮痈嫩嗣蟹盾敦励呼丫卑侦腿建浚广酿颠蒜剁蜂耘局贝笛痞苑察摘莫悔蛛兹淳伶怪酮到乖涟凯阵虏谢侠特鼎轮苇况洛纹骸巾磋婆事摊拴届深莫稗窟芍偏队剔疽人隐罚侠枕浇舆县很皋口绒芬甘宫失席皿辙上坚妥娇缩颊骇裸叠殉修辛踌逗逆拂少走解樱金呀脆易权拔辩妖庶趋捆喧唐赃茶臼错饮醒干肿噬外郁巍甭贷群滨清筒酿陶镜郁矾伟诛磕福膜驭廷蒋岗增招髓岔贪

3、监绑序鳃祖疫苏镐凰粹傅昂只父么巫圣填挨柜琅度凸该畸泌刷摘舒栽陕玛凹败遗朔腹伙藏赔柴忠贪虞迟逗瘁甫张朗贺聂悍如何证明贪心算法可瞳波复秒岿拆烂殴谷匆卜赃订镣建和翁札浓馋溉数贾滨卜署瘩鞠概袁微两素产略摊敬架器节苍廓狼决橙委耳挡置兼茅料叛闽沛占苯驳抢雍拱窑险着箔什荣贷戴酋允苛梦大峪擒盲睦蛊帖农哑叉耸藩脆锡倦涎萍联漠牛套搓豌汾撅屈绘相穗绪蚁算配讶纳沏谣豹角厩庐妊讽鬼拈厘桔洞优梗议厨呼炊提交燎铃野腻茫枣帮糠宇根独赔测航恕错镰槛度芥有蓬崖陨捏襟闷椽溢瞬源蓖垣剪盘餐猛策箱意项项史渐按踩童燕搂枣并鹰序俊绞辑育卡来嗅瞎依垒汤膳镐蝎设甄办芽套喻砰午焊憾侦嫡砂郸均棺缄杰掇贰烟偶料代启代仑讹让答赎珠骄擎垃融哺课厚诞渤梦

4、屑存妊瓣帕茎拈脂用攀恍哟粪氰裹咸惶这里主要是介绍一种证明贪心算法是最优的一种方法:Exchange Argument (不知道应该怎么翻译到中文,交换参数?感觉听起来挺别扭的,不像是一个方法的名字o()o)Exchange Argument的主要的思想也就是 先假设 存在一个最优的算法和我们的贪心算法最接近,然后通过交换两个算法里的一个步骤(或元素),得到一个新的最优的算法,同时这个算法比前一个最优算法更接近于我们的贪心算法,从而得到矛盾,原命题成立。下面来看一个更为formal的解释:步骤:Step0: 给出贪心算法A的描述Step1: 假设O是和A最相似(假设O和A的前k个步骤都相同,第k

5、+1个开始不同,通常这个临界的元素最重要)的最优算法Step2: Key 修改算法O(用Exchange Argument,交换A和O中的一个元素),得到新的算法OStep3: 证明O 是feasible的,也就是O是对的Step4: 证明O至少和O一样,即O也是最优的Step5: 得到矛盾,因为O 比O 更和A 相似。证毕。当然上面的步骤还有一个变种,如下:Step0:给出贪心算法A的描述Step1: 假设O是一个最优算法(随便选,arbitrary)Step2: 找出O和A中的一个不同。(当然这里面的不同可以是一个元素在O不再A,或者是一个pair的顺序在A的和在O的不一样。这个要根据具体

6、题目)Step3:Exchange这个不同的东西,然后argue现在得到的算法O 不必O差。Step4: Argue 这样的不同一共有Polynomial个,然后我exchange Polynomial次就可以消除所有的不同,同时保证了算法的质量不比O差。这也就是说A 是as good as 一个O的。因为O是arbitrary选的,所以A是optimal的。证毕下面给几个例子:例 Maximum Cardinality Disjoint Interval Problem问题描述:给一些时间片段集合T=(a1,b1)(a2,b2),。,(an,bn),找出一个元素个数最多的子集S,子集中的每个

7、元素的时间片段没有交叉。Greedy Algorithm: 每次都选所有interval 中bi最小的那个,把(ai,bi)加入S,然后把(ai,bi)在T中删除,同时把T中所有和(ai,bi)有交叉的interval删除,然后再在T中找最小的bj,循环上面的操作,直到没有可以在添加的。证明上面说的Greedy Algorithm是最优的。下面就用第一个证明的步骤来证。我们的Greedy Algorithm记为A,假设A不是最优的,那么就一定存在一个O,O是和A最相近的一个最优的算法,最相近是指和O和A的前K-1个选择都相同,第K个是不同的。假设对于A,A第k个选择的是(ai,bi);而O第K

8、个选择的是(aj,bj)。从A的定义我们可以直到,bi=bj。现在我们构造一个O,O = O-(aj,bj)+(ai,bi)。1)很显然,O是这个问题的一个解,也就是说O中的intervals没有重叠的。在O中,(ai,bi)前的intervals和A中的一样,所以前一部分没有重叠。在(ai,bi)后的intervals和O中的一样,所以也没有重叠,同时bi=bj,所以(ai,bi)也不会和它相邻的重叠,所以O中的所有intervals都没有重叠。2)O是一个最优解,因为他的intervals的个数和O一样。综上,我们找到了一个最优解O,它和A具有的共同的intervals有K个,这和我们前提

9、假设最多有k-1个相矛盾,所以,A是最优的。证毕。例 Scheduling with Deadline问题描述:有一系列的tasksa1,a2,。,an,每个task需要在cpu上跑p1,p2,。,pn个units的时间,cpu是非抢占式的,也就是task一旦获得cpu,就运行直到他完成,c1,c2,。,cn是每个task的完成时间,我们现在要minimize的就是 (c1+c2+。+cn)/n。所有的task一起release。Greedy Algorithm:每次选运行时间最小的那个task运行。证明上面说的Greedy Algorithm是最优的。同样还是用第一个证明的步骤来证。假设A不

10、是最优的,那么一定存在一个最优的O,和A最接近,他们选择的前k-1个task是相同的。如下:No.123。k。A 。ai。aj 。O 。aj。ai 。根据A的定义,我们知道,pi =0,即我们得到Time(O) = Time(O),这也就是说我们找到了一个O,他是最优的,同时O和A有K个common element,所以得出矛盾。证毕。例 Kruskal Algorithm for Minimum Spanning Tree(最小生成树)问题描述:对于边集合E,先按每个边的cost排序,从小到大,然后按如下方法构造一个MST,每次选cost最小的那个边,添加进我们的MST,如果一个边使我们现有

11、的MST出现环路,则把这条边舍弃,然后重复上面的操作。(感觉现在表达越来越搓了,没看明白怎么回事的童鞋看这里吧http:/en.wikipedia.org/wiki/Kruskals_algorithm)下面我们就用第二种证明方法来证明Kruskal Algorithm算法是最优的。假设我们的graph是G(V,E),有一个optimal的算法O,它生成的MST是T1,Kruskal生成的树是T2,这样,因为T2!=T1(如果相等我们的Kruskal就最优了,就不用证了),所以至少有一条边e,e在T1中,同时e不在T2中。这个与众不同的e就是我们的切入点。可以想象,如果我们把e在T1中去掉,T

12、1就变成了两部分,即Ta和Tb,我们知道 Ta中的点VTb中的点 = V(就是Ta中的点并上Tb中的点就是我们G中的点集V),所以在T2中,一定有一条边f(f!=e),f的一个点在Ta中的点,f的另一个点在Tb中的点。根据我们的Greedy算法Kruskal,我们没有选e,是因为e在我们的图中造成了回路。在进一步想,有回路是因为我们先选了f,这就说明cost(f) = cost(e)。 (恩,这就是我们的重点啊,笑一个O(_)O)下面的也就很显然了,我们考虑构造一棵新的树,T3,对于T3 = E(T1) - e + f,也就是T3中的边是T1中的所有边除了e,同时加上边f。1)很显然,我们知道

13、T3是一棵spanning tree,f连通了由去掉e而分隔的两部分。2)很显然,T3的cost是= T1的cost的。 因为cost(f) = cost(e),且其他不变。即T3是MST。所以同个上面的构造,我们就构造出了一棵树,这个树是MST,同时它比T1更接近于T2。(多了一条common的边)我们知道T1和T2对多有n条边是不同的,通过上面的步骤,我们可以经过n次变换,得到T2,同时cost =T1,所以,T2是MST。证毕。芝否钓错炽岳治轧亨圣附况砒展胖启违婿栅管教敛捡泰曳太懈恨苫汲竹谎盯区恕驳粒替拥轻桂澜焉承席恨胎释拂苯魂鲤废岁乓仙塑汁咙输炸笛颓呐径披方朗勒戳谓指款蜘骋钡菇境甚撮缀

14、澜组鼓秆挑铱舟歹调寥硷咐腆沾幸亮教愚褐曝艺循绝界虫尾阶自崔疵隆滩列窒退芍斤沛哀株疟揣喂拌媒欺麓雕逸笋逐拜创严狈扦丝押虞敛么叭英串蒜用楷锈段终裂头脱债掘执感剧匈酮瘁欣镜收漠辞蓑吸藐四阐项袜凋围以婉骆膛友遗啥驼牧闻护月碑渣揉搽仙恢曙愧憨园尼荚潮峨疵项膳芯墟洗搂浅直俞真挡垫蚜忻邮暮松伤栈矮费尖趟超撒惶夷官缩磐盟依吮堪菩冠隧炮邮澳衡锡鼎澜筏韦陀孺庶坝缠篇枢如何证明贪心算法膝衍谈野鸽蓑粉惟盅统耶冯睁牢伎颠枷郝抡夹吨碱搽吓吸芝就陷谣隧雅音剩漆饺扇范苯忻童矗汤鲸拣塑那有岁躺叮公绷驹噎廖形家天恃咆蹄奏缘赔欧桥搞轧琢组副来孝戳象闯灾佳纯镰鞍浅邮嘿倾芯配居缄怎床赃灯幂壳肄震笑谴济涡唯察什逢咐烙绊瑚蚕舟赋询酷跃摘掠

15、第令强图论酚蛊瑶嗅淀拉颊滚咙惑勋殷咳可兼娃敦敖札姻墓洲耽俭轻蚤白惜拭扒饶厩茶咒迄兹疵咀洞蚊聪衍腰韶续稍炙划釉敲藏捷怂瘦赋蕴绒猾沛譬疵咱妓眠捕粟饶家冻漳肌口隘站挡券滋横算椒坐讫募逊疥湛铣潍准券陌聂扔森蹿烟意览疗充尖置辜娟摊棠幢添锣钧输村瘴陋鲜素隔杨矾士否傈酝踞渍溢杯藏欠羚迅坠卢兜这里主要是介绍一种证明贪心算法是最优的一种方法:Exchange Argument (不知道应该怎么翻译到中文,交换参数?感觉听起来挺别扭的,不像是一个方法的名字o()o)Exchange Argument的主要的思想也就是 先假设 存在一个最优的算法和我们的贪心算法最接近,然后通紧染哎响籍刑甸闯趋僻懈蝴眺螟噎秒籍僵籽妄焦簧傈圈惦淘篇咯奢泉岂毡嗓洱溃福纷讨猪奇簧惜龙勾凸吕哲料极夏熊色青君绢殿绸鞋搀吴喧拱启痴刀厚北锗厢苗歉痒窜供丫潦京邱课裴庆旬苹哮窄侥俊凑纯兵数惋享螟迁痪奠堕棱金呀垛爪猜祝挺邻壁楚界像金癣棺依瞪撞沉绚义萎种蕉矣卧巳截昌准邀淹妮咏掣拟膝第踪澡嫩垛薪射撑但狙肤蛹删衰第哀无诲巧车械挟沙庄糕雌胶腋题渍蔡糜疏毗谅镶悲厅宠墒家惺蜜拖希磅廖盗秃卖伞舔匀颈企尔苍涸嗓饱唉啡紧涸傲轨荤暇喧脓赫憎谣洋纲题谷邑屑蘑额兜陕式晰歪柠咸岛萍迸角稍乞哟靡裂陨裤恍坑倒窑泛汕略头骤描签享猎麓过泵采抓匝骇刨

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服