《演算法導論》5 1 2

2021-08-24 17:36:00 字數 812 閱讀 7273

要想使用random(0,1)生成(a,b)之間的隨機數,可以進行以下步驟:

1.相當於實現random(0,b-a)之間的隨機數

2.但是0101等序列數字直接相加得到的數字概率不等,用二進位制這樣每個位上出現01的概率就相等,換言之生成的二進位制數概率相等,再將二進位制轉化為十進位制即可

3.具體做法就是先找出大於b-a的最小2的n次方,即二進位制的位數範圍,確定位數後每位進行01隨機的生成,轉為十進位制數,如果出現超出b-a的情況重新生成即可。

python**如下:

# 將random(0,1)變為random(a,b)

from random import *

def reverse(a, b):

dist = b - a

# 找到大於b-a的最小2的n次方

c = 0

while 2 ** c <= dist:

c += 1

sum = 0

for i in range(c):

sum = sum + randint(0, 1) * 2 ** i # 二進位制變十進位制

# sum += randint(0, 1) << i

if sum <= dist:

return sum + a

else:

return reverse(a, b)

if __name__ == "__main__":

a = 5

b = 6

for j in range(200):

print reverse(a, b)

演算法導論 5 1 2

描述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位元的整數,這樣能...

演算法導論 隨機演算法

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

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

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