hire-assistant(n)
best = 0
for i = 0 to n
interview candidate i
if candidate is better than candidate best
best = i
hire candidate i
最壞情形分析
應聘者質量按出現的次序嚴格遞增
如何求平均情況?
隨機演算法
定義:i
=1\quad如果a發生\\ 0\quad如果a不發生\end
i=pr\lbrace a\rbrace
pr,期望 e[x
a]
e[x_a]
e[xa]
引理:給定乙個樣本空間s和s中的乙個事件a,設xa=
ix_a=i\lbrace a\rbrace
xa=
i,那麼e[x
a]=p
re[x_a]=pr\lbrace a\rbrace
e[xa]
=pr
用指示器隨機變數分析僱傭問題
x i=
i=
1\quad如果應聘者i被僱傭 \\ 0\quad如果應聘者i不被僱傭 \end
xi=i=
e[x_i]=pr\lbrace 應聘者i被僱傭\rbrace
e[xi]
=pr應聘者比應聘者1到i-1更有資格的概率是1/i,因此
e [x
i]=1
/i
e[x_i]=1/i
e[xi]
=1/i
計算得e[x
]=ln
n+o(
1)
e[x]=\ln n+o(1)
e[x]=ln
n+o(
1)因此儘管面試了n個人,實際上大約只僱傭他們之中的lnn
\ln n
lnn個人先對應聘者進行排列,然後確定最佳應聘者的隨機演算法。此時建立的演算法的效能和假設應聘者以隨即次序出現所得的結果是匹配的。
隨機排列陣列
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 p as sort keys
引理:假設所有優先順序都不同,則過程permute-by-sorting產生輸入的均勻隨機排列
另乙個方法:原址排列給定陣列
randomize-in-place(a)
n = a.length
for i = 1 to n
swap a[i] with a[random(i, n)]
演算法導論 第五章 概率分析和隨機演算法
5.1 僱傭問題 僱傭問題類似於在一組隨機排序的陣列中查詢最大值的問題,對於這類問題無法確切的得出其執行效率。但可以根據輸入的概率分布得到平均情況執行時間。對於乙個演算法行為不僅由輸入決定,而且由隨機數生成器產生的數值決定,則稱演算法是隨機的,其執行時間稱為期望執行時間。5.2指示器隨機變數 由指示...
演算法導論 第五章 隨機演算法
許多隨機演算法通過排列給定輸入陣列來是輸入隨機化。在這裡我們將討論兩種隨機化方法。假設給定乙個陣列a,他包含元素1到n,我們的目標就是構造這個陣列的乙個隨機排列。方法一 為陣列中個每乙個元素a i 賦予乙個隨機優先順序p i 然後根據優先順序對陣列a中的元素進行排序。如初始陣列a 1,2,3,4 且...
演算法導論第五章5 3隨機演算法
5.3 1 marceau教授對引理5.5證明過程中使用的迴圈不變式表示異議。他對在第1次迭代之前迴圈不變式是否為真提出質疑。他得理由是人們可以容易地宣城空陣列不包含0排列。因此空陣列包含0排列的概率應該是0.所以在第1次迭代之前迴圈不變式無效。請改寫過程randomize in place,使其相...