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

via Wykop Mobilny (Android)
  • 1
@Chodtok: musisz mieć źródło jakiejś losowej liczby (jej możesz użyć jako seed do właściwego losowania). Nie możesz sam wymyśleć losowej liczby, bo nie będzie losowa (będziesz mógł manipulować). Nie może zależeć od użytkowników, bo nie będzie losowa (użytkownicy będą mogli manipulować). Nie może to być godzina/data losowania, bo:
- jeśli będzie wcześniej znana to inni będą mogli przewidzieć wynik (będą mogli manipulować głosami),
- jeśli ty ją wybierzesz, to ty będziesz mógł spreparować
  • Odpowiedz
Nie może zależeć od użytkowników, bo nie będzie losowa (użytkownicy będą mogli losować)


hmmm no powiedzmy sobie szczerze że przy braniu hasza nicków użytkowników byłoby to co najmniej trudne albo wręcz niemożliwe (no bo nie da się przewidzieć czy w ostatniej chwili nie wskoczy ktoś kto diametralnie wszystko zmieni)
tak mi się wydaje

no ale brzmi bardzo sensownie to co mówisz i faktycznie wydaje się lepszym wyjściem z teoretycznego punktu widzenia
  • Odpowiedz
@Chodtok: no może hasze nicków w tym wypadku to nie jest złe rozwiązanie. Ale:
- jest bardzo ograniczone, bo tylko do tego zastosowania (tam gdzie nie masz możliwości pobrania czegoś takiego, to już tego nie zrobisz),
- w każdej chwili wszyscy będą mogli policzyć kto wygrywa (tzn. widzę jakie są nicki, biorę hasze i sprawdzam kto wygrał - jak mi się nie podoba, to cofam plusa, albo robię multi -
  • Odpowiedz
w każdej chwili wszyscy będą mogli policzyć kto wygrywa (tzn. widzę jakie są nicki, biorę hasze i sprawdzam kto wygrał - jak mi się nie podoba, to cofam plusa, albo robię multi - w ten sposób mogę doprowadzić do tego, że kto kogo nie lubię nie wygra nigdy).


hmmm no jakiś niekombinator albo dziesięciu zawsze może zagłosować w ostatniej sekundzie zmieniając wszystko

no ale zgadzam się że twój pomysł jest sporo lepszy
  • Odpowiedz
no ale w sumie to tak, jeśli by się odpowiednio postarać pewnie dałoby się prowadzić w aukcji i mieć jakieś tam szanse na wygraną o ile tylko nikt do końca jej trwania nie przebije oferty
tzn bez żadnej gwarancji ale jednak w jakiś tam sposób wpłynąć na swoje szanse

@mk321:
  • Odpowiedz
@Chodtok: @mk321: ma rację, tak na prawdę sprawa sprowadza się tylko i wyłącznie do weryfikowalnego seeda, który najlepiej jak by można było dowiedzieć się dopiero po jakimś czasie i najlepiej aby "gracze , czyhli po zamknięciu listy, ale oczywiśćie przed losowaniem.

Hashe nicków są ok, ale w sumie dość kłopotliwe bo użytkownicy wpływają na wynik.

Czyli trzeba tylko wymyślić co to za rzecz, teoretycznie pełno jest takich
  • Odpowiedz