本章介紹概率分析和隨機算法.
5.1 僱用問題
概率分析
概率分析是在問題分析中應用概率的概念。大多數情況下,我們採用概率分析來分析一個算法的運行時間,有時也用來分析其他的量。我們對所有可能輸入產生的運行時間取平均。當報告此種類型的運行時間時,我們稱其爲平均情況運行時間。
我們在確定輸入分佈時必須非常小心。對於某些問題,我們可以對所有可能的輸入集合做某種假定,然後採用概率分析來設計一個高效算法,並加深對問題的認識。對於其他一些問題,我們不能描述一個合理的輸入分佈,此時就不能採用概率分析。
隨機算法
爲了利概率分析,我們需要了解關於輸入分佈的一些信息。我們通過使一個算法中的某部分的行爲隨機化,常可以利用概率和隨機性作爲算法設計和分析的工具。
更一般地,如果一個算法的行爲不僅由輸入決定,而且也有隨機數生成器產生的數值決定,則稱這個算法是隨機的。我們將假設一個可以自由使用的隨機數生成器RANDOM。調用RANDOM(a,b)將返回一個介於a和b之間的整數,並且每個整數以等概率出現。
當分析一個隨機算法的運行時間時,我們以運行時間的期望值衡量,其中輸入值由隨機數生成器產生。我們將一個隨機算法的運行時間稱爲期望運行時間,以此來區分這類算法和那些輸入是隨機的算法。一般而言,當概率分佈是在算法的輸入上時,我麼討論的是平均情況運行時間;當算法本身做出隨機選擇時,我們討論期望運行時間。
5.2 指示器隨機變量
爲了分析僱用問題在內的許多算法,我們採用指示器隨機變量。它爲概率與期望之前的轉換提供了一個便利的方法。給定一個樣本空間S和一個事件A,那麼事件A對應的**指示器隨機變量**I{A}定義爲:
一個事件A對應的指示器隨機變量的期望值等於事件A發生的概率。
引理 5.1 給定一個樣本空間S和S中的一個時間A,設
用指示器隨機變量分析僱用問題
引理 5.2 假設應聘者以隨機次序出現,算法HIRE-ASSISTANT總的僱用費用平均情況下爲
5.3 隨機算法
我們讓隨機發生在算法上,而不是在輸入分佈上。對於有該算法及許多其他的隨機算法,沒有特別的輸入會引出它的最壞情況
引理 5.3 過程 RANDOMIZED-HIRE-ASSISTANT的僱用費用期望是
隨機排列數組
很對算法通過對給定的輸入變換排列以使輸入隨機化。這裏我們討論兩種隨機化方法。假定給定一個數組A,包含元素1 到n。我們的目標是構造這個數組的一個隨機排列。
一個通常的做法是爲數組的每個元素A[i]賦一個隨機的優先級P[i],然後依據優先級對數組A中的元素進行排序。我們成這個過程爲PERMUTE-BY-SORTING
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 P as sort keys
引理 5.4假設所有優先級都不同,則過程PERMUTE-BY-SORTING產生輸入的均勻隨機排列。
產生隨機排列的一個更好方法是原址排列給定數組。過程RANDOMIZE-IN-PLACE在O(n)時間內完成。
n = A.length
for i = 1 to n
swap A[i] with A[RANDOM(i,n)]
引理 5.5 過程RANDOMIZE-IN-PLACE可計算出一個均勻隨機排列
5.4 概率分析和指示器隨機變量的進一步使用
5.4.1 生日悖論
5.4.2 球與箱子
5.4.3 特徵序列
5.4.4 在線僱用問題