精华内容
下载资源
问答
  • 贪心算法证明如下.doc

    2020-11-11 10:56:18
    贪心算法证明如下 设定如下变量 Value[i]第i个加油站的油价 Over[i]在第i站时的剩油 Way[i]起点到油站i的距离 X[I]X记录问题的最优解X[I]记录油站I的实际加油量 首先X[1]0Over[1]=0 假设第I站加的X[I]一直开到第K站...
  • 贪心算法证明问题

    2015-11-10 00:29:16
    Step0:给出贪心算法A描述 Step2:[Key]修改算法O用ExchangArgument交换A和O中的一个元素)得到新的算法O Step4:证明O至少和O一样,即O也是最优的 证毕。 Step0: 给出贪心算法A描述 Step2:找出O和A中的...

    0,交换参数?感觉听起来挺别扭的不像是一个方法的名字~o╯□╰)o

    下面来看一个更为formal解释:

    Step0:给出贪心算法A描述

    Step2:[Key]修改算法O用ExchangArgument交换A和O中的一个元素)得到新的算法O

    Step4:证明O至少和O一样,即O也是最优的

    证毕。

    Step0: 给出贪心算法A描述

    Step2:找出O和A中的一个不同。当然这里面的不同可以是一个元素在O不再A或者是一个pair顺序在A和在O不一样。这个要根据具体题目)

    Step4:Argue这样的不同一共有Polynomi个,然后我exchangPolynomi次就可以消除所有的不同,同时保证了算法的质量不比O差。这也就是说Aasgoodas一个O因为Oarbitrari选的所以Aoptim

    下面给几个例子:

    例 MaximumCardinDisjointIntervalProblem

    GreediAlgorithm:每次都选所有interv中bi最小的那个,把(aibi加入S然后把(aibiT中删除,同时把T中所有和(aibi有交叉的interv删除,然后再在T中找最小的bj循环上面的操作,直到没有可以在添加的

    下面就用第一个证明的方法来证。

    假设对于AA第k个选择的aibi而O第K个选择的ajbj从A定义我可以直到bi<=bj

    1很显然,O'这个问题的一个解,也就是说O'中的interv没有重叠的

    2O'一个最优解,因为他interv个数和O一样。

    问题描述:有一系列的tasks{a1a2an}每个task需要在cpu上跑{p1p2pn}个unit时间,cpu非抢占式的也就是task一旦获得cpu就运行直到完成,{c1c2cn}每个task完成时间,现在要minim就是c1+c2++cn/n所有的task一起releas

    证明上面说的GreediAlgorithm最优的

    假设A不是最优的那么一定存在一个最优的O和A最接近,选择的前k-1个task相同的

    No.123k

    O ajai

    现在就来构造O'当然,O'就是把O中的ai和aj两个元素交换一下,即

    A   aiaj

    O'aiaj

    还是用上面的5个例子算了对于a2,a1,a3,a5,a4知道总时间其实是5个a2时间,即p24个a1时间,即p1依次类推,所以总时间是5*p2+4*p1+3*p3+2*p5+p4

    问题描述:对于边集合E先按每个边的cost排序,从小到大,然后按如下方法构造一个MST每次选cost最小的那个边,添加进我MST如果一个边使我现有的MST呈现环路,则把这条边舍弃,然后重复上面的操作。感觉现在表达越来越搓了没看明白怎么回事的童鞋看这里吧 http://en.wikipedia.org/wiki/Kruskal's_algorithm

    假设我graphGV,E有一个optim算法O生成的MSTT1Kruskal生成的树是T2这样,因为T2=T1如果相等我Kruskal就最优了就不用证了所以至少有一条边eeT1中,同时e不在T2中。这个与众不同的e就是切入点。可以想象,如果我把eT1中去掉,T1就变成了两部分,即Ta和Tb知道 {Ta中的点}V{Tb中的点}=V就是Ta中的点并上Tb中的点就是G中的点集V所以在T2中,一定有一条边ff=ef一个点在{Ta中的点}f另一个点在{Tb中的点}根据我Greedi算法Kruskal没有选e因为e图中造成了回路。进一步想,有回路是因为我先选了f这就说明costf<=coste恩,这就是重点啊,笑一个O∩_∩)O~

    1很显然,知道T3一棵spantreef连通了由去掉e而分隔的两部分。

    所以同个上面的构造,就构造出了一棵树,这个树是MST同时它比T1更接近于T2多了一条common边)

    展开全文
  • 贪心算法证明的回忆

    千次阅读 2014-06-22 12:24:04
    关于贪心选择证明的理解,突然youdian

    关于贪心选择证明的理解,突然有点想不通了。。。

    拿最简单的活动安排问题,我在想贪心选择先找f1,然后剩下的2->N逐个找能与之前兼容的活动,按照f 不递减序排列。如果存在一个最优解,第一个活动是k, 那么 k后面的活动自然与 f1 兼容,但是k前面的呢,可能就会与s1 f1 不兼容了,记得当年算法书证明这个挺漂亮的,而且考试还考了一道8分的证明。

    后来翻翻书,发现证明过程一个横重要的细节忽视了,不管是贪心解还是 某一个最优解,都要把活动按照f 不递减排序。所以最优解第一个活动一定是解里面活动结束最早的,所以剩下的活动必与 F1兼容。

    最优子结构其实就是之前DP的剪切技术,假设E是最优解,如果E'=E-{1} 存在一个更优解,替换掉原最优解,则导致一个全局更优的解,这与之前解是最优产生矛盾,然后每一步贪心产生更小规模的子问题,直至最优解导出。


    所以思路就是两步,第一步贪心选择,一定要找到了一个类似于按照活动结束时间排序这样一个预处理,然后在此基础上用替换的方式,发现其他方式产生的最优解最多与贪心产生的最优解一样,不可能更优,因此可以说贪心解最优,因为不要求把所有最优解罗列。

    第二步,最有子结构,剪切技术,产生与假设想矛盾,因此不存在里面更优的解。

    虽然曹博的PPT,还有扶栏小炒肉大神说过,贪心选择可能是题目的难点,因为证明具有这种性质往往是困难的,所以你不知道你想出的一个贪心策略是否可以达到全局最优解。但是一旦弄出来,就是漂亮的算法,Dijstra(一直对于证明有点疑惑), Prim Kruskal HuffmanCode 等等,效率很高

    展开全文
  • 活动安排的最优解,一般是贪心算法的思路求取.每一次选择 相对于当前时间 最早结束的活动,得到的子序列...意思就是,要证明我们所用的贪心算法,每一步都是最优解 设变量 设共有n项活动待安排,活动的开始时间分别是s...

    活动安排的最优解,一般是贪心算法的思路求取.每一次选择 相对于当前时间 最早结束的活动,得到的子序列是活动的一个最优安排,即在一段时间内安排的活动数最多.

    设定命题

    贪心算法执行到第k步,选择了k项活动 i1,i2,ik

    则存在最优解A,就是所选的这k项的集合 A = {i1,i2,…ik}

    意思就是,要证明我们所用的贪心算法,每一步都是最优解

    设变量

    设共有n项活动待安排,活动的开始时间分别是s1,s2,…sn

    活动的结束时间分别是 f1,f2,…fn

    将这n个活动按照最早结束时间排好序,也就是f1,f2,…fn从小到大排好序

    排好序的n个活动设为S = {a1,a2,…an}

    这个活动安排题目的最优解,即安排的活动数最多的子序列,设为A

    一共需要选择x次得到最优解

    数学归纳法

    当算法执行到第k步的话,表示当前已经选择了k项活动.

    当k=1时,我们需要证明最早结束的活动a1,一定被选中

    此时任取最优解B(其实就刚刚选了一个活动),如果B中第一个活动不是a1,那么可以用a1,替换B中的第一个活动
    替换过后的B’也是当前的最优解.所以无论第一个活动在不在B里,都能找到最优解A使得第一个活动一定在最优解A里

    假设算法执行k次时,得到的是最优解

    A = {i1,i2,…ik}

    算法还没有执行完毕,A中剩下活动选自集合S’ = { i | i 属于S ,si>=fk}
    S’中的元素肯定输入原集合,但是因为此时已经安排好了k个活动,如果要接着选,那么被选到的活动的开始时间一定是大于等于第k个活动的结束时间

    假设从S’中选择的活动集合是C,那么按照我们的贪心算法C是S’的最优解
    整体的最优解A = {i1,i2,…ik} U C

    如果C不是最优解,D是最优解,说明D中包含的活动比的多
    那么整体的最优解应该是 A = {i1,i2,…ik} U D
    与A = {i1,i2,…ik} U C是最优解相矛盾

    到此
    我们在假设贪心算法执行k次,所选择的集合是最优解的条件下
    推出 A = {i1,i2,…ik} U C

    那么当算法执行k+1次时,即从S’中再选出一个元素 i(k+1) 时,根据上面的假设,我们知道 i(k+1) 一定是S’中开始时间最早的活动,而且C是S’的最优解,
    所以{i1,i2,…ik,i(k+1)} U { C- i(k+1) }也是原问题的最优解.

    总结

    k=1时,一定会选最早开始的活动
    假设 k = k时成立
    也就是最优解 A = {i1,i2,…ik} U C
    那么有 k = k + 1时
    A = {i1,i2,…ik,i(k+1)} U { C- i(k+1) }
    所以对于这道活动安排题,贪心算法所取得的就是最优解

    这东西不像数学公式那样,有板有眼的
    我自己理解的也不是很透彻
    应该多分析分析就好了吧,毕竟小菜鸡不能变成北京烤鸭

    展开全文
  • 链接:...做的时候总感觉贪心得不到最优解,没想到竟然过了。。 讨论区好像没有证明,我就照着模板写了一个证明(第一次写证明可能说的不是很清楚,老哥们有更精炼的证明希望可以发一下) 证明如...

    链接:https://www.nowcoder.com/questionTerminal/1284469ee94a4762848816a42281a9e0?toCommentId=2997714
    来源:牛客网
     

    做的时候总感觉贪心得不到最优解,没想到竟然过了。。

    讨论区好像没有证明,我就照着模板写了一个证明(第一次写证明可能说的不是很清楚,老哥们有更精炼的证明希望可以发一下)

     

    证明如下:

    假设有一个列表存储所有代理服务器IP,称为proxy,另一个列表存储要访问的服务器IP序列,称为target。

    从头到尾遍历target列表,并记录其中代理服务器IP出现的情况。当proxy中的每一个IP都出现一次(我称其为一个周期),下一次再出现代理服务器IP时就必须要更换代理服务器。

    所以我们的贪心策略就是,每次都选择在一个周期中最后出现的代理服务器作为切换的目标代理服务器,比如说初始代理服务器就是目标服务器列表的第一个周期中最后一个代理服务器。

    假设贪心算法结果为A,如果A不是最优,那么一定存在一个最优解O,O和A至多前k-1个选择相同,从第k个选择开始不同。

    这里的第k个选择就是第k次切换代理服务器时选择作为替换目标的代理服务器IP。

    假设对于A,A第k次切换选择的是第s个代理,而O中第k次选择第s’个代理。我们再构建一个解O’,其前k-1个选择与O相同,k之后的选择也与O相同,只有第k个选择变为第s个代理。

    由于在第k个位置选择第s个代理,其切换的必须位置在选择s‘时之后,所以其切换的次数和O相同,O’仍为最优解,但是O’与A的共同选择有k个,这与我们的前提最多k-1个共同选择相冲突。从此向后递推可得出A为最优解。

    展开全文
  • 当length>=5的时候,任何数都可以分解为加数2和3的和,且2*(length-2)>length,3*(length-3)>length,所以可以将length分解为全为2,3的加数再相乘就是结果,又注意到3*(length-3)>2*(length-2),所以尽...
  • “买书问题”的贪心算法证明

    千次阅读 热门讨论 2010-03-25 11:02:00
    之1.4 “买书问题”的贪心算法证明。 对买书问题有变形的贪心算法证明: 算法如下: 1.   对给定要买的书籍书卷的数量按小到大排序,不妨设书卷(A,B,C,D,E)的各自购买数量为(x1,x2,x3,x4,x5)(x1). ...
  • [url]http://student.csdn.net/space.php?uid=116484&do=blog&id=27299[/url]
  • 由于最近考算法,经常会遇到要求证明贪心算法中,贪心策略及贪心选择是正确的。 由于这块涉及到胚和拟阵的问题,书上仅在贪心算法章节的描述过于抽象,以至于...用课本的“活动选择问题”来阐述如何理解贪心算法证明
  • 贪心算法证明

    2020-05-04 10:20:00
    贪心算法证明一般是比动态规划要复杂。 原因是贪心算法证明有两个,一个是最优子结构,另外一个是贪心选择性质。 贪心选择性质: 可以通过局部最优选择来构造全局最优解 证明:一般考虑某个子问题的最优解,然后...
  • 主要思想贪心算法就是让计算机模拟一个「贪心的人」来做出决策。这个贪心的人是目光短浅的,他每次总是:只做出当前看来最好的选择只看眼前的利益,而不考虑做出选择后对未来造成的影响并且他一旦做出了选择,就没有...
  • 贪心算法正确性证明

    千次阅读 2018-12-08 00:15:04
    贪心算法正确性证明 什么是贪心算法 WKI定义:贪心算法(英语:greedy algorithm),又称贪婪算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。...
  • 一、贪心算法定义:一个算法是贪心算法,如果它是通过一些小的步骤来一个求解,并且在每一步根据局部情况选择一个决定,使得某些主要的指标得到优化。二、区间调度问题1. 问题:我们有一组需求{1,2,3,......,N},第i...
  • 贪心算法

    2020-02-26 22:59:06
    文章目录思想条件贪心算法正确性的证明()贪心选择的证明,方法一:贪心选择的证明,方法二——剪枝法:最优子结构证明:应用:活动选择问题贪心选择的证明应用:Huffman编码算法证明贪心选择性质证明最优子结构性质...
  • 贪心算法的正确性证明

    万次阅读 2019-03-15 16:43:52
    贪心算法的正确性证明 摘要 贪心算法最难的部分就是正确性的证明,常用的方法有归纳法(对算法步数归纳、对问题归纳)和交换论证法(从最优解出发,不变坏地替换,得到贪心策略的解)。下面以三个例子说明这些正确性证...
  • 这篇文章就是对于贪心算法的入门介绍贪心算法贪心算法(又称贪婪算法)是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是...
  • 首先我们先代入问题来认识一下贪心算法涉及的问题 找钱问题 给顾客找钱,希望找零的钞票尽可能少,零钱种类和数量限定 找钱问题满足最优子结构 最快找零(贪心):为得到最小的找零次数,每次最大程度低减少零额 ...
  • 证明一个贪心算法是正确的,需要证明我们可以把一个最优解逐步转化为我们用贪心算法所得到的解,而解不会更差,从而证明贪心算法得到的解和最优解是一样好的(显然,最优解不可能更好)。而要证明一个贪心算法是错....
  • 所以说只有证明局部最优解在全局最优解序列中,才能通过贪心算法得到问题的全局最优解。也就是说选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。所以对所采用的贪心...
  • 活动安排问题(贪心算法证明

    万次阅读 2018-05-05 14:47:29
    会场安排问题(贪心算法):贪心算法:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,...
  • 一、贪心算法定义:一个算法是贪心算法,如果它是通过一些小的步骤来一个求解,并且在每一步根据局部情况选择一个决定,使得某些主要的指标得到优化。二、区间调度问题1. 问题:我们有一组需求{1,2,3,......,N},第i...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 911
精华内容 364
关键字:

贪心算法证明