我需要從1到37生成6個唯一的隨機數;起初,我用一個簡單的數組映射:非均勻隨機發生器
private int k=6, n=37;
public int[] Results()
{
// fill an array with numbers 1 2 3 . . . n
int[] numbers = new int[n];
for (int i = 0; i < numbers.length; i++)
numbers[i] = i + 1;
// draw k numbers and put them into a second array
int result[] = new int[k];
for (int i = 0; i < result.length; i++)
{
// make a random index between 0 and n - 1
int r = (int) (Math.random() * n);
// pick the element at the random location
result[i] = numbers[r];
// move the last element into the random location
numbers[r] = numbers[n - 1];
n--;
}
return result;
}
的問題是,在很多情況下我得到了近uniformic分佈(escpicially當我做出小於10平),即:1,9,16, 18,24,30或5,16,18,22,26,29
我真正需要的是一個TRUE隨機數發生器,可以給我如下結果: 11,16,25,29,30,32或4 ,8,9,15,18,19在LESS中10次抽籤。
我還看到一個HashMap實現類似的東西:
import java.util.*;
public class RandomHash
{
HashMap numbers = new HashMap() ;
Random rnd_gen = new Random() ;
RandomHash()
{
for(;;)
{
int rnd_num = rnd_gen.nextInt() ;
Integer rnd_num_obj = new Integer(rnd_num) ;
if (! numbers.containsKey(rnd_num_obj))
{
numbers.put(rnd_num_obj, rnd_num_obj) ;
/* Do whatever with the number */
break ;
} /* else loop and get another rnadom num */
} /*end for*/
}
}
的問題是,我現在不知道怎麼分別向綁定的隨機和HashMap來6和32。散列表會給出更加混亂的結果嗎?
定義「真正的隨機」的數字,並說明爲什麼你得到的產出是不是真正隨機的。 – 2010-08-10 18:02:23
什麼是「非統一」?你的意思是「不統一」嗎?你需要什麼分配? – 2010-08-10 18:16:32