解決np完全問題只能依靠近似演算法,所以下面介紹幾種常用演算法的設計思想,包括動態規劃、貪心演算法、回溯法等。
動態規劃法是將求解的問題一層一層地分解成一級一級、規模逐步縮小的子問題,直到可以直接求出其解的子問題為止。分解成的所有子問題按層次關係構成一顆子問題樹。樹根是原問題。原問題的解依賴於子問題樹中所有子問題的解。動態規劃演算法通常用於求乙個問題在某種意義下的最優解。設計乙個動態規劃演算法,通常可按以下幾個步驟進行:
1. 分析最優解的性質,並刻劃其結構特徵。
2. 遞迴的定義最優解。
3. 以自底向上的方式計算出最優解。
4. 根據計算最優解時得到的資訊,構造乙個最優解。
步驟1~3是動態規劃演算法的基本步驟。在只需要求出最優解的情形,步驟4可以省去。若需要求出問題的乙個最優解,則必須執行步驟4。此時,在步驟3中計算最優解時,通常需記錄更多的資訊,以便在步驟4中,根據所記錄的資訊,快速地構造出乙個最優解。
(二)貪心演算法
當乙個問題具有最優子結構性質時,我們會想到用動態規劃法去解它,但有時會有更簡單、更有效的演算法,即貪心演算法。顧名思義,貪心演算法總是做出在當前看來最好的選擇。也就是說貪心演算法並不是整體最優上加以考慮,他所作出的選擇只是在某種意義上的區域性最優的選擇。雖然貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣的許多問題它能產生整體最優解,如圖的演算法中單源最短路徑問題,最小支撐樹問題等。在一些情況下,即使貪心演算法不能得到整體最優解,但其最終結果卻是最優解的很好的近似解。
在貪心演算法中較為有名的演算法是dijkstra演算法。它作為路由演算法用來尋求兩個節點間的最短路徑。dijkstra演算法的思想是:假若g有n個頂點,於是我們總共需要求出n-1條最短路徑,求解的方法是:初試,寫出v0(始頂點)到各頂點(終頂點)的路徑長度,或有路徑,則令路徑的長度為邊上的權值;或無路經,則令為∞。再按長度的遞增順序生成每條最短路徑。事實上生成最短路徑的過程就是不斷地在始頂點v何終頂點w間加入中間點的過程,因為在每生成了一條最短路徑後,就有乙個該路徑的終頂點u,那麼那些還未生成最短路徑的路徑就會由於經過u而比原來的路徑短,於是就讓它經過u。
(三)回溯法
**********===關於np完全問題的定義
np完全性問題
雖然是計算機系的學生,但自己對於什麼是np問題,什麼是npc問題也並不能很好的解答,就更不用說構造怎樣的一種方式來證明乙個問題是不是np問題了。但演算法中涉及了很多這樣的問題,壓力之下,盡我所能弄懂了,把自己的理解記錄下來。
p(polynomial問題)。在計算機裡面,對乙個問題尋求一種多項式的演算法是乙個很好的解答。從理論上來說,如果乙個問題能夠有多翔
實的解法的話,就算是乙個很好的演算法了。這種問題總可以找到乙個dtm(deterministic turing machine) np(nondeterministic polynomial問題)。但是對於很多問題來說,他們找不到乙個多項式的解決方法,他們只能對應乙個ndtm (nondeterministic turing machine)來解決。可以這樣想想:對於下一步的動作,他們也不知道確切的應該怎麼辦,只能「嘗試」很多種方案才能夠得出乙個答案,這顯然是很費時的,這種問題未np問題。
npc(np complete)問題,可以這麼認為,這種問題只有把解域裡面的所有可能都窮舉了之後才能得出答案,這樣的問題是np裡面最難的問題,這種問題就是npc問題。
一般說來,如果要證明乙個問題是npc問題的話,可以拿已經是npc問題的乙個問題經過多項式時間的變化變成所需要證明的問題,那麼索要證明的問題就是乙個npc問題了。
npc問題是乙個問題族,如果裡面任意乙個問題有了多項式的解,那麼所有的問題都可以有多項式的解。
精確4SAT問題np完全性證明
1.題目描述 在精確的4sat問題中,輸入為一組子句,每個子句都是恰好4個文字的析取,且每個變數最多在每個子句中出現一次.目標是求它的滿足賦值 如果該賦值存在.證明精確的4sat問題是no 完全問題.2證明過程 通過將 3sat 歸約到 exact 4sat 來證 明後者的 np 完全性。對於任意乙...
演算法導論之NP完全性和近似演算法
在理解np完全性之前,筆者想引入關於科學與偽科學的定義。凡可接受實踐檢驗 可被證實和被否正的為科學,相反之為非科學,而偽科學是非科學之子集,與科學相對立,認定非科學為科學的即是偽科學。三者關係可簡化為 科學相反於非科學 對立於非科學子集偽科學。集合的運算關係見下面,科學定義為s 非科學定義為ns 偽...
NP完全問題
np完全問題是不確定性圖靈機在p時間內能解決的問題,是 世界七大數學難題 之一。np完全問題排在百萬美元大獎的首位,足見他的顯赫地位和無窮魅力。數學上著名的np問題,完整的叫法是np完全問題,也即 np complete 問題,簡單的寫法,是 np p?的問題。問題就在這個問號上,到底是np等於p,...