概率算法是步驟不明確,答案不一定。
與概率性算法相對的是確定性算法,確定性算法既每一計算步驟都是確定的,有窮的步驟,明確的答案。
1.數值隨機化算法
常用於數值問題的求解,得到的往往是近似解,且近似解的精確度隨着計算時間的增加而不斷提高。
2.Las Vegas(拉斯維加斯算法)
總是或者給出正確的解,或者無解。
注:得到的一定是正確的解。
拉斯維加斯算法。假如有一把鎖,給我100把鑰匙,只有1把是對的。於是我每次隨機拿1把鑰匙去試,打不開就再換1把。我試的次數越多,打開(最優解)的機會就越大,但在打開之前,那些錯的鑰匙都是沒有用的。這個試鑰匙的算法,就是拉斯維加斯的——盡量找最好的,但不保證能找到。
3.Monte Carlo(蒙特卡羅算法)
總是給出解,但是偶爾可能會產生非正確的解。(疑惑,都不知道得到的是不是對的)
注:多次運行算法,每次運行時的隨機選擇都互相獨立,可以使產生非正確解的概率減小到任意小。
舉個例子,假如筐里有100個蘋果,讓我每次閉眼拿1個,挑出最大的。於是我隨機拿1個,再隨機拿1個跟它比,留下大的,再隨機拿1個……我每拿一次,留下的蘋果都至少不比上次的小。拿的次數越多,挑出的蘋果就越大,但我除非拿100次,否則無法肯定挑出了最大的。這個挑蘋果的算法,就屬於蒙特卡羅算法——盡量找好的,但不保證是最好的。
4.舍伍德算法
總能求得問題的一個解,且解總是正確的。
注:當一個算法在最壞情況下的復雜性與其在平均情況下的復雜性有較大差別時,可在這個確定性算法中引入隨機性將它改造成一個舍伍德算法。