均匀分布具有一定比率的2D阵列中的随机值

时间:2012-11-17 22:23:13

标签: java random multidimensional-array

我们说我有百分比的比率列表。

Map<Integer, Integer> ratio = new HashMap<Integer, Integer>();
ratio.put(0, 10);
ratio.put(1, 50);
ratio.put(3, 40);

然后我有一个二维数组。

int[][] arr = new int[50][50];

现在,我想要随机地,但均匀地分配定义的值013,其各自的比率为1050和该数组中的40

我该怎么做?

1 个答案:

答案 0 :(得分:3)

用第一个零填充一维数组,第二个1然后再填充3.

类似的东西:

int arr[N][M] = //;
int array[N*M] = //;
int total_array_2D_size = N * M;
int j = 0;
Set<Map.Entry<Integer, Integer>> set = ratio.entrySet();  

for (Map.Entry<Integer, Integer> entry : set)
{
    int k = entry.getKey();        // Take the number
    int ratio = entry.getValue();  // Take the ratio
    int N = (total_array_2D_size * ratio) / 100; // The number of times 'k' should
                                                 // appear on the finally 2D array

    for(int i = 0; i < N; i++,j++) array[j] = k; // Fill the 1D array
}

比取Shuffle algorithm并填充你的1D阵列。最后填满你的2D阵列。

for(int i = 0,k = 0; i < N; i++)
  for(int j = 0; j < M; j++,k++)
     arr[i][j] = array[k];

由于你的2D阵列有2500个位置(50 ^ 2),所以在最后你应该有250'0'(0.10 * 50 ^ 2),1250'1'(0.50 * 50 ^ 2)和1000'3' (0.4 * 50 ^ 2)。