簡體   English   中英

使用指數分布在特定范圍內用隨機數填充數組

[英]Fill an array with random numbers within a specific range using exponantial distribution

int[] r = new int[1000];

ExponentialDistribution exp = new ExponentialDistribution(4.0);

for(int i = 1; i <r.length; i++){
    r[i] = (int)exp.sample()  + 1 + r[i-1];
}

上面的代碼從r [0] = 0到r [999] = 4527填充數組[r]。這是一次隨機運行的結果。 如果r.length增加到2000,最后一個元素r [1999]增加8963。我試圖找到在0-5000范圍內填充數組[r]的解決方案。即使r.length增加,該數組也應該假設在這種情況下,如果r [999] <= 5000,則r [1999]也應<= 5000。

說,r.length代表總數。 事件的數量,數組r的每個元素代表事件發生的時間。總時間為5000個單位。 動機是,即使r.length增大或減小,第一個事件也將在時間0發生,最后一次是在時間<= 5000,即應該相應地調整兩個事件的發生時間。

非常感謝

我認為您要的是:用表示事件發生時間的數字填充任意長度的數組。 最后一次事件的時間應小於給定的時間。

如果您真的在模擬事件的到來,那么這沒有什么意義。 有關為什么不這樣做的許多詳細信息,請參見https://en.wikipedia.org/wiki/Arrival_theorem 但是,總而言之,您通常會決定事件發生的頻率(平均)和列表中想要的事件數量。 為了獲得一個實際分布,恰好在給定時間內結束了給定數量的事件,您可能需要無限制地運行生成,然后縮減所有事件時間。 但老實說,我不確定這樣做的意義。

另外,如果您只希望兩個范圍之間的一組數字以升序排序,那么這很簡單:

int[] events = random.ints(count, min, max).sorted().toArray();

這不是對泊松分布的現實模擬,但是如果沒有關於您要實現的目標(以及為什么認為需要指數分布的原因)的進一步信息,那么很難給出更具體的建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM