主要是對自己領域的多源定位NP問題轉換和證明,以及如何設計有次摸性質的函數,效果更好。
改進思路: 我們首先從一個問題出發,然後藉助證明這個問題是NP難問題,然後使用近似算法去解決,然後近似算法的目標函數是次摸,從而保證其近似比數,從而提出某種改進方案。
參考文獻:《算法導論》34,35章、《近似算法設計與分析》第二章貪婪策略、《離散數學》
目錄:
首先是NP難問題及近似算法的理論基礎,還有不可近似性的理論基礎
《算法導論》34章 NP難問題
1 P,NP,NPC問題
首先給出三種問題的定義
P: 可以在多項式內解決的問題
NP:可以在多項式內驗證的問題
NPC:NPC幾乎不可能在多項式內解決。
2 判定問題和最優化問題
兩者相關性很高,因爲最優化問題可以轉換爲判定問題。爲什麼轉換?因爲NP完全性理論適用於判定問題,而不適用最優化問題。而且判定問題更容易一些。因爲NP完全性很多時候都是邏輯判斷多個變量的0,1(3-CNF)所以適用判定問題。 比如
- 最優化問題:給定一個無向圖G和兩個頂點,要找出兩個頂點之間最短路徑?
- 判定問題:給定一個無向圖G和兩個頂點,是否存在一條包含至多k條邊的路徑?
3 目錄
34.1 對問題做一個形式化定義,34.2 定義判定問題的NP類,它們是NP的,34.3 討論如何通過多項式時間的“規約”和研究問題之間關係。它定義了NP完全性,並概述一個“電路可滿足性”的問題是NP完全問題的證明過程。找到一個NP問題後,34.4 討論如何使用規約方法來規約。
34.1 多項式時間(問題的形式化定義)
抽象問題
我們定義抽象問題Q爲在問題實例集合I和問題解決集合S上的一個二元關係,抽象的判定問題看做從實例集I映射到解集{0,1}的一個函數。
離散數學給予足夠多的抽象。
編碼
這是從抽象數學到計算機編碼的轉換,
學習編碼的作用在於在後面的規約中兩個問題的多項式轉換中,需要編碼的引理34.1。來證明規約是多項式的。選擇某種編碼對問題是否多項式可解沒有任何影響。
形式化語言
幫助我們形式化問題定義
34.2 多項式時間的驗證
34.3 NP完全性和可規約性
幫助我們理解規約是啥樣的,用大白話說就是現在有兩個問題,如果存在某個多項式可計算函數使得其中一個問題的實例轉換到另一個問題,那麼就是可以規約的。另外A規約到B,那麼如果解決了B,就可以解決A。
NP完全性
然而從定義出發證明某個問題是NP完全很麻煩,但是一定是有第一個NP完全問題,然後通過定義證明它,然後其他問題都可以依次規約,形成規約樹。
那麼開始第一個NP完全性問題的證明吧,它是不可規約的,必須實打實的證明。
首先需要證明它是NP類,然後需要證明它是NP完全的。前者就不說了,對於後者我們將描述一個多項式時間的算法F來計算規約函數f,該函數把每個二進制串映射爲一個電路C=f(x),是的x屬於L當且僅當C屬於電路問題。(從定義出發)
書上的看不懂,就貼一個網上的
34.4 NP完全性的證明
這就是一個證明框架了,其的難點在於
1 如何去做尋找一個像NP完全問題的問題?
2 如何去找一個已知的NP完全問題?讓1問題的問題可以通過規約到2中問題。
書上舉個例子
公式可滿足性
接下來證明布爾公式可規約到電路可滿足性。(來解釋該框架是如何運行的):
公式可滿足性很容易看出來是NP完全的,因爲它有n個布爾變量,自然就有2的n次方可能賦值。但是證明過程需要將
3-CNF可滿足性
證明3-CNF是NP完全的,爲什麼3-CNF是NP完全的?我感覺就三個變量八種可能啊?不是的,它還是有很多個變量,但是其每個子句中只有三個變量而已。3-CNF的出現方便了我們很多的問題的實例去直接規約成3-CNF問題的實例,它足夠簡單。
34.5 NP完全問題
這是一個NP規約圖的較爲完整參照,我們可以從低到上面的進行規約。
34.5.1 團問題(就這個我看了很久)
證明的大概結構
1 團問題是NP的
2 然後描述一種算法,將3-CNF的實例轉換爲一個圖中的實例
3 證明該過程是多項式的
其實上述就是我們要想好要轉化的那個問題,然後自己構造實例去轉就ok,後一步要難一些。
34.5.2 頂點覆蓋問題
34.5.3 哈密頓迴路問題
34.5.4 旅行商問題
34.5.5 子集和問題
它們之間的規約證明就沒細看了,有空再看。
35 近似算法
近似算法都可能有近似比,但是根據近似算法步驟的不一樣,其近似比的構造也不一樣,不過一般都是通過近似算法步驟尋找上下界來得到。
近似算法性能比
目錄
前面4節都是介紹一些解決NP完全問題的多項式時間近似算法例子,第5節給出一個完全多項式時間近似方案。
35.1 頂點覆蓋問題
近似比的分析技術有哪些?
35.2 旅行商問題
35.3 集合覆蓋問題
它有一個貪心算法,這個證明過程略懂。從代價的角度去分析的,我可能在多源定位的理解中用到。
35.4 隨機化和線性規劃(聽都沒聽過)
不過我很好奇這種隨機化策略的期望代價是如何計算出來的。有如下定理
利用線性規劃區近似帶權頂點覆蓋(這個沒看)
35.5 子集和問題
該子集和問題似乎可以有指數時間的近似算法然後經過修改之後變成一個完全多項式的算法。(這也是NP完全問題的論文其中的套路了,先有一個複雜度高的算法,後有一個複雜度較低的算法(fast算法))
一個指數時間的準確算法
一個完全多項式解決方案(沒什麼會的)
1 不可近似性
第二章 貪婪策略
利用貪婪策略設計近似算法的兩個一般方法,分別基於獨立系統和次模函數這兩個概念。
2.1 獨立系統
考慮一個獨立系統,我們建立起概念,然後對該獨立系統求解最大獨立子集問題,
下面給出一個求最大獨立子集問題得貪婪算法。
該貪婪算法在獨立系統中肯定有一個近似比,
雖然非常抽象,但是普適性很高,我們就要這種最模糊抽象的獨立系統定義,以及最簡單的貪婪算法及其近似比,我們做的是應用數學。然後就可以發現其應用了。
舉個例子:(用獨立系統及其求解最大獨立子集的貪婪算法和近似比三個東西,我們將最長哈密頓圈和最長有向哈密頓路兩個問題都應用過來)
獨立系統及其應用介紹完畢。
2.2 擬陣
它的作用真不知道幹啥的?感覺它是獨立系統加約束條件下產物。但是它有性質,如果是擬陣,貪婪算法就總能求出最大獨立子集問題的一個最優集,而且在給定獨立系統的近似比再來一個上界。
2.3 權函數的四邊形條件
也不知道啥用,就是獨立系統不是一個擬陣的時候,如果目標函數有權函數的四邊形條件,那麼貪婪算法也可以找到最優解。
上述3小節都是貪婪策略中比較經典包括抽象獨立系統、擬陣、和四邊形條件。下面關注與目標函數的構建,以便對於任意可以用次模函數替換目標函數,進而得到有性能保證的貪心算法。
2.4 次模勢函數(重點,改進方向)
首先有個一般性的基於次模函數算法及其近似比的結論,爲
只要我們能夠基於我們的問題構建出上述框架,就可以得到一個有近似比保證的貪心算法。
2.5 上述次模理論的應用
2.6 非次模勢函數
但是如果不是次模函數,就不一定有2.29的性質了,那怎麼辦呢?