演算法導論筆記 05隨機問題

2021-07-01 22:09:07 字數 1155 閱讀 6826

4

:用random(0,1)

實現random(a,b)

: 這道題的實現思路:這個題目相當於在能隨機生成 0, 1 的前提下,要求隨機生成 n=b-a+1 個整數。      

1、把要生成的數標記為 a, a+1, a+2,..., b-a+1,…,b-1,b       2

、取最小的

m,使得2^m

>= n

3、通過隨機生成 0,1 的函式生成乙個   m

位元整數(隨機生成每一位),這樣能隨機生成[0, 2^m)內的整數。      

4、隨機生成乙個 [0,2^m) 中的整數,如果這個數加a大小在 [a, b] 內,則取這個數為結果。如果這個數加a在 [a, b] 外,則丟棄它,重新生成乙個。

int getbit(int a,int b)             

return bit;                      

}                                    

int random_a_b(inta, int b)         

if (result + a > b)          

else                         

break;                   

}                                

return result + a;               

}         

5:random(0,1)

以概率p返回0

,以概率

(1-p)返回1

。基於它實現

random2(0,1),

各以1/2

的概率返回0和

1.while(true)

該演算法,只有在(x,y) = (1,0)或者(0,1)的情況下,才會返回,返回值為第乙個數,因為用random(0,1)生成(1,0)或者(0,1) 的概率為p(1-p),兩者生成的概率是相同的,所以,返回1和返回0的概率分別為1/2。第一題類似的原理,函式內部,用random(0,1)生成[0,b-a+1]中每個數的概率都是1/ 。所以,生成[0,b-a+1]中每個數的概率是相同的,因而返回每乙個數的概率也是相同的。

演算法導論 隨機演算法

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

演算法導論05 貪心演算法 Dijkstra演算法

問題描述 請設計乙個演算法,實現在乙個有向圖中,給出乙個源點,計算該源點到其他所有頂點的單源最短路徑。演算法描述 dijkstra演算法的目的是尋找單源最短路徑,其具有以下最優子結構性質 最短路徑上的子路徑也是兩個頂點的最短路徑,此性質可以用cut paste反證 見筆記 因此,該演算法滿足貪心演算...

《演算法導論》學習筆記 排序問題

核心思想 就相當於你在抓取撲克牌,第一張撲克牌是不用排序的,當你抓取第二張撲克牌的時候才與之前的撲克牌排序,當你抓取第三張撲克牌的時候,第 一 二張撲克牌是已經排好的。package com.example public class myclass i沒有以0開始,是因為第一張撲克牌不用排序,相當於...