POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Algorytmy i Struktury Danych www.pk.edu.pl/~zk/AISD_HP.html Wykładowca: dr inż. Zbigniew Kokosiński [email protected] Wykład 8: Generacja liczb losowych • • • • • • • Problem generacji liczb losowych Liczby losowe a pseudolosowe Zastosowania generatorów liczb losowych Metody programowej generacji liczb losowych Przykłady obliczeniowe Statystyczna ocena jakości generatorów Metody sprzętowej generacji liczb losowych Problem generacji liczb losowych Związki pomiędzy rozkładami liczb losowych Liczby pseudolosowe (J. von Neumann) Metoda środka kwadratu (von Neumann, 1946) Uwaga: niektóre sekwencje degenerują się do zer lub cykli, podczas gdy inne są zadowalające. Wniosek: metoda generacji musi być dobrana starannie, a nie przypadkowo. Metoda środka kwadratu - przykład . .. Xi= X i^2 = X i+1 = X i+1^2= X i+2 = X i+2^2= X i+3 = X i+3^2= X i+4 = X i+4^2= || 3967 || || 15|7370|89 || || 7370 || || 54|3169|00 || || 3169 || || 10|0425|61 || || 0425 || || 00|1806|25 || || 1806 || || 03|2616|36 || ... Zastosowania liczb pseudolosowych Algorytmy randomizowane Algorytmy randomizowane (probabilistyczne) to algorytmy wykorzystujące pewien mechanizm losowy. Najcześciej jest to generator liczb pseudolosowych. Zachowanie algorytmu zależy od dodatkowego strumienia losowych danych wejściowych. Algorytm ma osiągnąć lepszą jakość (zwykle krótki czas obliczeń) w średnim przypadku. Prawdopodobieństwo wystąpienia najgorszego przypadku jest znikomo małe. Przykład: Algorytm sortowania QuickSort działa w średnim przypadku w czasie O(n), chociaż czas najgorszego przypadku to O(n^2). Losowe “przetasowanie” danych wejściowych praktycznie eliminuje najgorszy przypadek. Algorytm Monte Carlo Algorytm MC należy do klasy algorytmów randomizowanych zawierających mechanizm losowego próbkowania. Przykład: gra w statki. Losowe próbkowanie jest efektywniejsze niż systematyczne przeszukiwanie obszaru. Algorytm MC jest stosowany w przypadku, gdy z jakiegoś względu nie jest możliwe albo dopuszczalne zastosowanie algorytmu deterministycznego. MC może dać odpowiedź niepoprawną, jednak prawdopodobieństwo błędu można dowolnie zmniejszyć poprzez niezależne powtarzanie algorytmu. Algorytm Las Vegas Algorytm LV należy do klasy algorytmów randomizowanych, które nigdy nie dają niepoprawnego wyniku. Algorytm nie “ryzykuje” poprawnością wyniku, “hazardowi” podlegają tylko zasoby wykorzystywane w obliczeniach. Przykład: randomizowany algorytm QuickSort daje zawsze poprawny wynik sortowania, chociaż element podziałowy (pivot) jest w nim generowany losowo. Algorytm LV zawsze daje poprawną odpowiedź, albo informuje o błędzie. Różny, chociaż skończony, jest tylko czas działania. Jest to główna różnica pomiędzy algorytmami LV i RC. Elementarne metody generacji Metoda środka kwadratu (von Neumann, 1946) Liniowa metoda kongruencyjna (D.H. Lehmer, 1949) Kwadratowa metoda kongruencyjna (uogólnienie) Kwadratowa metoda kongruencyjna (wariant R.R. Conveyou) • Addytywna metoda kongruencyjna (G.J. Mitchel, D.P. Moore, 1958) • Liniowa kombinacja - metoda kongruencyjna (uogólnienie) • • • • Złożone metody generacji (zwiększające losowość) • Metoda tasowania z dwoma sekwencjami losowymi (M.D. MacLaren, G. Marsaglia, 1968) • Metoda tasowania z jedną sekwencją losową (C. Bays, S.D. Durham, 1976) Uwaga: druga z powyższych metod jest lepsza niż pierwsza Arytmetyka modularna Arytmetyka modularna Liniowa metoda kongruencyjna Liniowa metoda kongruencyjna – dobór współczynników i wartości początkowej Liniowa metoda kongruencyjna – dobór współczynników i wartości początkowej Liniowa metoda kongruencyjna – rozkłady wybranych liczb (w–1) i (w+1) na czynniki pierwsze, gdzie: w – długość słowa maszynowego jako potęga o podstawie 2 Liniowa metoda kongruencyjna generowanie losowych liczb ułamkowych Kwadratowa metoda kongruencyjna Kwadratowa metoda kongruencyjna dobór współczynników Kwadratowa metoda kongruencyjna wariant R.R, Coveyou Addytywna metoda kongruencyjna Addytywna metoda kongruencyjna - algorytm Addytywna metoda kongruencyjna rekomendowane pary liczb Addytywna metoda kongruencyjna - przykład Niech n=6, m=8, wybrana para liczb to (2,5). [X(0), ... ,X(5)]=[2,5,1,7,4,3]. Generowana według wzoru X(n)=[X(n-2)+X(n-5)] mod8 sekwencja liczb losowych X(6) ... X(29) - jest następująca: [140071313043565207640472]. Początkowe wartości komórek pamięci Y[1] ... Y[6] oraz indeksów w algorytmie są równe : Y=[3 4 7 1 5 2], i=2, j=5. Kolejne kroki: Y=[3 4 7 1 5 1], i=1, j=4 Y=[3 4 7 1 4 1], i=6, j=3 Y=[3 4 7 0 4 1], i=5, j=2 Liniowa kombinacja - metoda kongruencyjna Metoda tasowania z jedną sekwencją losową Tasowanie z jedną sekwencją losową- przykład Dana jest sekwencja losowa z poprzedniego przykładu, generowana według wzoru X(n)=[X(n-2)+X(n-5)] mod8 : X=[251743140071313043565207640472]. Niech k=7 oraz V=[X(0) ... X(k-1)]=[2517431], Y=X(k)=4. m=8 Kolejne kroki: j=3, Y=V(3)=7 wyprowadź 7,V=[2514431] j=6, Y=V(6)=1 wyprowadź 1,V=[2514430] j=0, Y=V(0)=2 wyprowadź 2,V=[0514430] j=1, Y=V(1)=5 wyprowadź 5,V=[0714430] j=4, Y=V(4)=4 wyprowadź 4,V=[0714130] Wygenerowana sekwencja wyjściowa to 71254 ... Testowanie losowości metodą chi-kwadrat Testowanie losowości - przykład Niech r=100, N=1100, N/r=11, sqrt(r)=sqrt(100)=10 (spełniony jest warunek 1100=N≥10r=1000) Niech 30 wartości z przedziału [0, 99] występuje z częstotliwością f =11, 20 z f = 12, po 15 z f = 13 oraz f = 10, 5 z f = 9, 10 z f = 14. (spr.: 30*11+20*12+15*13+15*10+5*9+10*14=1100) chi-kwadrat = (30*0+20*1+15*(4+1)+5*4+10*9)/11= = (0+20+75+20+90)/11=205/11=18.64≤20 Wniosek: ponieważ chi-kwadrat ≤ 2sqrt(r) - test wypadł pozytywnie. Generatory sprzętowe – rejestr LFSR (Linear Feedback Shift Register) Rejestr przesuwający z liniowym sprzężeniem zwrotnym (LSFR) powstaje z n-bitowego rejestru przesuwającego (SR), w którym zastosowano jeden z dwóch typów sprzężenia: wewnętrzne lub zewnętrzne (na rys. pokazano rejestry 4-bitowe z wektorem sprzężenia c = 10011, FF (Flip-Flop) - oznacza element pamięci ). Dla sprzeżenia wewnetrznego sygnał z wyjścia ostatniego FF jest podawany na wejścia FF wskazanych w wektorze c (ostatnia wartość c zawsze równa 1). Dla sprzeżenia zewnetrznego sygnał na wejście pierwszego FF jest podawany z wyjść FF wskazanych w wektorze c (pierwsza wartość c zawsze równa 1). Generatory sprzętowe – rejestr LFSR Sekwencja binarna generowana przez LSFR jest okresowa, a okres zależy od stanu początkowego rejestru i struktury sprzężenia zwrotnego. Generatory wytwarzające sekwencję o maksymalnej długości mają okresy równe: 1, dla stanu początkowego 00 ... 0 (2^n) – 1, dla każdego innego stanu początkowego Generator na rejestrze LFSR - przykład Dany jest generator LFSR jak na rysunku. Stan początkowy rejestru to 1 0 1 1. Generator wytwarza na wyjściu okresową sekwencję binarną o maksymalnej długości równej (2^4)-1=15 : 1 1 0 1 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 ... Źródła tablic, wzorów i rysunków: 1. Knuth D.E. : Sztuka programowania. Tom 2. Algorytmy seminumeryczne, WN-T ,Warszawa 2002. 2. Sedgewick R. : Algorithms, Addison-Wesley, 1988. 3. Wieczorkowski R., Zieliński R. : Komputerowe generatory liczb losowych, WN-T, Warszawa 1997.