理论计算机初步:概率算法和近似算法
所以人們發(fā)展了各種工具來(lái)避開(kāi)它們,最常用的兩種方法是使用概率算法和近似算法,這兩種方法也符合實(shí)際需要:在解決實(shí)際問(wèn)題中,我們不需要結(jié)果絕對(duì)正確,也不需要結(jié)果絕對(duì)精確。
所謂概率算法,就是在算法的過(guò)程中引入隨機(jī)數(shù),使得算法在執(zhí)行的過(guò)程中隨機(jī)選擇下一個(gè)計(jì)算步驟。它最后可能導(dǎo)致結(jié)果也是不確定的。一個(gè)結(jié)果不確定的概率算法叫做Monte Carlo算法,而總是得到準(zhǔn)確解的概率算法叫做Sherwood算法(一個(gè)例子是引進(jìn)隨機(jī)因子的快速排序算法)。
為何引入隨機(jī)數(shù)能夠提升計(jì)算性能(事實(shí)上,理論計(jì)算機(jī)學(xué)家還沒(méi)能證實(shí)隨機(jī)因子本質(zhì)上更有效率——指具有指數(shù)級(jí)別的效率提升),主要有下面兩個(gè)原因:
首先,通常一個(gè)算法,它對(duì)于很多種情況是比較快的,但對(duì)于某些「特別差」的輸入,它要找到一個(gè)解則特別困難。引入隨機(jī)數(shù)之后,使得算法的時(shí)間復(fù)雜度平均化了,然后算得更快(評(píng)價(jià)一個(gè)隨機(jī)算法的復(fù)雜性通常是考慮其平均復(fù)雜性)。
其次,對(duì)于Monte Carlo算法,它的輸出是不精確的,這種犧牲使得算法能夠在較短時(shí)間內(nèi)完成。
需要指出的是,下面這個(gè)定理,使得一個(gè)不那么精確的Monte Carlo算法亦有實(shí)際的效用的:
如果一個(gè)判定問(wèn)題的某個(gè)Monte Carlo算法有2/3的正確幾率(這個(gè)2/3可以替換成任何一個(gè)大于1/2的數(shù),當(dāng)然小于等于1/2的隨機(jī)算法一點(diǎn)意義都沒(méi)有,因?yàn)檫€不如拋硬幣),重復(fù)這個(gè)算法k次,取出現(xiàn)次數(shù)更多的結(jié)果作為問(wèn)題的答案,則這個(gè)答案的正確率大于1-1/2(8/9)^k。
上面的結(jié)果由于k出現(xiàn)在指數(shù)上,所以只需要將一個(gè)Monte Carle算法重復(fù)很少的次數(shù),便能得到很高的準(zhǔn)確率。
近似算法從字面的意思來(lái)看似乎和上面的Monte Carle算法差不多,其實(shí)它們的考慮對(duì)象是不一樣的,而且通常所指的近似算法是確定型算法。近似算法多用在組合優(yōu)化的問(wèn)題,而不是判定性問(wèn)題上。組合優(yōu)化問(wèn)題,指的是那些需要求最優(yōu)解的問(wèn)題,比如下面這個(gè)
旅行商問(wèn)題
有n個(gè)城市,一個(gè)推銷員要從其中某一個(gè)城市出發(fā),不重復(fù)地走遍所有的城市,再回到他出發(fā)的城市。問(wèn)這個(gè)推銷員的最短路程。
對(duì)于這種問(wèn)題,如果最短路徑是1000,而且我們能很快找到一個(gè)1000.1的路徑,在實(shí)際運(yùn)用中,我們還需要浪費(fèi)巨大的計(jì)算資源去找那個(gè)1000的路徑嗎?近似算法便基于此思想而來(lái)。
近似算法指在解決優(yōu)化問(wèn)題中,最后得到的結(jié)果能保證在一定的誤差之內(nèi)的算法。
從近似算法的角度來(lái)說(shuō),同為NP完全問(wèn)題,它們也有不同的可近似度。在多項(xiàng)式時(shí)間內(nèi),有些問(wèn)題可以無(wú)窮小誤差的逼近,但有些問(wèn)題卻連常數(shù)倍數(shù)之內(nèi)的結(jié)果都沒(méi)法得到。
總結(jié)
以上是生活随笔為你收集整理的理论计算机初步:概率算法和近似算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。