どの数字も連続しないような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
更新: この関数は一様な確率でサンプルを返さないことを知っています。私の限られたテストに基づいて、以下のアンバーのソリューションは、(a) サンプルの個々の要素が連続していないこと、および (b) すべての可能な k 個のサンプル (1...n から) が均一な確率で生成されるという条件の両方を満たします。