題 35.1-1 / 35.1-2))
文檔教程示例工程【免費下載鏈接】CLRS:notebook:Solutions to Introduction to Algorithms項目地址https://gitcode.com/gh_mirrors/cl/CLRS點擊查看免費下載導(dǎo)讀本文聚焦《算法導(dǎo)論》CLRS第 35 章近似算法的核心案例——頂點覆蓋Vertex Cover問題及其經(jīng)典 2 倍近似算法 APPROX-VERTEX-COVER并結(jié)合本倉庫 C35-Approximation-Algorithms/35.1.md 中習(xí)題 35.1-1 與 35.1-2 的題解展開深度剖析。讀完本文你將掌握頂點覆蓋問題的形式化定義與 NP 難背景、APPROX-VERTEX-COVER 算法的完整偽代碼與貪心機(jī)制、近似比為 2 的嚴(yán)格證明以及如何用兩節(jié)點單邊圖構(gòu)造算法必然產(chǎn)生次優(yōu)解的反例并理解算法所選邊集構(gòu)成極大匹配maximal matching這一關(guān)鍵性質(zhì)的證明脈絡(luò)。一、問題背景頂點覆蓋為什么需要近似而不是精確1.1 頂點覆蓋的定義給定無向圖 G (V, E)一個**頂點覆蓋vertex cover**是頂點集合 C ? V使得圖 G 中的每一條邊至少有一個端點落在 C 中。最小頂點覆蓋問題Minimum Vertex Cover要求找出包含頂點數(shù)最少的頂點覆蓋 C*。該問題在理論計算機(jī)科學(xué)中地位特殊它是 Karp 21 個 NP 完全問題之一其決策形式給定 k是否存在大小不超過 k 的頂點覆蓋是 NP 完全的。這意味著除非 P NP否則不存在多項式時間算法能夠精確求出最小頂點覆蓋。因此研究界轉(zhuǎn)而尋求多項式時間近似算法——用稍微大一點的覆蓋換來足夠快的運(yùn)行時間這正是第 35 章近似算法這一主題的出發(fā)點。1.2 近似比與 2 倍近似的意義對最小化問題而言若算法 A 對任意實例都能在多項式時間內(nèi)給出可行解 C且滿足|C| ≤ 2 · |C*|其中 C* 為最優(yōu)解則稱 A 為2 倍近似算法近似比為 2。頂點覆蓋恰好是少數(shù)幾個擁有常數(shù)倍近似比的經(jīng)典 NP 難問題之一APPROX-VERTEX-COVER 正是教科書式的代表。二、APPROX-VERTEX-COVER 算法剖析行 4 的貪心本質(zhì)CLRS 第 35.1 節(jié)給出的 APPROX-VERTEX-COVER 算法基于一個極其樸素的貪心策略其偽代碼結(jié)構(gòu)如下APPROX-VERTEX-COVER(G) 1 C ? 2 E G.E 3 while E ≠ ? 4 let (u, v) be an arbitrary edge of E // 任選一條邊 5 C C ∪ {u, v} // 把兩個端點都放入覆蓋 6 remove from E every edge incident on either u or v 7 return C習(xí)題 35.1-2 中提到的line 4正是上述第 4 行——任選一條剩余邊 (u, v) 并把其兩個端點都加入頂點覆蓋 C。算法的貪心邏輯可以概括為三步循環(huán)任選邊在當(dāng)前剩余邊集 E 中任取一條邊 (u, v)雙端點入覆蓋將 u、v 同時加入 C注意是加入兩個端點這正是與精確算法最大的不同——不做任何二選一的判斷收縮子問題刪除 E 中所有與 u 或 v 相關(guān)聯(lián)的邊剩余圖成為一個規(guī)模更小的子問題循環(huán)直至 E 為空。值得強(qiáng)調(diào)的是第 4 行中的任選arbitrary意味著該算法不依賴邊的選擇順序——無論按何種順序挑邊最終得到的覆蓋大小都滿足相同的 2 倍近似比保證。這個性質(zhì)在 35.1-1 的反例構(gòu)造中會被再次用到正因為選擇是任意的反例必須對任意選擇都成立才能稱得上always yields a suboptimal solution。2.1 為什么近似比是 2極大匹配視角APPROX-VERTEX-COVER 的近似比證明并不直接來自覆蓋本身而是借助匹配這一橋接概念其關(guān)鍵引理正是 35.1-2 的結(jié)論算法在行 4 選出的所有邊構(gòu)成集合 A。因為每選一條邊后與它共享端點的所有邊都被刪除所以 A 中任意兩條邊不共享端點——A 是一個匹配循環(huán)終止時 E ?意味著圖中已不存在任何一條與 A 中所有邊都不共享端點的邊——A 是極大匹配maximal matching35.1-2 的結(jié)論由于任意頂點覆蓋必須覆蓋匹配 A 中每一條邊而一條邊至少需要一個端點被選中故最優(yōu)覆蓋滿足 |C*| ≥ |A|算法輸出的覆蓋 C 包含 A 中每條邊的兩個端點因此 |C| 2|A| ≤ 2|C*|。由此得到 |C| ≤ 2|C*|即近似比為 2。這一推導(dǎo)鏈條完整展示了近似算法的分析往往要借助問題之外的組合結(jié)構(gòu)這里是匹配這一思想。三、習(xí)題 35.1-1 詳解兩節(jié)點單邊圖——必然次優(yōu)的反例原題給出一張圖使得 APPROX-VERTEX-COVER 在其上總是always產(chǎn)生次優(yōu)解。倉庫題解35.1.md給出的反例取一張只含兩個節(jié)點 u、v 和一條邊 (u, v) 的圖。分析如下最優(yōu)解最小頂點覆蓋只需覆蓋唯一邊 (u, v)因此選擇 {u} 或 {v} 即可|C*| 1算法輸出算法在行 4 只能選中這條唯一的邊隨即把 u 和 v同時加入覆蓋|C| 2結(jié)論|C| 2 |C*| 1且由于該圖只有一條邊、不存在其他選擇分支無論算法任選哪條邊事實上只有一條可選輸出都必然包含兩個端點——因此算法在此圖上總是產(chǎn)生次優(yōu)解。這個例子還有兩個值得延伸的觀察總是一詞的精確含義反例必須對所有可能的任選邊順序都成立單邊圖恰好使得選擇空間退化保證了always近似比上界是緊的tight該例中算法輸出恰好是最優(yōu)解的 2 倍說明 2 倍近似比這一上界無法被進(jìn)一步改進(jìn)到更小的常數(shù)對 APPROX-VERTEX-COVER 這一具體算法而言——這也是用 2 倍解換多項式時間這一取舍的直觀注腳。四、習(xí)題 35.1-2 詳解行 4 所選邊集 A 是極大匹配原題設(shè) A 為 APPROX-VERTEX-COVER 行 4 選出的邊集證明 A 是圖 G 的一個極大匹配。倉庫題解35.1.md的論證思路在行 4 中隨機(jī)選擇一條邊 (u, v) 后算法刪除所有與 u 或 v 關(guān)聯(lián)的邊剩余圖成為子問題繼續(xù)迭代。這一過程保證了 A 的兩個性質(zhì)A 是匹配每當(dāng) (u, v) 被選入 A所有與 u、v 中任一節(jié)點相鄰的邊都被立即刪除因此后續(xù)選出的任何邊都不可能再包含 u 或 v即 A 中任意兩條邊沒有公共端點滿足匹配定義A 是極大匹配當(dāng)算法終止時 E ?圖中已不存在任何未被 A 中邊覆蓋端點的邊。換言之任何一條不在 A 中的邊都必然與 A 中某條邊共享端點無法再加入 A 而不破壞匹配性質(zhì)——這正是極大匹配的定義無法通過添加更多邊來擴(kuò)充的匹配。把這兩點合起來即可嚴(yán)謹(jǐn)?shù)貙懗鐾暾C明證明對任意兩條不同的邊 e1, e2 ∈ A不妨設(shè) e1 (u, v) 在 e2 之前被選出。算法選完 e1 后即刪除所有與 u 或 v 關(guān)聯(lián)的邊故 e2 不可能包含 u 或 vA 中任意兩條邊不相交A 是匹配。又因算法循環(huán)至 E ? 才停止圖中不存在與 A 中所有邊均不相交的剩余邊故 A 是極大匹配。?4.1 區(qū)分兩個易混概念極大匹配 vs 最大匹配這一題的價值還在于幫讀者厘清一對高頻混淆概念概念定義關(guān)系極大匹配maximal matching無法再通過增加邊來擴(kuò)充的匹配不唯一規(guī)??捎写笮〔町愖畲笃ヅ鋗aximum matching所有匹配中邊數(shù)最多的匹配一定是極大匹配反之不然APPROX-VERTEX-COVER 得到的只是極大匹配而非最大匹配——這正是它只能保證 2 倍近似、無法保證精確的原因之一。任何極大匹配 M 都滿足 |C*| ≥ |M|最優(yōu)覆蓋至少要覆蓋 M 中每條邊的一個端點這一不等式貫穿了整個近似比證明是理解算法分析的關(guān)鍵紐帶。五、與本倉庫的關(guān)聯(lián)C35 章節(jié)在倉庫中的定位本倉庫README.md 自述為Solutions to Introduction to Algorithms以章節(jié)為單位組織《算法導(dǎo)論》全部習(xí)題題解其中第 35 章近似算法位于目錄表Part VII: Selected Topics下的 XXXV 行目前包含兩個文檔C35-Approximation-Algorithms/35.1.md第 35.1 節(jié)頂點覆蓋問題習(xí)題 35.1-1、35.1-2 的題解即本文剖析的主體C35-Approximation-Algorithms/35.2-5.md第 35.2 節(jié)旅行商問題習(xí)題 35.2-5 的題解利用歐氏距離滿足三角不等式證明最優(yōu)環(huán)游不自交可作為第 35 章近似算法家族中三角不等式技巧的延伸閱讀。需要說明的是35.1 節(jié)題解倉庫并未附帶頂點覆蓋算法的可運(yùn)行源碼實現(xiàn)該章節(jié)目錄下僅有上述兩個 Markdown 題解文檔因此本文的算法分析以題解文字與 CLRS 教材偽代碼為準(zhǔn)。依據(jù)倉庫 README 末尾的聲明這些題解屬于社區(qū)眾包成果crowdsourced work閱讀時可結(jié)合教材原文交叉驗證。六、要點總結(jié)圍繞 APPROX-VERTEX-COVER本文覆蓋的核心知識鏈條可歸納為問題層面最小頂點覆蓋是 NP 完全問題精確求解不可行需要近似算法算法層面行 4 的任選一條邊、兩個端點全收的貪心策略構(gòu)造出大小恰為所選邊數(shù)兩倍的覆蓋證明層面行 4 所選邊集 A 是極大匹配35.1-2配合 |C*| ≥ |A| 推出 |C| 2|A| ≤ 2|C*|近似比為 2緊性層面兩節(jié)點單邊圖35.1-1使算法必然輸出 2 而最優(yōu)解為 1說明 2 倍上界對該算法是緊的。這四條主線構(gòu)成了理解為什么近似算法也能給出可證明的次優(yōu)保證的最小完整閉環(huán)也是繼續(xù)閱讀第 35.2 節(jié)旅行商問題近似算法如利用三角不等式的 2 倍近似與 Christofides 3/2 近似之前必備的知識鋪墊。贊分享文檔教程示例工程【免費下載鏈接】CLRS:notebook:Solutions to Introduction to Algorithms項目地址https://gitcode.com/gh_mirrors/cl/CLRS點擊查看免費下載相關(guān)推薦Chaterm與Kubernetes集成云原生時代的智能運(yùn)維實踐Chaterm與Kubernetes集成云原生時代的智能運(yùn)維實踐 在云原生技術(shù)飛速發(fā)展的今天Kubernetes已成為容器編排的事實標(biāo)準(zhǔn)但復(fù)雜的命令行操作人工智能AI Agent桌面應(yīng)用運(yùn)維一條 commit 走完五步才算到用戶手里Baserow 的 CI/CD 流水線一條 commit 走完五步才算到用戶手里Baserow 的 CI/CD 流水線 Baserow 是一個開源無代碼數(shù)據(jù)庫Airtable 的替代方案。建表、后端前端數(shù)據(jù)庫低代碼工作流自動化算法在計算中的地位CLRS 第 1 章習(xí)題精解與倉庫實現(xiàn)印證算法在計算中的地位CLRS 第 1 章習(xí)題精解與倉庫實現(xiàn)印證 本篇技術(shù)指南以《算法導(dǎo)論》Introduction to Algorithms, CLRS第文檔教程示例工程上一篇Tinycast 上手指南從首次啟動到第一枚全局快捷鍵的完整配置下一篇x64dbg 插件開發(fā)使用 _plugin_menuadd 構(gòu)建插件菜單樹API 詳解與源碼級解析創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考