2017-03-07 47 views
0

給定人口大小P,我必須生成P個隨機但唯一的對象。一個對象是X個唯一無序對的無序列表。停止生成隨機唯一事物的閾值

我目前只是使用一個while循環與T嘗試在放棄之前生成一個隨機排序。目前T =一些常數。

所以我的問題是在什麼時候,我應該停止試圖產生更多的唯一對象,即T.

例如合理值:

1)如果我有3個獨特的對象,我只需要再一次,我可以嘗試例如4次

2)但是,如果我有999個獨特的對象,我只需要一個,我不想讓例如1000次嘗試

我正在處理的問題並不絕對需要每一個唯一的排序。用戶實際上指定了數字,所以我想確定在什麼時候說再生成是不合理的。

我希望是有道理的

如果不是這樣,一個更一般的情況:

選擇N個數,在T的什麼值,它開始變得非常困難,開始產生從更獨特的隨機數可能N.

我不確定T是否會在這兩種情況下是相同的,但也許這第二種情況下足以滿足我的需要。我需要一個相對較小的N值閾值和一個較大的N值相對較小的閾值。

並不重要,但這是基本的遺傳算法。

回答

0

你是否要求類似彩票/球的選擇?爲此,有一個衆所周知的洗牌算法 - Fisher–Yates-Knuth shuffle

+0

有趣的,但我實際上產生隨機對與非重複的數字,即我從10個獨特的數字中挑選,並將它們放入5對沒有秩序。我想從那時起,也許我應該使用概率來確定我的數量,即能夠產生另一組配對的概率,並在它低於某個閾值時停止。但我真的不知道如何確定這個 – ovg

+0

@ovg如何阻止它仍然有點不清楚。你能提供僞碼嗎?在使用FYK shuffle時,通常在一些結構中保留對象(在你的情況下是對),並且只是洗牌索引,基本上是整數數組 –