You are on page 1of 24

Podstawy analizy algorytmw

Podstawy analizy algorytmw

Niech A i B bd dwiema macierzami n n, gdzie n = 2k Naszym celem jest obliczenie iloczynu A B, czyli obliczenie C=A B. Jak wiemy, mona to zrobi korzystajc ze wzoru:

cij = aik bkj


k =1

Podstawy analizy algorytmw

procedure MM(A: array[1..n, 1..n], B: array[1..n, 1..n], C: array[1..n, 1..n]) begin for i:=1 to n do for j:=1 to n do begin s:=0; for k:=1 to n do C[i, j]:=A[i, k] B[k, j] end end;

Podstawy analizy algorytmw

Jak atwo zauway, zoono procedury MM wynosi O(n3). Jednake, mona atwo zastosowa podejcie dziel i rzd, dzielc najpierw macierze A, B i C na wiartki wedug nastpujcego schematu:

[ ][ ] [ ]
A11 A12 A21 A22 B11 B12 B21 B22 C11 C12 = C21 C22
wtedy:

C11 = A11 B11 + A12 B21 C12 = A11 B12 + A12 B22 C 21 = A21 B11 + A22 B21 C 22 = A21 B12 + A22 B22

Podstawy analizy algorytmw

Przeanalizujmy podejcie rekurencyjne:

