演算法導論 5 1 2

2021-09-08 07:58:15 字數 847 閱讀 2229

***

描述random(a, b)過程的一種實現,它只呼叫random(0,1)。作為a和b的函式,你的程式期望執行時間是多少?

這個題目相當於在能隨機生成0,1的前提下,要求生成[0, 1, ...,n-1]範圍內的乙個整數

1 求出最小的 m,使2^m >= n-1

2 通過random(0,1),產生乙個m位元的整數,這樣能隨機產生[0, 2^m-1]內的整數,若產生的整數字於[0, n-1]內,則取這個數作為結果。如果這個數在[0,n-1]外,則丟棄它,再次執行演算法重新生成乙個。

a) 證明上述演算法可以產生 [0, n-1]範圍內的隨機數

在範圍[0,1, ..., n-1, n, ..., 2^m-1]範圍內,總共有p = 2^m個數,其中合法的數是[0, 1, ..., n-1]共n個,非法的數為

[n, ..., 2^m-1]共q = 2^m-n個,則有 n + q = p

演算法最後會產生乙個合法的隨機數,假設得到數i的概率為pi,0 <= i <= n-1, 則

所以上述方法可以產生隨機數

b) 求演算法執行的期望時間

設pi表示產生隨機數時執行了i次演算法的概率,那麼前i-1次產生的都是非法的數,第i次產生的是合法的數,所以

那麼【另】分治法:

2.1分解,將a-b區間分成2部分,通過random(0,1)控制,則進入前半部和後半部的概率是一樣的;

2.2.遞迴的處理前後兩個部分,若問題足夠小,即落到某個具體位置上時,則直接返回;

注意:當元素個數(b-a+1)不是2的冪次時,直接進行分治得不到等概率

元素;此時需要新增(b+1)、(b+2)、(b+3)···以使得元素個數等於2的冪次,然後再對a~(b+i)進行分治

《演算法導論》5 1 2

要想使用random 0,1 生成 a,b 之間的隨機數,可以進行以下步驟 1.相當於實現random 0,b a 之間的隨機數 2.但是0101等序列數字直接相加得到的數字概率不等,用二進位制這樣每個位上出現01的概率就相等,換言之生成的二進位制數概率相等,再將二進位制轉化為十進位制即可 3.具體...

演算法導論 隨機演算法

一.概率分布 對於有些問題本身是屬於概率問題,如僱傭問題 對於此類問題,我們需要利用概率分析來得到演算法的執行時間,有時也用來分析其他的量。例如,僱傭問題中的費用問題也需要結合概率分析來計算得到。為了使用概率分析,我們必須使用或者假設已知關於輸入的概率分布,然後通過分析該演算法計算出平均情況下的執行...

《演算法導論》 演算法導論2 2 1插入排序

2.1 插入排序。我們分析的第乙個演算法是插入排序演算法,輸入 n個數 a1,a2,a3,a4,a5,a6,a7 an 輸出 序列的乙個排列 即重新排序 a1 a2 a3 使a1 a2 a3 插入排序演算法的偽 是以乙個過程的形式給出的,稱為insertion sort,它的引數是乙個陣列。包括了n...