快3网上购买

动态规划之01背包和完全背包

电脑杂谈  发布时间:2019-10-07 19:03:45  来源:网络整理

01背包问题动态规划算法_动态规划算法 背包问题_动态规划01背包复杂度

0-1 背包 状态转移方程: f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} “将前 i 件物品快3网上购买放入容量为 v 的背包中”这个子问题,若只考虑第 i 件物品的策略(放或不放),那么就可以转换为一个只牵扯前 i-1 件物品的难题。如果不放第 i 件物品,那么问题就转换为“前 i-1 件 物品放在容量为 v 的背包中”,价值为 f[i-1][v];如果放第 i 件物 品,那么问题就转换为“前 i-1 件物品放在剩下的容量为 v-c[i]的背 包中”,此时能拿到的最大价值就是 f[i-1][v-c[i]]再加上通过放入第 i 件物品获取的价值 w[i]。 优化空间复杂度后得到: for i=1..N for v=V..0 f[v]=max{f[v],f[v-c[i]]+w[i]}; 其中的 f[v]=max{f[v],f[v-c[i]]}一句恰就相当于我们的转移函数 f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]},因为今天的 f[v-c[i]]就相当于 原来的 f[i-1][v-c[i]]。 procedure ZeroOnePack(cost,weight) for v=V..cost f[v]=max{f[v],f[v-cost]+weight} 注意这个过程里的处理与上面给出的伪代码有所不同。

动态规划01背包复杂度_01背包问题动态规划算法_动态规划算法 背包问题

前面的示 例程序写成 v=V。。0 是为了在程序中表现每个状况都根据方程求解 了,避免不必要的认知复杂度。而此处如果尚未抽象成看作黑箱的 过程了,就可以加入改进。费用为 cost 的物品不会影响状况 f[0。。cost-1],这是肯定的。 有了这个过程之后,01 背包问题的伪代码就可以这么写: for i=1。。N ZeroOnePack(c[i],w[i]); 如果是要求正好装满背包,那么在初始化时不仅 f[0]为 0 其它 f[1。。V]均设为-∞,这样就可以保证最后受到的 f[N]是一种恰好装满背包的最优解。 如果并没有要求应该把背包装满,而是只期望价格尽量大,初始化 时需要将 f[0。。V]全部设为 0。 为什么呢?可以这么理解:初始化的 f 数组事实上就是在没有 任何物件可以放在背包时的合法状态。如果规定背包正好装满,那 么此时唯有容量为 0 的背包可能被价值为 0 的 nothing“恰好装满”, 其它容量的背包均没有合法的解,属于未定义的状况,它们的值就 都需要是-∞了。如果背包并非需要被装满,那么任何容量的背包都 有一个合法解“什么都不装”,这个解的价值为 0,所以初始时状况的 值也就全部为 0 了。

动态规划算法 背包问题_01背包问题动态规划算法_动态规划01背包复杂度

前面的伪代码中有 for v=V..1,可以将这个循环的上限进行优化。 由于只应该最终 f[v]的值,倒推前一个物品,其实即使明白 f[vw[n]]即可。以此类推,对以第 j 个背包,其实只应该明白到 f[vsum{w[j..n]}]即可,即代码中的 for i=1..N for v=V..0 可以改成 for i=1..n bound=max{V-sum{w[i..n]},c[i]} for v=V..bound 这对于 V 比较大时是有用的。 ? 完全背包 状态转移方程: f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0<=k*c[i]<=v} 优化 1: 若两件物品 i、j 满足 c[i]<=c[j]且 w[i]>=w[j],则将物品 j 去 掉,不用考虑。这个改进的正确性显然:任何状况下都可将价值小 费用高得 j 换成物美价廉的 i,得到起码不会更差的方案。对于随机 生成的数据,这个办法通常会大大减少物品的件数,从而推动速度。然而这个并不能改善最坏情况的复杂度,因为有也许非常设计 的数据可以一件物品也去不掉 优化 2: 首先将成本小于 V 的物品清除,然后使用类似计数排序的做 法,计算出价格同样的物品中价值最高的是什么,可以 O(V+N)地 完成这个改进 优化的算法: for i=1..N for v=0..V f[v]=max{f[v],f[v-cost]+weight} 你会看到,这个伪代码与 P01 的伪代码只有 v 的循环顺序不 同而已。

01背包问题动态规划算法_动态规划算法 背包问题_动态规划01背包复杂度

为什么这么一改就可行呢?首先想想为什么 P01 中要根据 v=V..0 的逆序来循环。这是因为要保证第 i 次循环中的状态 f[i][v] 是由状态 f[i-1][v-c[i]]递推而来。换句话说,这正是为了确保每件 物品只选一次,保证在考虑“选入第 i 件物品”这件策略时,依据的是 一个绝无已经选入第 i 件物品的子结果 f[i-1][v-c[i]]。而如今完全背 包的特征恰是每种物件可选无限件,所以在考量“加选一件第 i 种物 品”这种思路时,却正应该一个可能已选入第 i 种物品的子结果 f[i][v-c[i]],所以就可以使得需要运用 v=0..V 的顺序循环。这就是 这个简单的程序难道成立的道理。 值得一提的是,上面的伪代码中两层 for 循环的顺序可以颠 倒。这个论断有也许会带给算法时间常数上的改进。 最后抽象出处理一件完全背包类物品的过程伪代码: procedure CompletePack(cost,weight) for v=cost..V f[v]=max{f[v],f[v-c[i]]+w[i] }出师表两汉:诸葛亮先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。

动态规划01背包复杂度_动态规划算法 背包问题_01背包问题动态规划算法

然侍 卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开 张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路 也。 宫中府中,俱为一体;陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有 司论其刑赏,以昭陛下平明之理;不宜偏私,使内外异法也。 侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛 下:愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。 将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰“能”,是以众议举宠为 督:愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。 亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉因而倾颓也。先 帝在时,每与臣论此事,未尝不感叹同情于桓、灵也。侍中、尚书、长史、参军,此 悉贞良死节之臣,愿皇上亲之、信之,则汉室之隆,可计日而待也。 臣本布衣,躬耕于新野,苟全性命于乱世,不求闻达于朝廷。先帝不以臣卑鄙, 猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值 倾覆,受任于危亡之际,奉命于危亡之间,尔来二十有一年矣。 先帝知臣谨慎,故临崩寄臣以大事也。

受命以来,夙夜忧叹动态规划01背包复杂度,恐托付不效,以伤 先帝之明;故二月渡泸,深入不毛。今北方已定,兵甲已足,当奖率三军,北定中 原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣因而报先帝而忠陛下之职分 也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。 愿皇上托臣以谋反兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之 言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋动态规划01背包复杂度快3网上购买,以咨诹善道,察纳雅言, 深追先帝遗诏。臣不胜受恩感激。 今当远离,临表涕零,不知所言。


本文来自电脑杂谈,转载请注明本文网址:
http://www.kadakong.com/a/jisuanjixue/article-125492-1.html

    相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 侯天宇
      侯天宇

      这就是博弈

    • 郑双莉
      郑双莉

      南方黑芝麻那个小孩舔碗的广告不错

    • 刘变涛
      刘变涛

      你这不是自己在打自己的脸吗

    恒彩彩票开户 快3网上购买 快三平台 快三投注网 快3投注 福建快3平台 万发彩票注册 恒彩彩票开户 快3网 北京赛车