2010-10-12 7 views
20

Czy są jakieś pseudolosowe generatory liczb, które są dość łatwe do zrobienia z arytmetyką umysłową, czy arytmetyką umysłową plus liczenie na palcach. Oczywiście ogranicza to do dość prostej matematyki - musi to być coś, co może zrobić przeciętny człowiek z umiejętnościami matematycznymi, a może przeciętna zdolność programisty, a nie cud matematyki.Czy generator liczb pseudolosowych jest wystarczająco prosty do zrobienia w twojej głowie?

Najprostszym, jaki znalazłem, jest Middle square method, ale nie tylko jest on znany jako kiepskie źródło przypadkowości, ale wciąż wygląda na zbyt skomplikowany, aby obejść się bez ołówka i papieru.

Jeśli jedynym sposobem, aby to zrobić, jest ograniczenie zakresu, tak jak może to tylko wyjście z 8-bitowych liczb, to jest w porządku. Podejrzewam, że jeden ze standardowych algorytmów PRNG byłby wystarczająco prosty w wersji 8-bitowej, ale nie wiem wystarczająco dużo, aby uprościć którąkolwiek z nich od wersji 32-bitowej do wersji 8-bitowej. (Wszystkie te, na które patrzę, zależą od specjalnie wybranych numerów nasion, które różnią się w zależności od liczby bitów, z którymi pracujesz, i zazwyczaj podano tylko przykłady 32- i 64-bitowe.)

+14

Krok 1. Pomyśl o pierwszym numerze, który pojawi się w twojej głowie. ;-) –

+4

@Mike Deck: Zrobiłem, a dostałem 6275182149295802584461. Potrzebuję trochę snu. – BoltClock

+4

Myślenie o pierwszej liczbie, która pojawia się w twojej głowie, ma słabą funkcję dystrybucji. Na przykład 7 i 17 są znacznie częstsze niż inne liczby. http://scienceblogs.com/cognitivedaily/2007/02/is_17_the_most_random_number.php – LeBleu

Odpowiedz

14

A linear feedback shift register jest dość prosty, o ile dobrze ci się myśli w trybie binarnym (a może heks, ponieważ łatwo jest mapować między nimi).

Bardziej złożona to Xorshift, ale jeśli znasz operacje na bitach, powinna być możliwa również praca z nimi.

2

W twojej głowie możesz zrobić "semantyczny" generowanie losowej liczby :-)

Podobnie jak przy losowym słowie i obliczaniu niektórych metryk, powtarzaj, aż otrzymasz numer o rozsądnej długości.

Na przykład słowo "ćwiczenie" może zostać przekonwertowane na 10100101b (możesz zobaczyć mój pomysł na konwersję tutaj).

35

pseudolosowych (according to Dilbert):

Dilbert Cartoon of 2001-10-25

+3

Więc mówisz "myśl o 9"? –

+4

Nie, cokolwiek robisz, nie myśl o 9. – Hans

+2

Zastanawiałem się, czy wstępnie połączyć ten i komiks xkcd w moim pytaniu ... zgaduję, że powinienem mieć – LeBleu

3

Jak o Blum Blum Shub, ale ze zbyt małych liczb dla bezpiecznego użytkowania? Używana bezpiecznie jest powolna, ale wymaga operacji, z którymi jesteśmy przyzwyczajeni, abyś mógł osiągnąć łatwą do opanowania prędkość bez zbytniej praktyki, może z M = 437 lub umiarkowanie większym.

Wątpię, czy cokolwiek, co mógłbym zrobić w mojej głowie, będzie bezpieczne. Po prostu nie pamiętam wystarczająco dużych liczb, żeby pracować bezbłędnie w rozsądnie dużych rozmiarach.

Można łatwo zrobić 10 bit LFSR na palcach, jeśli masz przyzwoite ścięgna ;-)

Nie bezpośrednia odpowiedź, ale w zależności dlaczego pytasz może być zainteresowany w Solitaire, który generuje Strumień klucza (tj. sekwencja pseudolosowa) za pomocą talii kart. Nie da się tego zrobić w głowie, ale nie wymaga ołówka i papieru.

+0

Nie sądzę, że Blum Blum Shub jest wystarczająco losowy z małymi dzielnikami ... M = 437 daje okres 31 lub mniej. Również pierwsze kilka liczb to zawsze kwadraty nasienia, chyba że używasz dużego nasienia. – LeBleu

+0

@LeBleu: Wystarczająco uczciwie - oczywiście nie wiem, ile numerów potrzebujesz. Jak mówię, nie sądzę, żebym był wystarczająco dobry w arytmetyce umysłowej, by ocenić dobry PRNG, więc musisz albo być lepszym ode mnie, albo zdecydować, jak zły RNG jesteś w stanie zaakceptować ;-) –

0

Tak, znam jedną, która może być wykonana w twojej głowie, a jeśli zmodyfikowana dalej może spowodować, że prawdziwie losowe liczby przyjmą listę liczb, uporządkowana lista liczb w bazie dziesiętnej spowoduje, że będzie to najłatwiejsze do obliczenia w.Dodaj je razem, zachowaj tylko jedną cyfrę, umieść numer wynikowy, a następnie umieść go na końcu listy i upuść pierwszą cyfrę, a następnie powtórz, nie wygeneruje prawdziwych liczb losowych, ale losowo wystarczy i w zależności na rozmiarze listy numerów, które wybierzesz, ostatecznie się powtórzy, ale dla dużej listy początkowej nie będzie powtarzać się przez wystarczająco długi czas.

