2017-03-07 23 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时,通常在一些结构中保留对象(在你的情况下是对),并且只是洗牌索引,基本上是整数数组 –