Generowanie posortowanych losowych int bez sortowania? Na)
Właśnie patrzyłem na pytanie dotyczące golfagenerowanie posortowanej listy 100 losowych liczb całkowitych. Jednak w mojej głowie pojawił się pomysł, aby zamiast tego wygenerować listę dodatnich delt i po prostu dodawać je do bieżącej sumy, a więc:
deltas: 1 3 2 7 2
ints: 1 4 6 13 15
W rzeczywistości używałbyś pływaków, a następnie normalizowałeś je, aby pasowały do górnej granicy i okrągłej, ale efekt jest taki sam.
Chociaż nie byłby to kod krótszy, z pewnością byłby szybszy bez kroku sortowania. Ale to, czego nie mam prawdziwej racji, to:Czy wynikowy rozkład liczb całkowitych byłby taki sam, jak wygenerowanie 100 losowych liczb całkowitych z jednorodnie rozproszonej funkcji gęstości prawdopodobieństwa?
Edytuj: przykładowy skrypt:
import random,sys
running = 0
max = 1000
deltas = [random.random() for i in range(0,11)]
floats = []
for d in deltas:
running += d
floats.append(running)
upper = floats.pop()
ints = [int(round(f/upper*max)) for f in floats]
print(ints)
Czyj wynik (rzuty kostką) był:
[24, 71, 133, 261, 308, 347, 499, 543, 722, 852]
AKTUALIZACJA: Odpowiedź Aloka iKomentarz Dana Dyera wskazać, że za pomocąrozkład wykładniczy ponieważ delty dałyby jednolity rozkład liczb całkowitych.