最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python基于回溯法子集樹模板解決0-1背包問題實(shí)例

 更新時(shí)間:2017年09月02日 12:27:12   作者:羅兵  
這篇文章主要介紹了Python基于回溯法子集樹模板解決0-1背包問題,簡單描述了0-1背包問題并結(jié)合具體實(shí)例形式分析了Python使用回溯法子集樹模板解決0-背包問題的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了Python基于回溯法子集樹模板解決0-1背包問題。分享給大家供大家參考,具體如下:

問題

給定N個(gè)物品和一個(gè)背包。物品i的重量是Wi,其價(jià)值位Vi ,背包的容量為C。問應(yīng)該如何選擇裝入背包的物品,使得放入背包的物品的總價(jià)值為最大?

分析

顯然,放入背包的物品,是N個(gè)物品的所有子集的其中之一。N個(gè)物品中每一個(gè)物品,都有選擇、不選擇兩種狀態(tài)。因此,只需要對每一個(gè)物品的這兩種狀態(tài)進(jìn)行遍歷。

解是一個(gè)長度固定的N元0,1數(shù)組。

套用回溯法子集樹模板,做起來不要太爽?。。?/p>

代碼

'''0-1背包問題'''
n = 3      # 物品數(shù)量
c = 30      # 包的載重量
w = [20, 15, 15] # 物品重量
v = [45, 25, 25] # 物品價(jià)值
maxw = 0 # 合條件的能裝載的最大重量
maxv = 0 # 合條件的能裝載的最大價(jià)值
bag = [0,0,0] # 一個(gè)解(n元0-1數(shù)組)長度固定為n
bags = []   # 一組解
bestbag = None # 最佳解
# 沖突檢測
def conflict(k):
  global bag, w, c
  # bag內(nèi)的前k個(gè)物品已超重,則沖突
  if sum([y[0] for y in filter(lambda x:x[1]==1, zip(w[:k+1], bag[:k+1]))]) > c:
    return True
  return False
# 套用子集樹模板
def backpack(k): # 到達(dá)第k個(gè)物品
  global bag, maxv, maxw, bestbag
  if k==n: # 超出最后一個(gè)物品,判斷結(jié)果是否最優(yōu)
    cv = get_a_pack_value(bag)
    cw = get_a_pack_weight(bag)
    if cv > maxv : # 價(jià)值大的優(yōu)先
      maxv = cv
      bestbag = bag[:]
    if cv == maxv and cw < maxw: # 價(jià)值相同,重量輕的優(yōu)先
      maxw = cw
      bestbag = bag[:]
  else:
    for i in [1,0]: # 遍歷兩種狀態(tài) [選取1, 不選取0]
      bag[k] = i # 因?yàn)榻獾拈L度是固定的
      if not conflict(k): # 剪枝
        backpack(k+1)
# 根據(jù)一個(gè)解bag,計(jì)算重量
def get_a_pack_weight(bag):
  global w
  return sum([y[0] for y in filter(lambda x:x[1]==1, zip(w, bag))])
# 根據(jù)一個(gè)解bag,計(jì)算價(jià)值
def get_a_pack_value(bag):
  global v
  return sum([y[0] for y in filter(lambda x:x[1]==1, zip(v, bag))])
# 測試
backpack(0)
print(bestbag, get_a_pack_value(bestbag))

效果圖

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python-pymysql獲取字段名稱-獲取內(nèi)容方式

    python-pymysql獲取字段名稱-獲取內(nèi)容方式

    這篇文章主要介紹了python-pymysql獲取字段名稱-獲取內(nèi)容方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • scrapy爬蟲完整實(shí)例

    scrapy爬蟲完整實(shí)例

    這篇文章主要介紹了scrapy爬蟲完整實(shí)例,小編覺得還是挺不錯的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python使用異步線程池如何實(shí)現(xiàn)異步TCP服務(wù)器交互

    Python使用異步線程池如何實(shí)現(xiàn)異步TCP服務(wù)器交互

    這篇文章主要介紹了Python使用異步線程池如何實(shí)現(xiàn)異步TCP服務(wù)器交互問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 使用python自動辦公的實(shí)例代碼

    使用python自動辦公的實(shí)例代碼

    os模塊基本來說就是處理文件個(gè)一個(gè)模塊,或者說接口,說白了就是處理文件。這篇文章主要介紹了python自動辦公的實(shí)現(xiàn)代碼,代碼簡單易懂,需要的朋友可以參考下
    2021-11-11
  • Python3解決棋盤覆蓋問題的方法示例

    Python3解決棋盤覆蓋問題的方法示例

    這篇文章主要介紹了Python3解決棋盤覆蓋問題的方法,簡單描述了棋盤覆蓋問題的概念、原理及Python相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • 使用python腳本自動創(chuàng)建pip.ini配置文件代碼實(shí)例

    使用python腳本自動創(chuàng)建pip.ini配置文件代碼實(shí)例

    這篇文章主要介紹了使用python腳本自動創(chuàng)建pip.ini配置文件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python 自動化辦公之批量修改文件名實(shí)操

    python 自動化辦公之批量修改文件名實(shí)操

    這篇文章主要介紹了python 自動化辦公之批量修改文件名實(shí)操,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • python閉包和裝飾器你了解嗎

    python閉包和裝飾器你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Python的閉包和裝飾器,何為閉包?何為裝飾器?感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-08-08
  • YOLOv5車牌識別實(shí)戰(zhàn)教程(一)引言與準(zhǔn)備工作

    YOLOv5車牌識別實(shí)戰(zhàn)教程(一)引言與準(zhǔn)備工作

    這篇文章主要介紹了YOLOv5車牌識別實(shí)戰(zhàn)教程(一)引言與準(zhǔn)備工作,在這個(gè)教程中,我們將一步步教你如何使用YOLOv5進(jìn)行車牌識別,幫助你快速掌握YOLOv5車牌識別技能,需要的朋友可以參考下
    2023-04-04
  • Django實(shí)現(xiàn)自定義路由轉(zhuǎn)換器

    Django實(shí)現(xiàn)自定義路由轉(zhuǎn)換器

    有時(shí)候上面的內(nèi)置的url轉(zhuǎn)換器并不能滿足我們的需求,因此django給我們提供了一個(gè)接口可以讓我們自己定義自己的url轉(zhuǎn)換器,那么如何實(shí)現(xiàn),本文就來介紹一下
    2021-05-05

最新評論

石林| 高要市| 吴江市| 山东| 富裕县| 云南省| 南木林县| 嫩江县| 涪陵区| 江北区| 临漳县| 铜鼓县| 汶上县| 沈阳市| 句容市| 石狮市| 新沂市| 广西| 拜城县| 阳东县| 海伦市| 雷山县| 利辛县| 房产| 临沧市| 修武县| 孝义市| 德江县| 横峰县| 柞水县| 奉化市| 邵东县| 阿坝| 垦利县| 万源市| 保德县| 柘城县| 永平县| 大兴区| 石门县| 肇庆市|