Ich möchte zwei ganze Zahlen x und y nach dem Zufallsprinzip aus einem Intervall [1, N], so dass | x-y | > = D, für einige D < N. Der Code unten (geschrieben in R) ist, was ich benutzt habe, aber es ist schrecklich ineffizient. Gibt es bessere Methoden für diese Art der Probenahme? Danke in adv.Random Sampling mit Abstand Bedingung
N <- 100; D <- 10;
i <- sample(1:N, 2)
while (abs(i[1] - i[2]) < D){
i <- sort(sample(1:N, 2))
}
scheint nicht ineffizient überhaupt - warum sagst du das? für eine Entfernung von 10 und Werte von 1 bis 100, die meisten Male müssen Sie nur "Probe" einmal aufrufen – rawr
Ich denke, (Effizienz) hängt von der spezifischen Anwendungsfall, aber am wichtigsten ist dieser Algorithmus nicht konstante Zeit seit ' P (| xy |> = D) 'für jeden Aufruf zum Abtasten (1: N, 2) ist etwas entlang der Linie von '1 - [(Nx)/N + (x-0)/N + 2D/N] ', mit P (x) = 1/N, für jedes x, y in [1: N] und D
miraculixx