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
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
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
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.
@croppz: @Chodtok: algorytm uzyskania seeda musi byc poznany przed glosowaniem. Bo tal latwo o manipulacje czyli np. Podajesz jakas losowa liczbe publicznie plus liczba glosujacych
@Chodtok: wiele. Chcesz przyoszczedzic i robisz tak aby zawsze kolega wygrywal no to generujesz tyle seedow az w ktoryms wylosuje kolege i podajesz ten seed
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
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
@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
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
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
Moim zdaniem lepsze to niż wrzucanie długości tablicy + stała wartość.
@croppz:
No i widac wtedy ze seed tez nie jest zmanipulowany(chociaz tak na prawde latwo zmanipulowc ;) )
jeśli dobrze rozumiem może
@LowcaG:
@LowcaG:
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:
@LowcaG:
Timestamp też jest spoko, jeżeli losowanie możesz zrobić tylko raz
a konkretniej
@croppz:
jest spoko
no