2016-02-22 60 views
-3

我有一個XXY矩陣的值從矩陣的位置(因此它的2D)填充有基於所述此公式與數值F現在爲200:隨機選擇基於在該位置

randomGenerator( (F×10)+(F/2))+ 1

RandomGenerator距離java.util.Random中類

我想隨機挑選從像矩陣的位置的隨機數生成器[ 2; 6]並向用戶顯示輸出,但我希望隨機性取決於val你的位置。如果價值越高,它被挑選出來的機會也越高。現在它只顯示一個隨機位置。

我該如何做到這一點?

+0

矩陣中的數字範圍是多少? 0到100? – user3437460

+0

隨着現在的測試,它的範圍從1到2100與f是200位,可能會上升 – BRHSM

回答

1

標準的辦法處理這一問題是:從原來的一個

  • 產生價值從01
    1. 計算標準化矩陣掃描歸一化矩陣,彙總值,噹噹前運行總和超過先前生成的數量時,停止搜索 - 找到您的位置

    歸一化矩陣是calcualted:

    1. 從原始矩陣概括所有值
    2. 填充新的矩陣,其中每個元素=所有元素的原始元素/總和

    簡化的示例:

    原始排列:

    2 6 8 
    

    標準化矩陣:

    0.125 0.375 0.5 
    

    所以,通過生成隨機值[0-1]你會挑

    position `0` 12.5% of time 
    position `1` 37.5% of time 
    position `2` 50% of time 
    

    這裏是相同的應用程序,這說明它是如何工作的這個例子:

    public static void main(final String[] args) { 
        final double[] original = new double[] { 2.0, 6.0, 8.0 }; 
        final double[] normalized = getNormalized(original); 
    
        final int[] positionPicked = new int[original.length]; 
        final Random rnd = new Random(); 
        for (int i = 0; i < 10000; i++) { 
         final double d = rnd.nextDouble(); 
         final int position = getPosition(normalized, d); 
         positionPicked[position]++; 
        } 
    
        for (final int p : positionPicked) 
         System.out.println(p); 
    } 
    
    static double[] getNormalized(final double[] original) { 
        double s = 0.0; 
        for (final double e : original) 
         s += e; 
        final double[] normalized = new double[original.length]; 
        for (int i = 0; i < original.length; i++) 
         normalized[i] = original[i]/s; 
        return normalized; 
    } 
    
    static int getPosition(final double[] normalized, final double v) { 
        double s = 0; 
        for (int i = 0; i < normalized.length; i++) { 
         s += normalized[i]; 
         if (s >= v) 
          return i; 
        } 
        return normalized.length - 1; 
    } 
    

    且結果如下:

    #0 1283 12.83% 
    #1 3732 37.32% 
    #2 4985 49.85% 
    
  • +0

    這不會是隨機的我認爲。它總是會達到最高值,然後停止,如果我沒有錯誤 – BRHSM

    +0

    @BRHSM它將是隨機的,它會在最高值之前停止 –

    +0

    讓我測試BRB – BRHSM

    1

    讓我們假設你有一個號碼列表。你可以計算列表和2d矩陣之間的轉換。

    我們假設挑選一個元素的概率是成比例的。 你有這樣的矩陣

    482 
    759 
    123 
    

    你會找到一個方法來迭代列了清單,例如
    4,8,2,7,5,9,1,2,3

    當迭代建設累計總和
    4,12,14,21,26,35,36,38,41

    然後挑一些範圍總和*蘭特(),所以在這裏0-41

    第一項目在累計和格里比您選擇的單元格更接近於rand數字。

    如果你想成反比,那麼你的累計和就是1/x的值。你可以使用任何有價值的函數。

    +0

    我不想要這個值。我想要它的位置。這個值只是它被選中的機會 – BRHSM