2011-10-15 71 views
-1

什麼是創建一個PHP函數的最有效方法,它將選取一定數量的隨機數,但均勻間隔並且不包含重複項?PHP:選擇一個隨機數,均勻分佈

例如說你想0-6 3之間的隨機數的結果可能是[0,2,5][1,3,6]

關於如何開始的任何想法?

+3

」3和6是如何均勻分佈的「?3和6之間的間隙比1和3之間的間隙大50%。爲什麼不是」1 3 5「? –

+1

同樣適用於0,2,和5. –

+0

如果你有一組關於可能性的規則,計算它們並從我選擇的一個隨機數中選擇一個隨機數 –

回答

2

注意,沒有代碼的下方會直接工作,作爲一個複製粘貼。


如果你想選擇一個隨機數,使用mt_rand(min, max)

如果要選擇可被N整除的隨機數,請使用mt_rand(min, max)*N

如果你想選擇M個隨機數裏面全是整除N,使用循環:

for($i = 0; $i <= M-1; $i++) { 
    $result[$i] = mt_rand(min, max)*N; 
} 
print_r($result); 

這是我從你的問題理解。 「

+0

,所有這些數都可以被N_整除。我只想補充一點:數字是事實「隨機」意味着沒有任何**保證**任何兩個生成的數字將被均勻分配,「mt_rand(0,6)」與生成[0,1,5]或[2,5,6 ],因爲它會產生[0,2,5]或[1,3,6]。 – Herbert

+0

對於**隨機**數字,它在數學上**是不可能的**,根據定義,這是不可能的。 –

+1

這就是我要做的,但你說得更好:-) – Herbert

0

如果你的意思是均勻分佈在「所有evens」那麼你可以檢查數字對模數2:if($ n%2 == 0){//用偶數來做事情......}

array_rand(array(1,2,3,4,5,6 ...),3);會給你一個數字池中的3個隨機數,但他們當然是隨機的......不是均勻間隔的......在一個組中,均勻間隔的數字很難根據定義是隨機的嗎?

我的意見是隨機挑選數組的索引,然後以某個時間間隔在該索引處添加元素,然後在需要的迭代次數上執行該操作。

$random_numbers = array(1,2,3,4,5,6,7,8,9); 
$random_val = array_rand($random_numbers, 1); 
$iterations = 3; 
for ($i=0; $i<$iterations; $i++){ 
    $random_val = $random_val+2; 
    print $random_val; 
}