用于生成不在一组数N中的随机数R的最优算法

时间:2010-07-29 19:45:42

标签: algorithm random set

我很想知道在一组提供的整数(R∉N)中生成 not 的随机整数R的最佳方法。我可以想到几种方法,但我想知道你们都在想什么。

3 个答案:

答案 0 :(得分:12)

设N为整个集合的大小,让K为被排除集合的大小。

我取决于您采样的集合的大小。如果排除的集合远小于整个范围,则只需选择一个随机数,如果它在排除的集合中,则再次选择。如果我们将排除的集合保留在哈希表中,则每次尝试都可以在O(1)时间内完成。

如果排除集很大,请选择一组大小(N - K)中的随机数R,并将该选项输出为非排除元素的成员。如果我们只在哈希表中存储用随机数值键入的哈希表,我们可以在一个样本中及时生成O(1)。

截止点将取决于(N - K)/ N的大小,但我怀疑除非它大于.5左右,否则你的设置非常小,只需采样直到你受到打击将是在实践中更快。

答案 1 :(得分:1)

鉴于您的描述有限?找到N中元素的最大值。仅生成大于该值的随机数。

答案 2 :(得分:0)

在整个域中生成一个随机数R(从最大值中减去N的大小)。然后循环遍历所有N小于R并且每次将1添加到R.这将在域中给出一个不在N中的随机数。