【发布时间】:2017-01-24 23:22:53
【问题描述】:
我想从区间 [1,N] 中随机抽取两个整数 x 和 y,使得 |x-y| >= D,对于某些 D
N <- 100; D <- 10;
i <- sample(1:N, 2)
while ( abs( i[1] - i[2] ) < D ){
i <- sort(sample(1:N, 2))
}
【问题讨论】:
-
似乎一点也不低效——你为什么这么说?对于 10 的距离和 1 到 100 的值,大多数时候您只需调用一次
sample -
我猜(in)效率取决于具体的用例,但最重要的是这个算法不是恒定时间,因为
P(|x-y| >= D)对 sample(1:N, 2) 的任何调用都是沿着1 - [(N-x)/N + (x-0)/N + 2D/N]的行,其中 P(x) = 1/N,对于 [1:N] 中的任何 x,y 且 D