我试图找到k
范围内的随机数,1..n
使得没有一个k
数字是连续的。我想出的代码是
def noncontiguoussample(n,k):
import random
numbers = range(n)
samples = []
for _ in range(k):
v = random.choice(numbers)
samples.append(v)
for v in range(v-1, v+2):
try:
numbers.remove(v)
except ValueError:
pass
return samples
更新:我知道这个函数不会以统一的概率返回样本。根据我的有限测试,下面的 Amber 解决方案同时满足条件 (a) 样本的各个元素不连续,以及 (b) 所有可能的 k 个样本(来自 1...n)均以均匀概率生成。