2014-04-01 110 views
1

我的目標是隨機洗牌數組(從0到9),但每個數字只能在數組中出現一次。我有兩個(工作)想法,但我想知道這個random2方法必須迭代多少次才能達到與第一個方法(random1)相同的隨機性水平。隨機性水平

import java.util.Random; 

class RandomStuff { 

static Random r; 
final static int iteraction = 10; 

public static void main (String[] args) { 
    r = new Random(); 
    int[] array = new int[10]; 
    random1(array); 
    random2(array, iteraction); 
} 

static void random1(int[] array) { 
    for(int i = 0; i < array.length; i++) pole[i] = -1; 

    for(int i = 0; i < array.length; i++) { 
     while(true) { 
      int y = r.nextInt(10); 
      if(!find(array, y)) { 
       array[i] = y; 
       break; 
      } 
     } 
    } 
} 

static void random2(int[] array, int iteraction) { 
    for(int i = 0; i <= iteraction; i++) { 
     int y1 = r.nextInt(array.length); 
     int y2 = r.nextInt(array.length); 
     int p = array[y1]; 
     array[y1] = array[y2]; 
     array[y2] = p; 
    } 
} 

static boolean find(int[] array , int value) { 
    for(int i = 0; i < array.length; i++) { 
     if(pole[i] == value) return true; 
    } 
    return false; 
} 
} 

第一種方法(random1)的工作原理的隨機數和檢測的分配,如果它們是/不是陣列中已經。這對我來說似乎很隨意。

第二種方法(random2)用於交換數組中的兩個隨機值。所以問題是,我需要多少次交換數組中的兩個數字才能達到相同的隨機性水平。 (或者變量迭代有什麼價值)。

感謝您的回覆。

+4

也許你應該使用[Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)。 – Kevin

+0

我不明白你的「雙重隨機性」的目的。如果第一種方法爲每個元素分配一個隨機數,那麼通過在第二個函數中對它們進行洗牌,還能獲得哪些額外的好處? – aliteralmind

+1

我猜你可以簡單地將數字從0到9分配到數組中,然後將其重新排序。 – Karura91

回答

1

要回答你原來的問題,「多少次必須在此random2迭代的方法來達到同樣的LEVE像第一種方法那樣在數組中具有隨機性?「

答案是:它永遠不會達到相同的隨機等級。

對於已交換的任何位置,它有相同的機會到達任何位置,這意味着它有10%的機會回到它開始的位置。

在每次迭代中,交換2個數字(如果數字交換到自己的位置,則爲零)。這意味着在迭代1次後,任何給定位置都有80%的機會從未交換過。經過N次迭代後,仍然有0.8^N的機會從未交換過。如果它被交換,它有10%的機會回到它開始的地方。所以任何給定數字在其起始位置的概率是10%+ 0.8^N。這總是> 10%,所以你永遠不會得到一個完美的均勻分佈。

例如,對於10次迭代的選擇,每個數字從未移動的概率爲10.7%,或者總共有19.7%的機會處於起始位置。所以十次迭代都不夠接近。

+0

這是我一直在尋找的anwser。謝謝 :) – ViliX64

2

如何分配隨機數到陣列中的每個元素,以和順序安排的隨機數讀分配給該隨機數

0.64342 0 
0.95229 1 
0.23047 2 
0.82793 3 
0.19014 4 
0.18528 5 
0.15684 6 
0.99546 7 
0.54524 8 
0.90612 9 

訂購

0.15684 6 
0.18528 5 
0.19014 4 
0.23047 2 
0.54524 8 
0.64342 0 
0.82793 3 
0.90612 9 
0.95229 1 
0.99546 7 
數組的元素

數字0到9,現在以隨機順序

+0

這是一個值得嘗試的好主意。謝謝:) – ViliX64