計算機(jī)算法設(shè)計與分析(第6版)-課件 ch0506 0-1背包問題_第1頁
計算機(jī)算法設(shè)計與分析(第6版)-課件 ch0506 0-1背包問題_第2頁
計算機(jī)算法設(shè)計與分析(第6版)-課件 ch0506 0-1背包問題_第3頁
計算機(jī)算法設(shè)計與分析(第6版)-課件 ch0506 0-1背包問題_第4頁
計算機(jī)算法設(shè)計與分析(第6版)-課件 ch0506 0-1背包問題_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

0-1背包問題01問題本質(zhì)與建模0-1背包問題的定義與NP特性問題定義0-1背包問題要求在給定容量的背包中,從n件物品中選擇若干件放入,每件物品要么完整放入,要么完全不放入,目標(biāo)是使背包中物品的總價值最大。問題特性該問題是典型的子集選取型優(yōu)化問題,已被證明為NP完全問題。隨著物品數(shù)量n的增加,問題規(guī)模呈指數(shù)級增長,不存在已知的多項式時間解法。形式化描述用數(shù)組w表示物品的重量,數(shù)組p表示物品的價值,c表示背包的容量。算法需要在滿足總重量不超過c的前提下,最大化總價值。010203解空間子集樹與搜索策略解空間結(jié)構(gòu)0-1背包問題的解空間可以表示為一棵深度為n+1的二叉子集樹,樹的每個節(jié)點表示一個物品的取舍狀態(tài),左分支代表選擇該物品,右分支代表不選擇該物品。搜索策略采用回溯法進(jìn)行深度優(yōu)先搜索,動態(tài)評估每個分支的可行性。僅保留有希望的分支,通過剪枝減少不必要的搜索,從而將指數(shù)級的解空間壓縮到可接受的范圍。02剪枝原理與上界可行性剪枝與價值上界概念如果當(dāng)前背包重量加上某物品的重量超過背包容量,則剪掉該物品對應(yīng)的左分支,避免無效搜索??尚行约糁浪阌易訕淇赡苓_(dá)到的最大價值,如果該上界不優(yōu)于已得最優(yōu)解,則剪掉右分支,避免無意義的搜索。最優(yōu)性剪枝引入變量cp表示當(dāng)前已獲得的價值,bestp表示全局最優(yōu)價值,r表示剩余物品的總價值,用于判斷是否進(jìn)行剪枝。變量定義當(dāng)cp+r≤bestp時,剪掉右子樹,因為即使加上剩余所有物品的價值,也無法超過當(dāng)前最優(yōu)解。剪枝條件單位重量價值排序與貪心上界預(yù)先把物品按單位重量價值降序排列,這樣在計算上界時可以優(yōu)先考慮價值密度高的物品,提高上界的準(zhǔn)確性。排序策略在剩余容量中依次整塊裝入物品,若遇裝不下則分割最后一件恰好填滿,由此得到的分?jǐn)?shù)解價值即為該子樹的上界。貪心上界計算上界特性該上界必不小于任何整數(shù)可行解,且計算復(fù)雜度僅O(n),因此可在每個右分支決策點即時調(diào)用,為算法提供高效剪枝依據(jù)。03算法框架與實現(xiàn)Knap類結(jié)構(gòu)與成員C++模板類Knap以Typew、Typep分別抽象重量與價值類型,保證對整數(shù)與浮點場景復(fù)用,提高代碼的通用性。01數(shù)據(jù)成員c、n、w、p存儲常量輸入,cw、cp記錄搜索過程中的瞬時狀態(tài),bestp保存已發(fā)現(xiàn)的最優(yōu)價值,Bound函數(shù)負(fù)責(zé)計算上界,Backtrack函數(shù)遞歸驅(qū)動深度優(yōu)先遍歷。

02成員功能類設(shè)計遞歸回溯流程與左右子樹決策010203葉節(jié)點處理左子樹決策右子樹決策當(dāng)遞歸到i>n時,表示到達(dá)葉節(jié)點,此時用當(dāng)前cp刷新bestp,保存當(dāng)前搜索路徑下的最優(yōu)解。嘗試進(jìn)入左子樹,如果當(dāng)前背包重量加上第i件物品的重量不超過容量,則更新cw、cp并遞歸下一層,返回時恢復(fù)狀態(tài)。計算右子樹的上界,僅當(dāng)上界大于bestp時才進(jìn)入右分支遞歸,否則剪掉右子樹,避免無效搜索。Bound函數(shù)實現(xiàn)與分?jǐn)?shù)裝填邏輯01函數(shù)實現(xiàn)Bound函數(shù)以cleft記錄剩余容量,b從當(dāng)前價值cp出發(fā),按預(yù)排序順序盡量整塊累加物品,計算上界。02分?jǐn)?shù)裝填若遇到裝不下當(dāng)前物品,則把該物品按剩余容量比例拆分并加入部分價值,立即返回b作為上界,保證計算的高效性。04完整流程與示例02010403

先計算總重量W與總價值P,如果總重量W小于等于背包容量c,則直接返回總價值P,因為所有物品都能裝入??傊亓颗c價值計算構(gòu)造Object數(shù)組保存物品ID與單位重量價值,并調(diào)用排序得到遞減序列,為后續(xù)計算上界做準(zhǔn)備。構(gòu)造Object數(shù)組把排好序的p、w復(fù)制到Knap對象,初始化cw、cp、bestp為零,為回溯搜索做好準(zhǔn)備。數(shù)據(jù)復(fù)制最后調(diào)用Backtrack(1)啟動搜索,開始深度優(yōu)先遍歷解空間樹,尋找最優(yōu)解。啟動搜索預(yù)排序與初始化驅(qū)動

舉例演示n=4背包問題實例數(shù)據(jù)給定背包容量c=7,物品重量w=[3,5,2,1],價值p=[9,10,7,4],單位重量價值排序后順序為物品4、3、1、2。搜索過程算法先選物品4、3、1,剩余容量1,只能裝0.2的物品2,得上界22。隨后回溯探索其他分支,任何右子樹若上界≤當(dāng)前bestp即被剪掉。05復(fù)雜度與優(yōu)化時間復(fù)雜度與剪枝效率01最壞情況下,算法的時間復(fù)雜度為O(n·2^n),盡管剪枝可顯著減少實際訪問節(jié)點,但在某些輸入下仍可能遍歷所有右分支。時間復(fù)雜度02通過計算上界進(jìn)行剪枝,避免了大量不必要的搜索,顯著提高了算法的效率。剪枝效率03空間復(fù)雜度為O(n),用于存儲數(shù)組與遞歸棧,保證了算法在中小規(guī)模實例上的可行性??臻g復(fù)雜度加速與擴(kuò)展利用位運(yùn)算或編譯期模板特化減少Bound函數(shù)分支,采用記憶化或迭代加深避免重復(fù)子問題,對大規(guī)模數(shù)據(jù)可先用貪心或動態(tài)規(guī)劃求初始bestp,提高剪枝門檻。實踐加速06小結(jié)回溯思想與擴(kuò)展通過子集樹建模、可行性剪枝與基于貪心分?jǐn)?shù)的上界估算,三者協(xié)同把指數(shù)級搜索轉(zhuǎn)化為可控遍歷,模板化設(shè)計保證算法的通用性

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論