隨機化演算法的主要目的是希望讓隨機發生在演算法上,而不是發生在輸入分布上,這樣的話,沒有特別的輸入會引起我們的演算法的最壞情況。即使你最壞的敵人也無法產生最壞的輸入陣列。因為隨機排列使得輸入次序不再相關。只有在隨機數生成器產生乙個不走運的排列時,隨機演算法才會執行得很差。
一. 隨機優先順序陣列法
我們為陣列的每乙個元素a[i] 賦乙個隨機的優先順序p[i], 然後依據優先順序對陣列a中的元素進行排序。
例如:a =(1,2,3,4),p=(36,3,62,19),對優先順序陣列進行排序,再排序過程中,關聯a陣列的排序。 我們得到a』 = (2,4,1,3);
permute-by-sorting(a)
n = a.length
let p[1...n] be a new array
for(i =1 to n)
p[i] = random(1,n^3);
sort (a), using pas sort keys
二. 原址隨機交換法
原址隨機交換法不產生隨機優先順序陣列,而是,對於每個a[i], 在進行第i次迭代時,元素a[i]是從元素a[i]到a[n]中隨機選取的。
randomize-in-place(a)
n = a.length
for i = 1 to n
swap a[i] with a[random(i,n)]
隨機化演算法基礎
隨機化演算法在分析某些涉及概率分析的問題上具有重要意義,因為輸入的分布是我們不能預知的,我們想讓分析的問題達到乙個平均的狀態,就得依靠隨機化,把輸入分布重新排列,使之成為乙個脫離其他外界因數的排列,同時要保證出現這個排列的概率為1 n 下面,有兩個常用的演算法來實現輸入分布的隨機化,以給定的輸入陣列...
c語言 隨機化演算法
srand unsigned int time null 若不隨機則生成的都為1 相同值 做產生隨機數的種子 x double rand rand max rand 後若為 則是隨機生成0 1之間的數 若為 則是生成0 rand max之間的數 rand max為最大值32767 rand 前為產生...
蒙特卡羅 隨機化演算法
蒙特卡羅 monte carlo 方法是一種以概率統計為指導思想的方法,通過使用隨機數來解決許多問題。基本思想 當所求解問題時是一種隨機事件,或者是某個隨機變數的數學期望時,我們通過統計隨機事件出現的頻率,或者得到隨機變數的數字特徵,來得到問題的解。在實際應用中,不論採用確定性演算法,還是隨機化演算...