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

@Chodtok: a jakie? Bo w pythonie nie wiem.

Bo wiesz chodzi o to ze nie manipulujesz jak domniemam. Ale...

Skoro lista wejsciowa jest "dana" czyli na to nie wplywasz to moze ograniczenia shufle sa nieistotne a nie masz na nie wplywu i nie mozesz nimi manipulowac. Wiec ogolnie wszystko ok
  • Odpowiedz
@Chodtok: a nie możesz jako seed dawać sumy aktalna sekunda + mikrosekunda?
Moim zdaniem lepsze to niż wrzucanie długości tablicy + stała wartość.
  • Odpowiedz
no dobra ale ustalony timestamp chyba nie różni się niczym od ustalonego przeze mnie 2137*69 i wtedy końcówka listy wydaje się nie mieć wpływu na wynik

@croppz:
  • Odpowiedz
a jakie? Bo w pythonie nie wiem.

Note that even for small len(x), the total number of permutations of x can quickly grow larger than the period of most random number generators. This implies that most permutations of a long sequence can never be generated. For example, a sequence of length 2080 is the largest that can fit within the period of the Mersenne Twister random number generator.


jeśli dobrze rozumiem może
  • Odpowiedz
hmmm no tak ale jest już ta liczba głosujących i tym ciężko manipulować
tzn jest to pewnie jakoś tam możliwe ale nie wiem co w tym kontekście zmienia znana_wszystkim_losowa_liczba + liczba_głosujących w porównaniu do 0 + liczba_głosujących

@LowcaG:
  • Odpowiedz
i chyba obliczanie seeda poprzez hashowanie całej listy głosujących tj ich nicków i wgl wydaje się jeszcze dużo trudniejsze do zmanipulowania niż sama liczba głosujących

@LowcaG:
  • Odpowiedz
@Chodtok: jeżeli używasz seeda to random nie jest randomowy i o wszystkim decyduje seed. Na tym polegają seedy, dają powtarzalne rezultaty. Dlatego jeżeli chcesz żeby twoje losowanie było wiarygodne musisz użyć seeda na którego wartość nie miałeś wpływu - dowolna liczba we wpisie (podana zanim ludzie zaczną plusować) + ilość plusów jest spoko, bo nie możesz dowolnie manipulować liczbą plusów.

Timestamp też jest spoko, jeżeli losowanie możesz zrobić tylko raz
  • Odpowiedz
w sensie chodzi mi o to że zamiast

Bo tal latwo o manipulacje czyli np. Podajesz jakas losowa liczbe publicznie plus liczba glosujacych


a konkretniej

liczba
  • Odpowiedz
no ok oboje twierdzicie chyba to samo czyli że

znana wszystkim losowo liczba + liczba głosujących


jest spoko

no
  • Odpowiedz