日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法分析与设计——蛮力法0/1背包

發布時間:2025/4/5 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法分析与设计——蛮力法0/1背包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

蠻力法0/1背包

蠻力法

蠻力法是一種簡單直接解決問題的方法,常常直接基于問題的描述,所以蠻力法也是最容易應用的方法。

蠻力法所依賴 的基本技術是遍歷,即采用一定的策略依次處理待求解問題的所有元素,從而找出問題的解。由于其需要依次窮舉待處理的元素,因此蠻力法是一種典型的指數級時間算法。

問題

給定n個重量為{w1,w2,···,wn}、價值為{v1,v2,···,vn}的物品和一個容量為C的背包,0/1背包是一個求解這些物品中的一個最有價值的子集,并且能夠裝入到背包中。

應用實例

有n項可投資的項目,每個項目需要投入資金si,可獲利潤為vi,現有可用資金M,應選擇那些項目來投資才能獲得最大利潤。

想法

用蠻力法解決0/1背包問題,需要考慮給定n個物品集合的所有子集,找出所有重量不超過背包容量的子集,計算每個可能子集的總價值,然后找到價值最大的子集。例如,給定4個物品的重量為{7,3,4,5},價值為{42,12,40,25},和一個容量為10的背包,下表為求解的過程。

序號子集總重量總價值
1?00
2{1}742
3{2}312
4{3}440
5{4}525
6{1,2}1054
7{1,3}11不可行
8{1,4}12不可行
9{2,3}752
10{2,4}837
11{3,4}965
12{1,2,3}14不可行
13{1,2,4}15不可行
14{1,3,4}16不可行
15{2,3,4}12不可行
16{1,2,3,4}19不可行

偽代碼

輸入:重量{w1,w2,···,wn},價值{v1,v2,···,vn},容量C
輸出:裝入背包的物品編號

  • 初始化最大價值maxValue=0;結果子集S=?;
  • 對集合{1,2,···,n}的每一個子集T,執行如下操作:
    2.1 初始化背包的價值value=0;背包的重量weight=0;
    2.2 對子集T的每一個元素j
    2.2.1 如果weight+wj<C,則weight=weight+wj;value=value+vj
    2.2.2 否則,轉入步驟2考察下一個子集;
    2.3 如果maxValue<value,則maxValue=value;S=T;
  • 輸出S中的各元素;
  • 源代碼

    #include<iostream> #include<cstdio> #include<cstdlib> //用于計算程序運算時間 #include<ctime>using namespace std;#define N 100struct goods{ int sign;//物品序號 int wight;//物品重量 int value;//物品價值 };int n, maxValue, cv, cw, C;//物品數量,價值最大,當前價值,當前重量,背包容量 int X[N],cx[N];//最終存儲狀態,當前存儲狀態 struct goods goods[N];int Force(int i) {if(i > n-1){if(maxValue < cv && cw + goods[i].wight <= C){for(int k = 0;k < n;k++)X[k] = cx[k];//存儲最優路徑maxValue = cv;}return maxValue;}cw = cw + goods[i].wight;cv = cv + goods[i].value;cx[i] = 1;//裝入背包Force(i+1);cw = cw-goods[i].wight;cv = cv-goods[i].value;cx[i] = 0;//不裝入背包Force(i+1);return maxValue; }int main() {clock_t starttime,finish; //用于計算時間double time;starttime=clock();//用于計算程序運行時間printf("物品種類n:");scanf("%d",&n);printf("背包容量C:");scanf("%d",&C);for(int i = 0; i < n; i++){printf("物品%d的重量w[%d]及其價值v[%d]:",i+1,i+1,i+1);scanf("%d%d",&goods[i].wight,&goods[i].value);}int sum1 = Force(0);printf("蠻力法求解0/1背包問題:\nX=[");for(int i = 0; i < n; i++){cout << X[i]<<" ";}printf("] 裝入總價值%d\n",sum1);finish=clock();time = (double)(finish-starttime)/1000;//時間單位為秒starttime=clock();//用于計算程序運行時間cout<<"time is:"<<time<<endl;return 0; }

    算法分析

    對于一個具有n個元素的集合,其子集數量是2n,所以無論生成子集的算法效率有多高,蠻力法求解0/1背包都會是一個Ω(2n)的算法。

    總結

    以上是生活随笔為你收集整理的算法分析与设计——蛮力法0/1背包的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 免费精品视频一区二区三区 | 欧美日韩在线观看一区二区三区 | 少妇被躁爽到高潮无码文 | 国产黄色在线免费观看 | 涩涩屋视频| 自拍偷拍电影 | 久久免费视频6 | 伊人伊网| 黄色片网战 | 国产人成视频在线观看 | 玉女心经是什么意思 | 性欧美大战久久久久久久 | 好吊日在线| 琪琪午夜伦理影院7777 | 久久亚洲欧洲 | 久操青青 | 午夜精品久久久久久久99老熟妇 | 国产第一亚洲 | 亚洲丁香色| 国产美女喷水视频 | 精品人妻一区二区三区久久 | 国产尤物在线 | 国产精品自拍片 | 亚洲欧美国产精品专区久久 | 思思久久精品 | 人妻一区二区在线 | 色综合久久88色综合天天 | 国产精品igao | 18岁毛片 | 亚洲区色 | 波多野结衣之潜藏淫欲 | 亚洲影院一区 | 91精品91久久久中77777老牛 | 亚洲成人福利在线 | 亚洲激情av在线 | 欧美性教育视频 | 告诉我真相俄剧在线观看 | 丰满岳妇伦在线播放 | 国产无人区码熟妇毛片多 | 亚洲精品福利在线观看 | 欧美三级一区二区三区 | 色小姐综合 | 国产精品主播在线 | 99精品在线播放 | 东方欧美色图 | 午夜激情影视 | 未满十八岁禁止进入 | 日韩女同互慰一区二区 | 182tv午夜| 最新av| 国产精品麻豆视频 | 在线看污视频 | 毛片内射久久久一区 | 久久精品美女 | 日本xxxxxxxxx69 | 综合色在线视频 | 免费国产a | 亚洲人人爽 | 欧美一区二区三区免费观看 | 人妖黄色片| 精品一区二区三区电影 | 美女午夜激情 | 色欲无码人妻久久精品 | 欧美大肚乱孕交hd孕妇 | 婷婷影音 | 影音先锋中文在线 | 熟妇高潮喷沈阳45熟妇高潮喷 | 男人的天堂视频在线观看 | 国产三级久久 | www黄在线观看 | 国产日韩在线免费观看 | 大乳村妇的性需求 | 亚洲黄色一级大片 | 日韩欧美在线播放 | 人妻熟人中文字幕一区二区 | 黑人一级 | 欧美jizzhd精品欧美18 | 色欲久久久天天天综合网 | 日韩精品人妻一区二区三区免费 | 一区黄色 | 中文字幕一区不卡 | 殴美一区二区 | 哈利波特3在线观看免费版英文版 | 欧美性受视频 | 欧美××××黑人××性爽 | jizzjizz中国精品麻豆 | 亚洲欧美视频在线播放 | 亚洲精品在线视频免费观看 | 污污在线免费观看 | 国产成人免费观看视频 | 久久久午夜影院 | 二区在线播放 | 国产欧美久久一区二区三区 | 日韩美女国产精品 | 大尺度舌吻呻吟声 | 中文字幕一区二区在线视频 | 欧美一a一片一级一片 | 少妇影院在线观看 | 国产婷婷在线观看 |