ZŁOŻONOŚĆ OBLICZENIOWA Wyzaczaie złożoości obliczeiowej dokładej i asymptotyczej Złożoość obliczeiowa algorytmów Chcemy podać miarodają oceę efektywości algorytmu, abstrahując od komputera, techiki (języka) programowaia, szczegółów techiczych implemetacji. W tym celu dążymy do podaia zależości fukcyjej wiążącej złożoość (pracochłoość) algorytmu z rozmiarem problemu. Dlatego defiiujemy astępujące pojęcia: Operacja podstawowa pozwala oceić złożoość czasową algorytmu, abstrahując od komputera i języka programowaia (czas wykoaia ie jest miarodajy). Na ogół jest to operacja wykoywaa ajczęściej (ajbardziej zagieżdżoa w strukturze algorytmu). Złożoość obliczeiową algorytmu wiążemy ze złożoością jego ajbardziej czasochłoego fragmetu. Rozmiar daych wejściowych Krotość wykoaia operacji podstawowej Z = f( Rozsądy i ierozsądy czas działaia W aalizie złożoości algorytmów mamy do czyieia z dwoma kategoriami fukcji wiążących rozmiar daych wejściowych z czasem wykoaia algorytmu. fukcje rozsąde (wielomiaowe) problemy algorytmicze łatwo rozwiązywale: lo,, lo,, 3, k fukcje ierozsąde (iewielomiaowe, wykładicze i poadwykładicze) problemy algorytmicze trudo rozwiązywale: lo,, 3, k,!, Mówimy tak mimo oczywistej względości tych problemów. Np. rozsądy algorytm k, k=0 ma gorszą złożoość obliczeiową iż ierozsądy algorytm k, k=1,05 dla rozmiaru problemu <334. Jedakże zawsze zajdziemy taką wartość graiczą rozmiaru problemu obliczeiowego, dla której algorytm trudo rozwiązywaly będzie rozwiązyway dłużej iż algorytm łatwo rozwiązywaly. Problem ułożeia 4 puzzli (x): (14)(4)(34)(44) = 4!4 4 = 6144 wariaty W ajgorszym przypadku dla puzzli jest do sprawdzeia!4 przypadków ( ilość puzzli) Problem ułożeia 9 puzzli (3x3): (14)(4)(34)... (84) (94) = 9!4 9 = 95 miliardów wariatów Gdyby puzzli było 5 (tylko 5x5) to do sprawdzeia będzie już: (14)(4)(34)... (44)(54) = 5!4 5 = liczba 41-cyfrowa
Rys. 1. Porówaie wartości osiągaych przez fukcje wielomiaowe i wykładicze Rys.. Porówaie wartości osiągaych przez fukcje wielomiaowe i wykładicze
Rzędy wielkości fukcji, rzędy złożoości obliczeiowej, symbole oszacowań asymptotyczych (otacja Ladaua) Poiższe otacje opisują asymptotycze zachowaie fukcji. a) Notacja duże O Określa ograiczeie fukcji od góry. Fukcja f( jest rzędu, gdy istieje dodatia wartość stałej c dla której począwszy od pewej wartości 0 wartości fukcji f( c. Zapisujemy to jako f(=o() (moża także używać zapisu f(o()) p: Rys. 3. Ograiczeie góre fukcji - otacja O( lo = O( lo) 3 +5+1 = O( 3 ) Zależość pomiędzy fukcjami f i g moża wyzaczyć obliczając graicę ich ilorazu: f( = O() gdy lim c 0 Notacja małe o Określa ograiczeie fukcji od góry. Fukcja f( jest rzędu, gdy istieje dodatia wartość stałej c dla której począwszy od pewej wartości 0 wartości fukcji f( < c. Zapisujemy to jako f(=o() p: = o( 1/ = o(1) Zależość pomiędzy fukcjami f i g moża wyzaczyć obliczając graicę ich ilorazu: f( = o() gdy lim 0 b) Notacja Określa ograiczeie fukcji od dołu. Fukcja f( jest rzędu, gdy istieje dodatia wartość stałej c dla której począwszy od pewej wartości 0 wartości fukcji f( c. Zapisujemy to jako f(=()
p: 3 = ( ) +1 = ( ) Rys. 4. Ograiczeie dole fukcji - otacja Zależość pomiędzy fukcjami f i g moża wyzaczyć obliczając graicę ich ilorazu: Notacja mała f( = () gdy lim g ( ) Określa ograiczeie fukcji od dołu. lub lim c 0 Fukcja f( jest rzędu, gdy istieje dodatia wartość stałej c dla której począwszy od pewej wartości 0 wartości fukcji f( > c. Zapisujemy to jako f(=() p: 3 = ( ) = ( l() Zależość pomiędzy fukcjami f i g moża wyzaczyć obliczając graicę ich ilorazu: c) Notacja f( = () gdy lim g ( ) Określa ograiczeie fukcji zarówo od dołu jak i od góry. Fukcja f( jest rzędu, gdy istieją takie dodatie wartości stałych c 1 i c dla których począwszy od pewej wartości 0 wartości fukcji f( c 1 i zarazem f( c. Zapisujemy to jako f(= () p: 3 3 + 5 = ( 3 ) (1+1/ = (1) Rys. 5. Ograiczeie góre i dole fukcji - otacja
Zależość pomiędzy fukcjami f i g moża wyzaczyć obliczając graicę ich ilorazu: f( = () gdy lim c 0 Rząd złożoości obliczeiowej jest ajważiejszym czyikiem określającym przydatość algorytmu. Podsumowując: dla f( = O() lim g ( ) dla f( = o() lim 0 dla f( = () lim 0 dla f( = () lim g ( ) dla f( = () 0 lim Wzajeme zależości otacji oszacowań asymptotyczych Tab. 1. Klasy fukcji opisujących złożoość obliczeiową algorytmów Klasa fukcji Typ fukcji Przykładowe fukcje subliiowa wielomiaowa f(=( c ) c>0 iewielomiaowa stała f(=o(1) polilogarytmicza f(=(1) i f(=(log c, c>0 liiowa f(=( quasi-liiowa f(=( i f(=o( log kwadratowa f(= ( ) superwielomiaowa f(=( c ) i f(=o(d ), c>0, d>1 wykładicza f(=(e ) i f(=o(f ) e>1, f>1 superwykładicza f(=(c ) c>1 si(, 1/ lolo), log (, 3(1+1/ lo, lolo), (-1)+3 lo, e, 3,!,
Fukcje polilogarytmicze spotyka się przy aalizie algorytmów rówoległych. Fukcje quasi-liiowe i kwadratowe określają złożoość obliczeiową algorytmów sortujących. Fukcje iewielomiaowe spotyka się przy rozwiązywaiu trudych problemów kombiatoryczych. Algorytmy iewielomiaowe są użytecze tylko dla bardzo małych wartości Właściwości relacji asymptotyczych Jeżeli f(=o() i = (h() to f(=o(h() Jeżeli f(= (p() i = (q() to f( = (p( q() Jeżeli f(=o() to f(+= () Jeżeli f(=o() i = (h() to f(+= (h() Kategorie złożoości Kategorie złożoości opisuje się otacją. Dowola fukcja ależąca do pewej kategorii fukcji może ją (kategorię) reprezetować. Na ogół kategorię fukcji reprezetuje ajprostsza fukcja ależąca do iej. Dlatego kategorię fukcji liiowych reprezetuje fukcja (. Właściwości rzędów wielkości fukcji f( = O() = (f() f( = () = (f() dowola fukcja ależąca do pewej kategorii fukcji może ją reprezetować Jeżeli a>1 i b>1 log a ( = (log b ( i kategorię tę możemy reprezetować przez fukcję (lo) wszystkie fukcje logarytmicze ależą do tej samej kategorii złożoości Jeżeli a>1 i b>1 a = o(b ) ie wszystkie fukcje wykładicze ależą do tej samej kategorii złożoości Dla każdego a>0 a = o(!) fukcja! jest gorsza obliczeiowo od dowolej fukcji wykładiczej Jeżeli c0 i d>0 oraz f( = O() i h( = () cf( + dh( = () Dla podstawowych kategorii złożoości: (lo), (, (lo), ( ), ( a ), ( b ), (c ), (d ), (!), ( ) b>a> i d>c>1 fukcja leżąca a prawo jest ograiczeiem górym kategorii sąsiediej z lewej stroy f l ( = o(g p ()
Wykorzystaie graic do określeia rzędu fukcji c to lim 0 to to reguła L Hospitala ( ), o( ) ( ) dla c 0 Jeżeli fukcje f( i są różiczkowale i ich pochode wyoszą f ( i g ( oraz jeżeli to Przykład: lim lim f '( lim lim g'( Czy f(= 3 l(=o( )? 3 l( l( 1 / lim lim lim lim lim 1 /( H 0 TAK Przykłady Przyspieszaie algorytmu badającego plaarość grafu Poiższa tabela prezetuje efekty polepszaia złożoości algorytmu, a co za tym idzie zmiay klasy fukcji opisującej jego złożoość. Tab.. Przykład postępu jaki dokoał się w dziedziie projektowaia algorytmów badaia plaarości grafu Rok opracowaia algorytmu Złożoość algorytmu Czas obliczeń dla grafu o =100 wierzchołkach 1930 O( 6 ) 35 lat 4 1963 O( 3 ) godz. 48 mi. 18 1967 O( ) 100 s 77 1971 O( lo) 7 s 643 1974 O( 1 s 6000 Rozmiar aalizowaego grafu możliwy do weryfikacji w czasie 1 miuty
Zwiększaie mocy komputerów a złożoość obliczeiowa Tab. 3. Wpływ poprawy szybkości komputerów a zwiększeie rozmiarów problemów algorytmiczych możliwych do rozwiązaia w zadaym czasie Moc obliczeiowa komputera 1Gflops (10 9 ), 1985 1 Tflops (10 1 ), 1997 1 Pflops (10 15 ), 008 1 sekuda 1godzia 1 rok złożoość obliczeiowa!!! s =3,110 4 s =9 s =1 g =1,810 6 g =41 g =15 r =1,710 8 r =54 r =18 3 s 1,33 s 1,17 s 3 g 1,4 g 1,13 g 3 r 1,18 r 1,11 r 1000 s 1,67 s 1,4 s 1000 g 1,48 g 1,33 g 1000 r 1,36 r 1,8 r wg listy TOP 500 (500 ajszybszych superkomputerów) MilkyWay ajszybszy superkomputer a świecie w czerwcu 014. Składa się z 48 000 koprocesorów Itel Xeo Phi oraz 3 000 procesorów Itel Xeo i działa ze szczytową wydajośc3ią 54,9 petaflopsów (54,9 biliarda operacji zmieoprzecikowych a sekudę) Suway ajszybszy superkomputer a świecie w czerwcu 016. Działa ze szczytową wydajością 15,4 petaflopsów (15,4 biliarda operacji zmieoprzecikowych a sekudę) Moc obliczeiowa komputera a typ fukcji złożoości algorytmu Tab. 4. Porówaie czasów obliczeń algorytmów: wielomiaowego i liiowego dla tego samego problemu wykoywaych a superkomputerze i komputerze domowym rozmiar problemu algorytm 1 wielomiaowy: 3 3 s (3 s dla problemu o rozmiarze =1) superkomputer złożoość obliczeiowa algorytmu czas obliczeń 10 3 s 0,1 s 100 3 ms 1 s 1000 3 s 10 s algorytm liiowy: 10 7 s (10 ms dla problemu o rozmiarze =1) 10 4 50 mi. 1 mi. 40 s komputer PC 10 6 95 lat godz. 47 mi.
Złożoość czasowa algorytmów operacja podstawowa pozwala oceić złożoość czasową algorytmu, abstrahując od komputera i języka programowaia (czas wykoaia ie jest miarodajy). Na ogół jest to operacja wykoywaa ajczęściej. rozmiar daych wejściowych pesymistycza złożoość obliczeiowa złożoość obliczeiowa dla ajgorszego przypadku wystąpieia daych wejściowych W( = max(t() ID (I jest elemetem zbioru daych o rozmiarze t( jest liczbą operacji wykoywaych przez algorytm a daych I optymistycza złożoość obliczeiowa złożoość obliczeiowa dla ajlepszego przypadku wystąpieia daych wejściowych w( = mi(t() oczekiwaa złożoość obliczeiowa bierzemy pod uwagę prawdopodobieństwo występowaia różych przypadków daych wejściowych. Często ajgorszy przypadek pojawia się bardzo rzadko. Dlatego istotiejsze jest rozważaie przypadku średiego. A( = p ( t( ID p( jest prawdopodobieństwem występowaia daych I Gdy W(=A( to algorytm jest iewrażliwy czasowo, a jego złożoość czasowa zależy tylko od rozmiaru daych. Przykład: Wyszukiwaie elemetu w tablicy operacja podstawowa: porówaie elemetu z koleją wartością w tablicy rozmiar daych wejściowych: pesymistycza złożoość obliczeiowa: W( = max( i) = = ( (ostati elemet) i1.. optymistycza złożoość obliczeiowa: w( = mi( ) = 1 = (1) (pierwszy elemet) i i 1.. oczekiwaa złożoość obliczeiowa: 1 1 1 ( 1) A( = p( t( = i = i = i1 i1 i 1 (średio połowa listy będzie przejrzaa) = 1 = (
Wrażliwość algorytmów Określa a ile fukcje W( i A( są reprezetatywe dla wszystkich daych wejściowych. wrażliwość pesymistycza (ajgorszego przypadku): ( = max(t(i 1 )-t(i )) I 1,I D wrażliwość oczekiwaa (średiego przypadku): ( = ( t( A( w p( ID ( jest odchyleiem stadardowym zmieej losowej w( jest wariacją zmieej losowej A( = p( t( jest oczekiwaą złożoością obliczeiową i1 Im większe wartości ( i (, tym day algorytm jest bardziej wrażliwy a dae wejściowe. Przykład c.d.: Wyszukiwaie elemetu w tablicy c.d. wrażliwość pesymistycza: ( = max(t(i 1 )-t(i )) = t(-t(1) = -1 (w ajgorszym przypadku elemet jest a ostatiej pozycji a liście, w ajlepszym przypadku jest a pierwszej pozycji a liście) wrażliwość oczekiwaa: ( = ( A( I D t p( 1 1 = i i1 1 = 0,9 1 1 algorytm jest wrażliwy a dae wejściowe Złożoość pamięciowa algorytmów Przez złożoość pamięciową defiiujemy liczbę komórek pamięci iezbędą do realizacji algorytmu. Dla większości problemów algorytmiczych złożoość pamięciowa ma miejsze zaczeie iż złożoość czasowa. Pamięć wykorzystywaą przez algorytm dzielimy a pamięć zawierającą dae wejściowe i pamięć dodatkową (pomociczą) wykorzystywaą przez algorytm do orgaizacji obliczeń. Jeżeli pamięć dodatkowa ie zależy od rozmiaru daych wejściowych to algorytm taki azywamy działającym w miejscu (i place).
Dla złożoości pamięciowej także moża mówić o: pesymistyczej złożoości pamięciowej złożoości pamięciowej ajgorszego przypadku oczekiwaej złożoości pamięciowej złożoości pamięciowej średiego przypadku Często dla różych wersji daego algorytmu złożoości czasowa i pamięciowa są do siebie odwrotie proporcjoale. Dla wielu problemów algorytmiczych istieje rówowaga pomiędzy złożoością czasową i pamięciową, tz. że moża zmiejszyć złożoość czasową kosztem zwiększeia zapotrzebowaia a pamięć i vice-versa.