亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

0/1背包問題[python]

2019-11-14 11:33:27
字體:
來源:轉載
供稿:網友
 

問題描述

    假設我們有n件物品,分別編號為1, 2...n。其中編號為i的物品價值為vi,它的重量為wi。為了簡化問題,假定價值和重量都是整數值?,F在,假設我們有一個背包,它能夠承載的重量是W?,F在,我們希望往包里裝這些物品,使得包里裝的物品價值最大化,那么我們該如何來選擇裝的東西呢?問題結構如下圖所示:

    這個問題其實根據不同的情況可以歸結為不同的解決方法。假定我們這里選取的物品每個都是獨立的,不能選取部分。也就是說我們要么選取某個物品,要么不能選取,不能只選取一個物品的一部分。這種情況,我們稱之為0-1背包問題。

    

    我們來看這個問題。我們需要選擇n個元素中的若干個來形成最優解,假定為k個。那么對于這k個元素a1, a2, ...ak來說,它們組成的物品組合必然滿足總重量<=背包重量限制,而且它們的價值必然是最大的。因為它們是我們假定的最優選擇嘛,肯定價值應該是最大的。假定ak是我們按照前面順序放入的最后一個物品。它的重量為wk,它的價值為vk。既然我們前面選擇的這k個元素構成了最優選擇,如果我們把這個ak物品拿走,對應于k-1個物品來說,它們所涵蓋的重量范圍為0-(W-wk)。假定W為背包允許承重的量。假定最終的價值是V,剩下的物品所構成的價值為V-vk。這剩下的k-1個元素是不是構成了一個這種W-wk的最優解呢?

    我們可以用反證法來推導。假定拿走ak這個物品后,剩下的這些物品沒有構成W-wk重量范圍的最佳價值選擇。那么我們肯定有另外k-1個元素,他們在W-wk重量范圍內構成的價值更大。如果這樣的話,我們用這k-1個物品再加上第k個,他們構成的最終W重量范圍內的價值就是最優的。這豈不是和我們前面假設的k個元素構成最佳矛盾了嗎?所以我們可以肯定,在這k個元素里拿掉最后那個元素,前面剩下的元素依然構成一個最佳解。

    現在我們經過前面的推理已經得到了一個基本的遞推關系,就是一個最優解的子解集也是最優的??墒牵覀冊撛趺磥砬蟮眠@個最優解呢?我們這樣來看。假定我們定義一個函數c[i, w]表示到第i個元素為止,在限制總重量為w的情況下我們所能選擇到的最優解。那么這個最優解要么包含有i這個物品,要么不包含,肯定是這兩種情況中的一種。如果我們選擇了第i個物品,那么實際上這個最優解是c[i - 1, w-wi] + vi。而如果我們沒有選擇第i個物品,這個最優解是c[i-1, w]。這樣,實際上對于到底要不要取第i個物品,我們只要比較這兩種情況,哪個的結果值更大不就是最優的么?

    在前面討論的關系里,還有一個情況我們需要考慮的就是,我們這個最優解是基于選擇物品i時總重量還是在w范圍內的,如果超出了呢?我們肯定不能選擇它,這就和c[i-1, w]一樣。

    另外,對于初始的情況呢?很明顯c[0, w]里不管w是多少,肯定為0。因為它表示我們一個物品都不選擇的情況。c[i, 0]也一樣,當我們總重量限制為0時,肯定價值為0。

    這樣,基于我們前面討論的這3個部分,我們可以得到一個如下的遞推公式:

    有了這個關系,我們可以更進一步的來考慮代碼實現了。我們有這么一個遞歸的關系,其中,后面的函數結果其實是依賴于前面的結果的。我們只要按照前面求出來最基礎的最優條件,然后往后面一步步遞推,就可以找到結果了。

