




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上分支限界法01背包問題12軟工 028 胡夢穎一、 問題描述0-1背包問題:給定n種物品和一個(gè)背包。物品i的重量是Wi,其價(jià)值為Vi,背包的容量為C。應(yīng)如何選擇裝入背包的物品,使得裝入背包中物品的總價(jià)值最大?在選擇裝入背包的物品時(shí),對每種物品i只有2種選擇,即裝入背包或不裝入背包。不能將物品i裝入背包多次,也不能只裝入部分的物品i。二、 問題分析分支限界法類似于回溯法,也是在問題的解空間上搜索問題解的算法。一般情況下,分支限界法與回溯法的求解目標(biāo)不同?;厮莘ǖ那蠼饽繕?biāo)是找出解空間中滿足約束條件的所有解,而分支限界法的求解目標(biāo)則是找出滿足約束條件的一個(gè)解,或是在滿足約束
2、條件的解中找出使某一目標(biāo)函數(shù)值達(dá)到極大或極小的解,即在某種意義下的最優(yōu)解。由于求解目標(biāo)不同,導(dǎo)致分支限界法與回溯法對解空間的搜索方式也不相同。回溯法以深度優(yōu)先的方式搜索解空間,而分支限界法則以廣度優(yōu)先或以最小耗費(fèi)優(yōu)先的方式搜索解空間。分支限界法的搜索策略是,在擴(kuò)展結(jié)點(diǎn)處,先生成其所有的兒子結(jié)點(diǎn)(分支),然后再從當(dāng)前的活結(jié)點(diǎn)表中選擇下一擴(kuò)展結(jié)點(diǎn)。為了有效地選擇下一擴(kuò)展結(jié)點(diǎn),加速搜索的進(jìn)程,在每一個(gè)活結(jié)點(diǎn)處,計(jì)算一個(gè)函數(shù)值(限界),并根據(jù)函數(shù)值,從當(dāng)前活結(jié)點(diǎn)表中選擇一個(gè)最有利的結(jié)點(diǎn)作為擴(kuò)展結(jié)點(diǎn),使搜索朝著解空間上有最優(yōu)解的分支推進(jìn),以便盡快地找出一個(gè)最優(yōu)解。這種方式稱為分支限界法。人們已經(jīng)用分支限
3、界法解決了大量離散最優(yōu)化的問題。三源代碼#include <stdio.h> #include<malloc.h> #define MaxSize 100 /結(jié)點(diǎn)數(shù)的最大值typedef struct QNode float weight;float value;int ceng;struct QNode *parent;bool leftChild;QNode,*qnode;typedef struct qnode QMaxSize; int front,rear; SqQueue; /存放結(jié)點(diǎn)的隊(duì)列 SqQueue sq; float bestv=0; /最優(yōu)解 i
4、nt n=0; /實(shí)際物品數(shù) float wMaxSize; /物品的重量 float vMaxSize; /物品的價(jià)值 int bestxMaxSize; / 存放最優(yōu)解 qnode bestE; void InitQueue(SqQueue &sq ) /隊(duì)列初始化 sq.front=1; sq.rear=1; bool QueueEmpty(SqQueue sq) /隊(duì)列是否為空 if(sq.front=sq.rear) return true; else return false; void EnQueue(SqQueue &sq,qnode b) /入隊(duì) if(sq.
5、front=(sq.rear+1)%MaxSize) printf("隊(duì)列已滿!"); return; sq.Qsq.rear=b; sq.rear=(sq.rear+1)%MaxSize; qnode DeQueue(SqQueue &sq) /出隊(duì) qnode e; if(sq.front=sq.rear) printf("隊(duì)列已空!"); return 0; e=sq.Qsq.front; sq.front=(sq.front+1)%MaxSize; return e; void EnQueue1(float wt,float vt, in
6、t i ,QNode *parent, bool leftchild) qnode b; if (i=n) /可行葉子結(jié)點(diǎn) if (vt=bestv) bestE=parent;bestxn=(leftchild)?1:0; return; b=(qnode)malloc(sizeof(QNode); /非葉子結(jié)點(diǎn) b->weight=wt; b->value=vt; b->ceng=i; b->parent=parent; b->leftChild=leftchild; EnQueue(sq,b); void maxLoading(float w,float v
7、,int c) float wt=0; float vt=0; int i=1; /當(dāng)前的擴(kuò)展結(jié)點(diǎn)所在的層 float ew=0; /擴(kuò)展節(jié)點(diǎn)所相應(yīng)的當(dāng)前載重量 float ev=0; /擴(kuò)展結(jié)點(diǎn)所相應(yīng)的價(jià)值 qnode e=NULL; qnode t=NULL; InitQueue(sq); EnQueue(sq,t); /空標(biāo)志進(jìn)隊(duì)列 while (!QueueEmpty(sq) wt=ew+wi; vt=ev+vi; if (wt <= c) if(vt>bestv) bestv=vt; EnQueue1(wt,vt,i,e,true); / 左兒子結(jié)點(diǎn)進(jìn)隊(duì)列 EnQueue
8、1(ew,ev,i,e,false); /右兒子總是可行; e=DeQueue(sq); / 取下一擴(kuò)展結(jié)點(diǎn) if (e = NULL) if (QueueEmpty(sq) break; EnQueue(sq,NULL); / 同層結(jié)點(diǎn)尾部標(biāo)志 e=DeQueue(sq); / 取下一擴(kuò)展結(jié)點(diǎn) i+; ew=e->weight; /更新當(dāng)前擴(kuò)展結(jié)點(diǎn)的值 ev=e->value; printf("最優(yōu)取法為:n"); for( int j=n-1;j>0;j-) /構(gòu)造最優(yōu)解 bestxj=(bestE->leftChild?1:0); bestE=
9、bestE->parent; for(int k=1;k<=n;k+) if(bestxk=1) printf("物品%d:重量:%.1f,價(jià)值:%.1fn",k,wk,vk); printf("最大價(jià)值為:%.1fn",bestv);void main() int c; float ewvMaxSize; printf("請輸入背包的最大容量v:"); scanf("%d",&c); printf("請輸入物品總數(shù)n:"); scanf("%d",&n); printf("請輸入物品的重量和單位重量價(jià)值:n")
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZSA 277-2024 高速落絲上筒機(jī)器人
- 二零二五年度跨境電商股份轉(zhuǎn)讓及供應(yīng)鏈整合協(xié)議
- 2025年度智能公寓退房協(xié)議書
- 二零二五年度白酒品牌區(qū)域總代理合作協(xié)議
- 二零二五年度醫(yī)院及學(xué)?;S池專業(yè)清理服務(wù)合同
- 二零二五年度企業(yè)財(cái)務(wù)報(bào)表審計(jì)委托代理服務(wù)合同
- 2025年度車間租賃安全管理制度與執(zhí)行協(xié)議
- 二零二五年度無房產(chǎn)證房屋買賣雙方責(zé)任劃分協(xié)議
- 二零二五年度勞動(dòng)合同法企業(yè)人力資源管理制度合同
- 二零二五年度知識(shí)產(chǎn)權(quán)侵權(quán)糾紛調(diào)解協(xié)議范本匯編
- 跟著名著《小王子》學(xué)高考英語讀后續(xù)寫絕佳的續(xù)寫清單-高中英語作文復(fù)習(xí)專項(xiàng)
- 產(chǎn)教融合大學(xué)科技園建設(shè)項(xiàng)目實(shí)施方案
- 交通法律與交通事故處理培訓(xùn)課程與法律解析
- 廣西版四年級下冊美術(shù)教案
- 《換熱器及換熱原理》課件
- 兒童權(quán)利公約演示文稿課件
- UPVC排水管技術(shù)標(biāo)準(zhǔn)
- MSA-測量系統(tǒng)分析模板
- 血透室公休座談水腫的護(hù)理
- 急診預(yù)檢分診專家共識(shí)課件
- 廣州市海珠區(qū)事業(yè)單位考試歷年真題
評論
0/150
提交評論