前面已經提到了顯示中大多數難解問題問題最後都被證明是np-完全問題。這意味著,除非np=p,它們是不可能有多項式時間演算法的(而且,在這篇文章提到即使np=p,人們也可能找不到乙個np完全問題的「有效」演算法)。
所以人們發展了各種工具來避開它們,最常用的兩種方法是使用概率演算法和近似演算法,這兩種方法也符合實際需要:在解決實際問題中,我們不需要結果絕對正確,也不需要結果絕對精確。
所謂概率演算法,就是在演算法的過程中引入隨機數,使得演算法在執行的過程中隨機選擇下乙個計算步驟。它最後可能導致結果也是不確定的。乙個結果不確定的概率演算法叫做monte carlo演算法,而總是得到準確解的概率演算法叫做sherwood演算法(乙個例子是引進隨機因子的快速排序演算法)。
為何引入隨機數能夠提公升計算效能(事實上,理論計算機學家還沒能證實隨機因子本質上更有效率——指具有指數級別的效率提公升),主要有下面兩個原因:
首先,通常乙個演算法,它對於很多種情況是比較快的,但對於某些「特別差」的輸入,它要找到乙個解則特別困難。引入隨機數之後,使得演算法的時間複雜度平均化了,然後算得更快(評價乙個隨機演算法的複雜性通常是考慮其平均複雜性)。
其次,對於monte carlo演算法,它的輸出是不精確的,這種犧牲使得演算法能夠在較短時間內完成。
需要指出的是,下面這個定理,使得乙個不那麼精確的monte carlo演算法亦有實際的效用的:
如果乙個判定問題的某個monte carlo演算法有2/3的正確機率(這個2/3可以替換成任何乙個大於1/2的數,當然小於等於1/2的隨機演算法一點意義都沒有,因為還不如拋硬幣),重複這個演算法k次,取出現次數更多的結果作為問題的答案,則這個答案的正確率大於1-1/2(8/9)^k。上面的結果由於k出現在指數上,所以只需要將乙個monte carle演算法重複很少的次數,便能得到很高的準確率。
近似演算法從字面的意思來看似乎和上面的monte carle演算法差不多,其實它們的考慮物件是不一樣的,而且通常所指的近似演算法是確定型演算法。近似演算法多用在組合優化的問題,而不是判定性問題上。組合優化問題,指的是那些需要求最優解的問題,比如下面這個
旅行商問題對於這種問題,如果最短路徑是1000,而且我們能很快找到乙個1000.1的路徑,在實際運用中,我們還需要浪費巨大的計算資源去找那個1000的路徑嗎?近似演算法便基於此思想而來。有n個城市,乙個推銷員要從其中某乙個城市出發,不重複地走遍所有的城市,再回到他出發的城市。問這個推銷員的最短路程。
近似演算法指在解決優化問題中,最後得到的結果能保證在一定的誤差之內的演算法。
從近似演算法的角度來說,同為np完全問題,它們也有不同的可近似度。在多項式時間內,有些問題可以無窮小誤差的逼近,但有些問題卻連常數倍數之內的結果都沒法得到。
近似演算法 貪心演算法與近似演算法
1.1 教室排程問題 假設有如下課程表,你希望將盡可能多的課程安排在某間教室上。你沒法讓這些課都在這間教室上,因為有些課的上課時間有衝突。你希望在這間教室上盡可能多的課。如何選出盡可能多且時間不衝突的課程呢?這個問題好像很難,不是嗎?實際上,演算法可能簡單得讓你大吃一驚。具體做法如下。1 選出結束最...
近似演算法作業
近似演算法作業 題目 證明g中的最大團size為 等價於 g m中最大團size為m 證明 充分性 若g中最大團size為 根據g m的構造過程,g m中至少有存在乙個size為m 的團。首先g m中的最大團不可能小於m 如果小於小於m 則說明,構成g m最大團,每個g貢獻了少於 的結點,這種情況是...
理論計算機初步 概率演算法和近似演算法
已經提到了顯示中大多數難解問題問題最後都被證明是np 完全問題。這意味著,除非np p,它們是不可能有多項式時間演算法的 而且,在 這篇文章提到即使np p,人們也可能找不到乙個np完全問題的 有效 演算法 所以人們發展了各種工具來避開它們,最常用的兩種方法是使用概率演算法和近似演算法,這兩種方法也...