- 1、本文档共46页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
演算法_处理NP完备理论
演算法 _ 第八章 處理NP-完備問題 8 解NP-完備問題 是否一定要找出正確解(判斷問題)或最佳解(最佳化問題) 回溯法(判斷問題) 分支設限法(最佳化問題) 或者我們可以接受只找出近似解 近似演算法 回溯法與分支設限法 回溯法與分支設限法是兩種用來有系統地檢視候選解的方法 這種有系統地檢視候選解的方法,不管是在最壞的情況還是在平均的情況下,都能省下大量的執行時間 這些方法通常使得我們得以排除大量的候選解;雖然如此,它們卻還是可以保證當演算法執行結束時,我們能找到所要的正確解或最佳解 回溯法 回溯法的作法是利用觀察候選解的一小部分,如果從候選解的這一小部分已經足以判定它不可能形成我們最後要的解,就馬上放棄這個候選解 舉個例子,如果 SAT 問題的給定布林公式中有一個子句是 (x1 ? x2),則所有可能的真假值指派中只要是 x1 = x2 = false 的都可以直接予以淘汰而不至於影響到最終解的正確性 回溯法 回溯法 回溯法通常會選擇深度優先,即 w = 0, x = 0 的頂點繼續分支 因為它已經指派了兩個變數的真假值,可能很快就可以找到解 深度優先通常比廣度優先還省記憶體 過程中產生的可分支頂點數比較少 回溯法 利用這個方式,回溯法檢視真假值指派的搜尋空間 一旦確定一個頂點所代表的部分真假值指派已經不可能導致正確解,就不再為該頂點做後續的再分支運算 會繼續做分支運算的頂點(灰色頂點)代表還有可能導致正確的真假值指派 回溯法 如果我們將 w = 0, x = 0 帶入 F,則任何包含字元或的子句立刻為 1,而字元 w 與 x 則因為是 0,因而可以予以刪除 這麼處理之後,在 w = x = 0 的頂點只剩下 回溯法 類似地,在 w = 0, x = 1 的頂點將只剩下 由於任何子句與空子句 F = (0) = ? 做 and 的結果都是 false,因此以 w = 0, x = 1 為樹根的所有真假值指派至此就已經注定不可能使得整個布林公式為真,也因此不用再分支下去 回溯法 回溯法顯示 F 不可能為真 回溯法 回溯法顯示 x?false, y?false, z?true 會使得 F 為真 回溯法 從以上的討論可以知道,回溯法必須有一個檢視機制,它觀察子問題並且很快地判斷出這個子問題是以下三種可能的哪一種: 失敗:這個子問題無解。 成功:找到這個子問題的一個解。 不確定。 回溯法 分支設限法 分支設限法多了一個界限函數 利用界限函數,我們可以正確地判斷出一個子問題如果繼續做下去的話,它所導致的最低花費(或者最高獲利)會是多少 如果一個子問題(活點)的界限函數指出這個子問題繼續做下去所導致的最低花費(最高獲利)將高於(低於)我們目前已經找出的一組解,那麼這個子問題就不用再考慮下去,可以直接予以丟棄(列為死點) 分支設限法 TSP 問題 a b b a TSP 問題 每一步我們都將部分路徑 [a, S, b] 延伸一個邊 (b, x),其中x ? V?S 共有?V?S?種可能選擇,每一種選擇將導致形式為 [a, S ? {x}, x] 的子問題 TSP 問題 lower_bound(Pi) lower_bound([a, S, b])? 從 a 連結到 V?S 裡某一個頂點的最小邊之花費,加上 從 b 連結到 V?S 裡某一個頂點的最小邊之花費,加上 V?S 的最小花費生成樹的花費。 TSP 問題 TSP 問題 TSP 問題 TSP 問題 0/1 打包問題 請注意,pi/wi ? pi+1/wi+1, i = 1, 2, .., 5 0/1 打包問題 利用貪婪演算法求得 x1 = x2 = 1, x3 = 5/8, x4 = x5 = x6 = 0,它的總價值是6 + 10 + 4?5/8 = 18.5 這樣子所求得的總價值 18.5 會是我們同一組資料的 0/1 打包問題解之上限 換句話說,我們針對這組資料的 0/1 打包問題所求出的最佳解 Z 必然小於等於 18.5 0/1 打包問題 用演算法 Knapsack2 求出 0/1 打包問題的解之下限 x1 = x2 = 1, x3 = x4 = x5 = x6 = 0,總價值是6 + 10 = 16 換句話說,我們最後求出的 0/1 打包問題之最佳解Z必然大於等於16 0/1 打包問題 綜合上述的結果,16 ? Z ? 18.5 由於 0/1 打包問題的xi值只能是 0 或 1,而且所有 pi 的值都是整數,因此16 ? Z ? 18 實際上,這組資料的最佳解是17 0/1 打包問題 近似演算法 OPT(I):最佳解的值 似演算法 A,針對輸入
文档评论(0)