2011-01-26 123 views
1

我有一個短的隨機數字輸入,比方說int 0-999。如何從短隨機數生成更長的隨機數?

我不知道輸入的分佈。現在我想根據輸入在0-99999範圍內生成一個隨機數,而不改變分佈形狀。 我知道有一種方法可以通過將輸入分爲999和多個99999來獲得結果,從而將輸入設置爲[0,1]。但是,這種方法並沒有涵蓋所有可能的值,就像99999永遠不會被擊中一樣。

+4

這聽起來像你要求從你的隨機數字源得到的熵比現有的要多。這是無法完成的。如果你正在尋找分散算法,那麼你應該看看math.stackexchange.com – 2011-01-26 13:13:45

回答

1

假設你的輸入是某種隨機源的...

你可以把兩個連續的輸入並將它們組合:

input() + 1000*(input()%100) 

不過要小心。這依賴於具有大量熵的源,以便給定的輸入號碼不總是跟隨相同的後續輸入號碼。如果您的來源是PRNG,它旨在以某種方式在數字0-999之間循環,此技術將無法使用。

對於大多數生產熵來源(例如/ dev/urandom),這應該可以正常工作。 OTOH具有生產熵源,您可以直接獲取0-99999之間的隨機數。

0

您可以嘗試類似如下:

(input * 100) + random 

,其中隨機是隨機數介於0和99

的問題是,僅輸入指定要使用的100系列。例如,50表示您將擁有5000到5100之間的數字(以保持類似的形狀分佈)。 5000到5100之間的數字取決於您。