T ( n) = {

b 2 + 8T ( n / 2 ) cn

jeli n 2 jeli n > 2

Rozwizaniem tego jest ( nlog2 8 ) = O(n3)

Podstawy analizy algorytmw

Jednake gdybymy potrafili mnoy macierze 22 za pomoc siedmiu mnoe, to moglibymy zmniejszy zoono obliczeniow tego podejcia. Istotnie, w 1969 roku Strassen znalaz tak metod, ktra polega na tym, e najpierw oblicza si siedem podmacierzy wedug wzorw: P = (A11 + A22) (B11 + B22) Q = (A21 + A22 ) B11 R = A11 (B12 B22) S = A22 (B21 B11) T = (A11 + A12 ) B22 U = (A21 A11) (B11 + B12) V = (A12 A22) (B21 + B22)

Podstawy analizy algorytmw

Wwczas odpowiednie wiartki macierzy wynikowej C uzyskuje si wedug wzorw: C11 = P + S T + V C12 = R + T C21 = Q + S C22 = P + R Q + U

Podstawy analizy algorytmw

function Strassen (A, B : matrix, n : integer) : matrix; begin if n = 1 then Strassen : = A B else begin podziel A i B na wiartki; P := Strassen(A11 + A22, B11 + B22, n/2); Q := Strassen(A21 + A22, B11, n/2); R := Strassen(A11, B12 B22, n/2); S := Strassen(A22, B21 B11, n/2); T := Strassen(A11 + A12, B22, n/2); U := Strassen(A21 A11, B11 + B12, n/2); V := Strassen(A12 A22, B21 + B22, n/2); C11 := P + S T + V; C12 := R + T; C21 := Q + S; C22 := P + R Q + U; end end;

Podstawy analizy algorytmw

Niech M(n) bdzie liczb mnoe

M ( n) = {
wic

1 7 M ( n / 2)
log2 7

jeli n = 1 jeli n > 1


2 ,81

M ( n) = 7

log2 n

=n

Niech P(n) bdzie liczb dodawa/odejmowa

P ( n) = {
wic

0 7 P ( n / 2 ) +18 ( n / 2 )2

jeli n = 1 jeli n > 1

P ( n) = 6n

2 ,81

6 n = ( n
2

2 ,81

Podstawy analizy algorytmw

Jeli n 2k, to - dodawaj extra wiersz i kolumn zer, dopki rozmiar n nie jest potg dwjki - uywaj formu Strassena, dopki rozmiar n jest liczb parzyst - zrb kombinacj dwch powyszych metod W nastpnej tabeli przedstawiono porwnanie czasw dziaania niektrych algorytmw oraz czas dziaania programu pobranego z biblioteki numerycznej Accelerate. Podane wyniki stanowi redni czas potrzebny do pomnoenia jednej pary macierzy uzyskany po przeprowadzeniu testw na prbie 1000 mnoe.

Podstawy analizy algorytmw

n 4 8 16 32 64 128 256 512 1024

Klasyczny

Strassen 22

Laderman 33

Schachtel 55

Biblioteka Accelerate

0,00000020 0,00000107 0,00000876 0,00007103 0,00065287 0,00811008 0,12435434 1,9725893 30,44999922

0,00000070 0,00000450 0,00003330 0,00024207 0,00173469 0,01219385 0,08640348 0,61360008 4,33797648

0,00015698 0,00000543 0,00196764 0,01260100 0,00775826 0,11367774 1,74574790 1,75410508 *

0,00007786 0,00008110 0,00738846 0,00741664 0,76182570 0,76250788 0,76904912 *

0,00000104 0,00000206 0,00000640 0,00000600 0,00009294 0,00006971 0,00548670 0,03462430 0,27371900

* Przepenienie stosu

Tabela 8.1

Podstawy analizy algorytmw

Analiza stabilnoci numerycznej metod szybkiego mnoenia macierzy jest bardziej skomplikowana. Tym niemniej ustalono, e metoda SS nie jest stabilna. Najbardziej stabilna numerycznie jest metoda klasyczna zaimplementowana rekurencyjnie.
nn CW 22 33 44 55 5* 13* 26* 45 Liczba mnoe Do udoskonalenia SS 6* 21* 48 91 Znany 7 22 49 100 Klasyczny 8 27 64 125

(n 2,373 )

(n 2,81 )

Tabela 8.2

* Niemoliwe do uzyskania

Podstawy analizy algorytmw

(2,771=)log321 < log27(=2,807) < log322(=2,813) Strassen: Mnoenie macierzy wg Gaussa nie jest optymalne. Pan: Mnoenie macierzy wg Strassena nie jest optymalne. Obecnie najlepsze znane oszacowanie grne problemu mnoenia macierzy to O(n2,373) dziki Coppersmithowi i Winogradowi (1990) i Vassileskiej Williams (2011).

Podstawy analizy algorytmw

Podstawy analizy algorytmw

Algorytmy probabilistyczne (inaczej randomizowane) to takie, ktre do swojego dziaania uywaj losowoci. W praktyce oznacza to e implementacja takiego algorytmu korzysta przy obliczeniach z generatora liczb losowych.

Podstawy analizy algorytmw

Algorytm probabilistyczny moe, w przeciwiestwie do deterministycznego, wygenerowa rne wyniki dla tych samych podstawowych danych wejciowych (w szczeglnoci moe, w zalenoci od bitw losowych, rozwiza problem lub nie). Rwnie liczba operacji potrzebnych do zakoczenia dziaania algorytmu moe zmienia si w zalenoci od uytych bitw losowych. Te dwa aspekty implikuj dwie podstawowe klasy algorytmw probabilistycznych: Algorytmy Monte Carlo. W algorytmach tej klasy kadziemy nacisk na zminimalizowanie pesymistycznej (tj. dla dowolnych bitw losowych) zoonoci obliczeniowej, dopuszczajc z pewnym prawdopodobiestwem, e algorytm nie rozwie stawianego przed nim problemu.

Podstawy analizy algorytmw

Algorytmy Las Vegas. Algorytmy tego typu zawsze rozwizuj problem, przy zminimalizowanej oczekiwanej zoonoci obliczeniowej (tj. urednionej po wszystkich moliwych wartociach bitw losowych). Dopuszczamy jednak, by dla pewnych, rzadkich cigw bitw losowych pesymistyczny czas dziaania algorytmu by gorszy ni w przypadku rednim, a nawet gorszy ni w algorytmie deterministycznym. Podstawowa praktyczna rnica midzy dobrym algorytmem typu Las Vegas, a algorytmem deterministycznym polega na tym, e spodziewana zoono obliczeniowa dotyczy kadych moliwych danych wejciowych (nie ma pechowych danych moemy jedynie pechowo losowa).

Podstawy analizy algorytmw

Przykad: Dane: Cig A dugoci n skadajcy si z maych liter alfabetu aciskiego, przy czym wszystkie litery wystpuj w cigu tyle samo razy (kada litera n/26 razy). Zadanie: Poda dowoln pozycj w cigu, na ktrej wystpuje litera a. Oczywisty algorytm deterministyczny rozwizuje nasz problem w pesymistycznym czasie O(n), gdy moe by i tak, e wszystkie litery a s zgrupowane w drugiej poowie cigu. procedure FindAnyDeterministic(A, n); begin for i := 1 to n do if A[i] = a then return (i) end;

Podstawy analizy algorytmw

Moemy jednak stosunkowo atwo skonstruowa algorytm Monte Carlo, ktry dla dowolnego z gry ustalonego > 0 rozwie nasz problem z prawdopodobiestwem 1 w czasie O(m). procedure FindAnyMonteCarlo(A, n, m); begin for i := 1 to m do begin j := liczba losowa ze zbioru {1,,n}; if A[j] = a then return (j) end; return (fiasko) end; Powyszy algorytm ma pesymistyczn zoono obliczeniow O(m) i zapewnia sukces z prawdopodobiestwem 1(25/26)m.

Podstawy analizy algorytmw

Zatem: = (25/26)m log = mlog(25/26) m = log/log(25/26) = log/log(25/26) = log(1/)/log(26/25) Ustalmy . Przyjmujc


m=

log(1 / ) log( 26 / 25)

m 59 118 177 0,1 0,01 0,001

otrzymamy algorytm speniajcy powysze warunki.

Wartoci m wyznaczone dla kilku przykadowych prawdopodobiestw poraki zostay zebrane w tabeli 8.3 .

0,0001 235

Tabela 8.3

Podstawy analizy algorytmw

Dysponujc algorytmem Monte Carlo i potrafic sprawdzi, czy jego wykonanie zakoczyo si sukcesem, moemy pokusi si o skonstruowanie algorytmu Las Vegas. Konstrukcj tak mona przeprowadzi na dwa sposoby: 1. Wywoujemy algorytm Monte Carlo do skutku, a osigniemy sukces. Podejcie to ma jednak t wad, e pesymistyczny czas dziaania otrzymanego w ten sposb algorytmu Las Vegas nie daje si oszacowa. A to dlatego, e dla kadego N > 0 istnieje cig wyborw losowych, prowadzcy do wykonania przez nasz algorytm wicej ni N operacji.

Podstawy analizy algorytmw

2. Wady tej pozbawione jest drugie podejcie. Jeli dysponujemy algorytmem deterministycznym i algorytmem Monte Carlo oraz potrafimy sprawdzi, czy wykonanie algorytmu Monte Carlo koczy si sukcesem, to moemy stworzy algorytm Las Vegas (czsto bardzo efektywny) w nastpujcy sposb: wykonaj algorytm Monte Carlo jeli wykonanie zakoczyo si sukcesem, to koniec. W przeciwnym razie wykonaj algorytm deterministyczny.

Podstawy analizy algorytmw

Rozpatrzmy nastpujcy algorytm: procedure FindAnyLasVegas(A, n); begin v := FindAnyMonteCarlo(A, n, logn/log(26/25)); if v failure then return (v); return (FindAnyDeterministic(A, n)) end; W najgorszym przypadku czas wykonania algorytmu FindAnyMonteCarlo wynosi zatem O(logn). Oczekiwany czas wykonania FindAnyLasVegas dla =1/n szacuje si w zwizku z tym przez O((11/n)logn+n/n)=O(logn+1)=O(logn). Jeli chodzi o oszacowanie pesymistyczne, to w najgorszym wypadku bdziemy musieli wykona jednokrotnie obie procedury, czyli pesymistyczny czas wykonania algorytmu FindAnyLasVegas szacuje si przez W(n) = O(logn + n) = O(n).

KONIEC

You might also like