2010-12-04 104 views
0

可能重複:
Expand a random range from 1-5 to 1-7隨機數產生

您好, 這個問題是來自 http://blog.seattleinterviewcoach.com/2009/02/140-google-interview-questions.html

採取鑑於其產生在一個 隨機整數的函數範圍1至5, 寫其產生 隨機整數範圍爲1〜7

我無法通過使用1至5個隨機發生器得到一個方式來產生所有的隨機數1到7幾乎相等的概率的函數。

任何人都可以解決它嗎?

+0

分佈是否必須一致?你是否從提供的功能獲得統一的分配?你可以忽略提供的功能嗎? :) – 2010-12-04 12:06:34

回答

1

我假設你給的函數提供了均勻分佈的數字,並且它是一個嚴格的要求,你需要寫的函數也返回均勻分佈的數字。

下面的僞代碼示出了標準的技術(稱爲rejection sampling):

do { 
    rand25 = (rand5() - 1) * 5 + rand5; // 1-25 
} while (rand25 > 21); 
return (rand25 - 1)/3 + 1; 
-1

什麼FUNC()+ FUNC()%3?

+0

剛注意到,概率必須相同。該解決方案改變分配。 – qutron 2010-12-04 12:25:27