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開始,是因為第一張撲克牌不用排序,相當於...