#n個物體的重量(w[0]無用)w = [0, 2, 2, 6, 5, 4]#n個物體的價值(p[0]無用)p = [0, 6, 3, 5, 4, 6]#計算n的個數n = len(w) - 1#背包的載重量m = 10#裝入背包的物體,元素為True時,對應物體被裝入(x[0]無用)x = [False for raw in range(n + 1)]v = 0#optp[i][j]表示在前i個物體中,能夠裝入載重量為j的背包中的物體的最大價值optp = [[0 for col in range(m + 1)] for raw in range(n + 1)] def knapsack_dynamic(w, p, n, m, x):    #計算optp[i][j]    for i in range(1, n + 1):        for j in range(1, m + 1):            optp[i][j] = optp[i - 1][j]            if (j >= w[i]) and (optp[i - 1][j - w[i]] + p[i] > optp[i - 1][j]):                optp[i][j] = optp[i - 1][j - w[i]] + p[i]        #遞推裝入背包的物體    j = m    for i in range(n, 0, -1):        if optp[i][j] > optp[i - 1][j]:            x[i] = True            j = j - w[i]          #返回最大價值    v = optp[n][m]    return v 

    此題的核心就在d_k兩個循環體里,因為之前已經實現了一個類二維數組,所有dp[ 0 ] [ j ] dp[ i ][ 0 ]都是零,所以從i=1開始,通過循環--遞歸一層一層的賦值,所有的下一層值都由上一層的值相等決定或者,dp i-1,j-w[ i ]+p[ i ]決定,最后全部鋪滿,在求最大值的時候,直接取表格中的值即可。 

    這個背包問題困擾了我兩天,才坎坎理解了它,在此很感謝下面兩篇文章的幫助,本篇文章除了最后的理解也都是引用了它們的文章(懶癌發作,是在是不愿意自己寫了......)

    ~本篇文章參考:

    1:http://blog.sina.com.cn/s/blog_3fe961ae0100zap7.html    2:http://shmilyaw-hotmail-com.VEvb.com/blog/2009761


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩小视频在线观看| 午夜精品美女自拍福到在线| 日韩hd视频在线观看| 国产欧美久久久久久| 亚洲一区二区少妇| 国产91色在线|免| 日本a级片电影一区二区| 久久成人在线视频| 中文字幕精品国产| 91在线视频免费| 欧美在线视频在线播放完整版免费观看| 亚洲精品456在线播放狼人| 亚洲香蕉成视频在线观看| 国产精品成人国产乱一区| 91精品中国老女人| 国产成人精品电影久久久| 国产成人高清激情视频在线观看| 亚洲高清免费观看高清完整版| 欧美成人全部免费| 懂色av影视一区二区三区| 亚洲成人黄色网址| 亚洲护士老师的毛茸茸最新章节| 久久久极品av| 亚洲永久免费观看| 欧美性xxxxx极品娇小| 欧美视频二区36p| 日韩在线免费观看视频| 国产精品专区一| 国产精品日韩在线观看| 亚洲天堂久久av| 91精品久久久久久久久青青| 成人欧美在线视频| 国产91精品久久久| 欧美另类交人妖| 国产亚洲欧美日韩精品| 国产精品视频久久| 国产精品劲爆视频| 欧美激情精品久久久久久| 亚洲电影在线观看| 国产精品第二页| 色婷婷综合成人av| 日韩免费高清在线观看| 欧美综合国产精品久久丁香| 亚洲女人天堂av| 亚洲天堂成人在线| 亚洲变态欧美另类捆绑| 午夜精品一区二区三区在线播放| 亚洲精品永久免费| 国外日韩电影在线观看| 亚洲成人国产精品| 91高潮精品免费porn| 精品成人在线视频| 欧美精品www| 亚洲精品一区中文字幕乱码| 欧美成人精品三级在线观看| 欧美视频中文字幕在线| 国产午夜精品视频免费不卡69堂| 午夜精品福利电影| 色综合色综合久久综合频道88| 色99之美女主播在线视频| 国产精品永久免费视频| 亚洲第一区第二区| 日韩高清电影免费观看完整| 亚洲少妇激情视频| 国产精品久久久久久搜索| 欧美日韩国产综合视频在线观看中文| 成人午夜高潮视频| 精品福利在线观看| 久久最新资源网| 中文字幕日韩欧美| 91色中文字幕| 这里只有精品视频在线| 午夜精品一区二区三区av| 亚洲午夜精品久久久久久性色| 国产精品日韩在线| 日产精品久久久一区二区福利| 懂色av中文一区二区三区天美| 欧美老女人在线视频| 欧美日韩电影在线观看| 国产成人精品a视频一区www| 欧美一级大片视频| 欧美日韩免费在线观看| 91精品视频免费看| 亚洲精选在线观看| 国产精品国产三级国产专播精品人| 久久久亚洲欧洲日产国码aⅴ| 日韩久久精品成人| 中文字幕久热精品在线视频| 亚洲国产精品女人久久久| 国产精品18久久久久久麻辣| 亚洲毛片在线免费观看| 疯狂做受xxxx欧美肥白少妇| 国产成人+综合亚洲+天堂| 国产成人精品久久| 欧美日韩国产区| 国产激情综合五月久久| 欧美激情国产日韩精品一区18| 91久久精品久久国产性色也91| 中文字幕无线精品亚洲乱码一区| 欧美床上激情在线观看| 欧美大片免费观看在线观看网站推荐| 国产精品自产拍在线观看| 日韩精品久久久久久福利| 大量国产精品视频| 国产69精品久久久久9| 91在线视频导航| 欧美日韩国产成人高清视频| 在线国产精品视频| 精品夜色国产国偷在线| 国产精品久久久久久久久久久久久久| 亚洲综合第一页| 欧美日韩亚洲一区二| 国产精品久久97| 欧美日韩一区二区三区| 色悠悠久久88| xvideos国产精品| 91丨九色丨国产在线| 91国产美女在线观看| 日韩av第一页| 国产欧美一区二区三区在线| 亚洲精品网站在线播放gif| 茄子视频成人在线| 亚洲free性xxxx护士白浆| 亚洲自拍欧美色图| 深夜福利国产精品| 91精品视频免费看| 97超视频免费观看| 国产999精品视频| 亚洲跨种族黑人xxx| 日本欧美一二三区| 日韩中文字幕精品视频| 欧美中文在线观看国产| 美日韩丰满少妇在线观看| 丝袜美腿亚洲一区二区| 亚洲加勒比久久88色综合| 日本精品在线视频| 久久精品男人天堂| 国产欧美日韩综合精品| 欧美成在线视频| 国产精品久久久久久久久粉嫩av| 国产欧美日韩综合精品| 成人亚洲欧美一区二区三区| 欧美在线一级va免费观看| 午夜剧场成人观在线视频免费观看| 欧美贵妇videos办公室| 欧美做受高潮1| 中文字幕亚洲情99在线| 欧美日韩色婷婷| 国产精品久久国产精品99gif| 欧美伦理91i| 亚洲影视九九影院在线观看| 久久视频精品在线| 97国产在线观看| 少妇高潮久久久久久潘金莲| 国产成人一区二区在线| 北条麻妃在线一区二区| 亚洲另类欧美自拍| 日本视频久久久| 日本一欧美一欧美一亚洲视频| 中文字幕成人在线| 亚洲va电影大全| 久久九九全国免费精品观看| 色哟哟亚洲精品一区二区| 欧美大尺度电影在线观看|