na przykład, jeśli użyłem tylko 5 liczb w liście 12345, następna lista będzie miała 2345, a cyfra po prawej stronie 1 + 2 + 3 + 4 + 5ie 15 lub 5, więc lista będzie 23455 teraz ta ma odpadł i nie jest już używany, więc kolejna suma wynosi do 20 -1 (15 + 5 minus ta, która odpadła), więc następna lista będzie wynosić 34559, następnie 45596, następnie 55969, a następnie 59694 teraz zatrzymamy się, ponieważ wygenerowaliśmy pełne liczby cyfr, więc początkowo mieliśmy 12345.

Dla następnego nasiona mamy 59694, teraz jest pewien rodzaj skrótu, który można również użyć po obliczeniu pełnego materiału siewnego lub samego skrótu być użyty, czyli wziąć ostatnią cyfrę, pomnożyć ją przez 2 i odjąć pierwszą cyfrę podwojenie jednej cyfry łatwo zrobić w głowie, ważne chodzi o to, aby zapamiętać wszystkie pozostałe cyfry i ich kolejność w kolejności, ale w najlepszym przypadku będzie to tylko liczba pseudolosowa, z kilkoma długimi czasami powtarzania, im większa lista liczb, których używasz, ale lista początkowa musi być wybrana za pomocą uważaj, na przykład, nie wybieraj wszystkich zer w liście lub będziesz mieć nieskończony strumień zer i dobrze, że niektóre zestawy cyfr spowodują dłuższe powtarzanie cykli niż inne (ale może to powinno być zrobione na papierze pod warunkiem, że masz ołówek lub długopis i kartkę papieru ... :) mam nadzieję, że to pomoże .. (zmodyfikowane trochę to sprawia, że ​​początek bardzo dobrego generatora liczb losowych) cieszą ...

Mam nadzieję, że to lepiej, jeśli nie powiedz mi tak :) (Nigdy nie byłem zbyt dobry w angielskim! :)

+2

zajrzyj do [pomocy formatowania] (http://stackoverflow.com/editing-help). To tylko jedna wielka ściana tekstu :) – oers

+0

o pomoc w formatowaniu tego nie widziałem, gdzie to jest? Przepraszam za tę ścianę tekstu, nieważne, jak jest sformatowany, ważne informacje są w nim .. Sądzę, że byłem tak bardzo zaniepokojony błędami ortograficznymi, że zaniedbałem formatowanie tego w bardziej czytelny sposób, przepraszam. –

+0

To jest Yellow-Box z? w tym. Nad polem odpowiedzi. Ale proszę sformatuj swój tekst. Jest to bardzo trudne do odczytania, a to sprawia, że ​​prawie niemożliwe jest zrozumienie zawartych w nim informacji. To, jak wygląda odpowiedź, bardzo wpływa na jej akceptację przez społeczność. – oers

-2

Najprostszym sposobem jest wygenerowanie kilku liczb, które przychodzą ci do głowy, a następnie sumowanie i modyfikowanie 10 cyfr. Im więcej liczb dodasz, tym bardziej losowy i mniej tendencyjny będzie.

510932 
689275 
539108 
====== 
628205 
+0

Niezły punkt, jakkolwiek jest stronnicze, ponieważ generuje funkcję monotoniczną, ponieważ A + B> = A. – Lourenco

2

Jest to dość prosty i powinien zmieścić się w większości ludzkich głowach:

  1. start z liczbą nasion trzycyfrowym (znalezienie odpowiedniego materiału siewnego może być trudniejszy problem).
  2. Pomnóż to przez dziewięć.
  3. Oddziel czwartą cyfrę od dolnej trzeciej i dodaj dwie liczby do nowej trzycyfrowej liczby.
  4. Zapisz te cyfry. Aby pomóc w ukryciu wzoru, możesz zapisać tylko jedną lub dwie cyfry.
  5. Powtórz 2-4 zgodnie z wymaganiami.

Dopóki nie rozpoczniesz od zera, spowoduje to iterację przez okres 4500 wyników. Dane wyjściowe nie "wyglądają" losowo, ale są one dziesiętne, a nawet prawdziwe przypadkowe wyniki nie wyglądają losowo, dlatego ludzie suck na to zadanie.

Mogę spróbować zhakować program, aby przekonwertować go na plik binarny w sposób bezstronny, aby go przetestować.

alternatywne konfiguracje

  • trzech cyfr, pomnożyć przez 3
  • czterech cyfr i mnożąc przez 6
  • pięć cyfr i mnożąc przez 2
-1

Jeżeli algorytm non deterministyczne są dozwolone twoje oczy są w twojej głowie, więc co z czymś takim jak "liczba czerwonych obiektów przede mną plus liczba niebieskich rzeczy modulo liczba zielonych rzeczy plus wysokość najwyższy stos rzeczy zawierających co najmniej jedną rzecz z literami g i dużymi literami A. "

Jestem pewien, że jest sposób na zrobienie tego, co byłoby dość przypadkowe.

+0

Nie mam problemu z niedeterministycznymi algorytmami, ale niestety istnieje również wiele sposobów na zrobienie tego, które byłoby dość przewidywalne, takie jak jako wysoce zależny od częstotliwości liter w twoim ojczystym języku. Podany przykład dałby tylko jedną losową liczbę dla danego widoku, a gdyby dwie osoby obok siebie użyły go, prawdopodobnie otrzymaliby ten sam numer. – LeBleu

+0

Nie myślałem o tym. Może dodać swoje imię i wiek? Kwestia jednego numeru jest nadal bardzo ważna. – EternityForest

Powiązane problemy