Я хочу случайным образом выбрать два целых числа x и y из интервала [1, N], для которых | x-y | > = D, для некоторого D < N. Код, приведенный ниже (написанный на R), является тем, что я использовал, но он ужасно неэффективен. Есть ли лучшие методы для такого рода отбора проб? Спасибо в adv.Случайная выборка с условием расстояния
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' – rawr
Я полагаю, что эффективность (в) зависит от конкретного варианта использования, но, самое главное, этот алгоритм не является постоянным временем, P (| xy |> = D) 'для любого вызова выборки (1: N, 2) - это что-то по строке« 1 - [(Nx)/N + (x-0)/N + 2D/N] ', причем P (x) = 1/N, для любых x, y в [1: N] и D
miraculixx