Wpis z mikrobloga

hejka programistyczne świry
z listy o długości około 790 chciałm wybrać 5 jak najbardziej przypadkowych elementów
wydawało mi się że random.sample(l, k=5) jest dobrym rozwiązaniem tzn każdy pięcioelementowy podzbiór będzie mieć mniej więcej taką samą szansę na bycie wylosowanym
no ale chyba nie za bardzo tak jest bo przy pewnym ustalonym seedzie (2137*69 konkretniej) wyniki dla początkowych fragmentów listy o różnej długości nie różnią się za bardzo od siebie i zmieniają się istotnie dopiero w okolicach potęg dwójki
https://repl.it/repls/AssuredGeneralAtoms
czyli to tak jakby mniej więcej praktycznie nie brało pod uwagę elementów o indeksach powyżej 2\*\*floor(log(1000, 2)) ;///
no i ogólnie chyba nie spełnia w ogóle moich założeń o wybraniu 5 jak najbardziej przypadkowych elementów z danego zbioru ;\\

z drugiej strony przy zabawie w ten sposób:
https://repl.it/repls/UnevenMenacingPolyhedron
wszystko wydaje się w miarę ok, tzn elementy chyba są wybierane z w miaaaaaarę równym prawdopodobieństwem

jak poprawnie zrobić to co chciałm zrobić czyli po prostu ustalić sobie jakiś stały seed tak żeby wyniki były powtarzalne i dla danej listy wybrać jej jak najbardziej przypadkowy podzbiór, ale żeby jednocześnie dodanie albo usunięcie czegoś z końca listy jednak generowało zupełnie inny wynik a nie praktycznie na niego nie wpływało ;//
pierwszym co mi przychodzi do głowy jest dodanie do seeda len(lista) i chyba powinno to w miarę działać tak mi się wydaje
ale dlaczego właściwie sample działa inaczej niż sobie wyobrażałm
o co tu chodzi
czego nie rozumiem

#programowanie #python
  • 68
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

z listy o długości około 790 chciałm wybrać 5 jak najbardziej przypadkowych elementów


@Chodtok: problem losowości polega na tym, że 1 2 3 4 5 jest tak samo losowe jak 42 458 3 743 349 ;P
  • Odpowiedz
kurczę no chodzi mi o to że chciałm jak najbardziej uczciwie wybrać pięć osób spośród plusujących wpis
i w zasadzie to jakieś zewnętrzne liczby chyba nie są tu potrzebne i wystarczyłoby za seed brać długość listy
ale może się mylę i może ogólnie jest jakieś lepsze rozwiąznie

@morsik: @sokytsinolop: @Przegrywek123: @croppz:
  • Odpowiedz
no cholera, jak zawsze dajesz tego samego seeda to czego oczekujesz?


no oczekiwałem tego że sample pomimo tego samego seeda dla różnych list generuje różne wyniki tzn że w algorytmie losowania zmienność listy jest jakoś bardziej istotna

@croppz:
  • Odpowiedz
w sensie chciałbym tak jak np tak jak tutaj móc napisać przeprowadziłem losowanie w taki i w taki sposób możecie to sobie zweryfikować
no tylko potem odkryłem że to chyba słaby sposób bo przy wybraniu konkretnego seeda lista miała dużo mniejszy wpływ na wynik niż myślałem że ma i duża jej część chyba wgl nie była brana pod uwagę

patrząc na to teraz najlepszym rozwiązaniem wydaje się mi po prostu wzięcie jako seed długości
  • Odpowiedz
posortuj losowo tablice z jakims seedem biez pierwsze 5 osob


hmmm nie jestem pewien ale w dokumentacji było coś chyba o tym że shuffle ma swoje ograniczenia

@LowcaG:
  • Odpowiedz