[ Pobierz całość w formacie PDF ]
.W przypadku zÅ‚ożonoÅ›ci O(lg(n)) prawdopodobnie bÄ™dziemymusieli poczekać 3 sekundy.ZÅ‚ożoność O(n) oznacza liniowy wzrost do 10 se-kund, a wykonywanie algorytmu o zÅ‚ożonoÅ›ci O(n lg(n)) zajęłoby okoÅ‚o 33 sekun-dy.JeÅ›li nie mamy tyle szczęścia i nasza funkcja cechuje siÄ™ zÅ‚ożonoÅ›ciÄ… O(n2),musimy przygotować siÄ™ na oczekiwanie przez okoÅ‚o 100 sekund.A jeÅ›li po-sÅ‚ugujemy siÄ™ algorytmem o zÅ‚ożonoÅ›ci wykÅ‚adniczej O(2n), możemy spokojnieprzystÄ…pić do parzenia kawy nasza funkcja powinna zakoÅ„czyć dziaÅ‚aniepo 10 263 latach.Wydaje siÄ™, że ludzkość nie ma tyle czasu.Notacja O() nie musi być stosowana tylko dla czasu równie dobrze można jejużywać do reprezentowania dowolnych innych zasobów używanych przez algo-rytm.Notacji O() czÄ™sto używa siÄ™ do modelowania poziomu wykorzystania pa-miÄ™ci (patrz ćwiczenie 35.na koÅ„cu tego podrozdziaÅ‚u).196 uð RozdziaÅ‚ 6.Kiedy kodujemy&Szacowanie zdroworozsÄ…dkowePrzybliżonÄ… zÅ‚ożoność wielu prostych algorytmów możemy szacować, posÅ‚u-gujÄ…c siÄ™ wyÅ‚Ä…cznie intuicjÄ… i zdrowym rozsÄ…dkiem.lð Proste pÄ™tle.JeÅ›li prosta pÄ™tla wykonuje od 1 do n-tej iteracji, zÅ‚ożonośćcaÅ‚ego algorytmu najprawdopodobniej wynosi O(n) czas jego wykony-wania roÅ›nie liniowo wraz z wartoÅ›ciÄ… n.Do typowych przykÅ‚adów należywyczerpujÄ…ce wyszukiwanie, odnajdywanie wartoÅ›ci maksymalnej w ta-blicy oraz generowanie sum kontrolnych.lð PÄ™tle zagnieżdżone.JeÅ›li zagnieżdżamy jednÄ… pÄ™tlÄ™ w innej pÄ™tli, otrzy-mujemy algorytm o zÅ‚ożonoÅ›ci O(m×n), gdzie m oraz n to liczby iteracji obupÄ™tli.Taka sytuacja czÄ™sto ma miejsce w prostych algorytmach sortujÄ…-cych (na przykÅ‚ad w algorytmie sortowania bÄ…belkowego), gdzie pÄ™tlazewnÄ™trzna przeszukuje wszystkie elementy tablicy, a pÄ™tla wewnÄ™trznaokreÅ›la, gdzie należy umieszczać każdy z tych elementów w posortowanejtablicy wynikowej.Takie algorytmy sortujÄ…ce zwykle majÄ… zÅ‚ożoność O(n2).lð Przeszukiwanie dwudzielne.JeÅ›li nasz algorytm dzieli na pół zbiór ele-mentów w każdym przebiegu pÄ™tli, zÅ‚ożoność tego kodu najprawdopo-dobniej jest logarytmiczna i wynosi O(lg(n)) (patrz ćwiczenie 37.na koÅ„cutego podrozdziaÅ‚u).TakÄ… zÅ‚ożonoÅ›ciÄ… cechuje siÄ™ wyszukiwanie binarnena posortowanej liÅ›cie oraz odnajdywanie pierwszego ustawionego bituw sÅ‚owie maszynowym.lð Dziel i zwyciężaj.Algorytmy, które dzielÄ… swoje dane wejÅ›ciowe i pracujÄ…niezależnie na dwóch poÅ‚owach, po czym Å‚Ä…czÄ… wyniki, osiÄ…gajÄ… zÅ‚ożonośćO(n lg(n)).Klasycznym przykÅ‚adem jest algorytm sortowania szybkiego,który dzieli dane na dwie poÅ‚owy i rekurencyjnie sortuje każdÄ… z nich.Mimo że formalnie wciąż mamy do czynienia z algorytmem O(n2), w prak-tyce algorytm dziaÅ‚a szybciej, kiedy otrzymuje posortowane dane wejÅ›cio-we, zatem Å›rednia zÅ‚ożoność sortowania szybkiego wynosi O(n lg(n)).lð Algorytmy kombinatoryczne.Każdy algorytm poszukujÄ…cy permuta-cji oznacza ryzyko utraty kontroli nad czasami wykonywania.Problemw tym, że liczba permutacji jest równa silni liczby elementów (istnieje5! = 5×4×3×2×1 = 120 permutacji cyfr od 1 do 5).Oznacza to, że czaspotrzebny do przetworzenia przez algorytm kombinatoryczny piÄ™ciuelementów wydÅ‚uży siÄ™ 6-krotnie w przypadku szeÅ›ciu elementów oraz42-krotnie w przypadku siedmiu elementów.Tego rodzaju algorytmystosuje siÄ™ do rozwiÄ…zywania trudnych obliczeniowo problemów, jakproblem komiwojażera, problem optymalnego rozmieszczania zawartoÅ›cikontenera, dzielenie zbioru liczb tak, aby suma elementów w każdympodzbiorze byÅ‚a identyczna itp.CzÄ™sto stosuje siÄ™ algorytmy heurystycz-ne, które pozwalajÄ… skrócić czas wykonywania tych algorytmów w kon-kretnych dziedzinach problemu.Szybkość algorytmu tð 197Szybkość algorytmu w praktyceTrudno oczekiwać, aby pisanie funkcji sortujÄ…cych miaÅ‚o zająć istotnÄ… częśćnaszej kariery.RozwiÄ…zania zaimplementowane już w dostÄ™pnych bibliotekachprawdopodobnie oferujÄ… wyższÄ… wydajność niż jakikolwiek kod, który mogli-byÅ›my napisać w rozsÄ…dnym czasie.Okazuje siÄ™ jednak, że podstawowe rodzajealgorytmów, które opisaliÅ›my wczeÅ›niej, w różnych formach przewijajÄ… siÄ™w pracy każdego programisty.Za każdym razem, gdy piszemy prostÄ… pÄ™tlÄ™,możemy być pewni, że zÅ‚ożoność tego algorytmu wyniesie O(n) [ Pobierz caÅ‚ość w formacie PDF ]
zanotowane.pl doc.pisz.pl pdf.pisz.pl odbijak.htw.pl
.W przypadku zÅ‚ożonoÅ›ci O(lg(n)) prawdopodobnie bÄ™dziemymusieli poczekać 3 sekundy.ZÅ‚ożoność O(n) oznacza liniowy wzrost do 10 se-kund, a wykonywanie algorytmu o zÅ‚ożonoÅ›ci O(n lg(n)) zajęłoby okoÅ‚o 33 sekun-dy.JeÅ›li nie mamy tyle szczęścia i nasza funkcja cechuje siÄ™ zÅ‚ożonoÅ›ciÄ… O(n2),musimy przygotować siÄ™ na oczekiwanie przez okoÅ‚o 100 sekund.A jeÅ›li po-sÅ‚ugujemy siÄ™ algorytmem o zÅ‚ożonoÅ›ci wykÅ‚adniczej O(2n), możemy spokojnieprzystÄ…pić do parzenia kawy nasza funkcja powinna zakoÅ„czyć dziaÅ‚aniepo 10 263 latach.Wydaje siÄ™, że ludzkość nie ma tyle czasu.Notacja O() nie musi być stosowana tylko dla czasu równie dobrze można jejużywać do reprezentowania dowolnych innych zasobów używanych przez algo-rytm.Notacji O() czÄ™sto używa siÄ™ do modelowania poziomu wykorzystania pa-miÄ™ci (patrz ćwiczenie 35.na koÅ„cu tego podrozdziaÅ‚u).196 uð RozdziaÅ‚ 6.Kiedy kodujemy&Szacowanie zdroworozsÄ…dkowePrzybliżonÄ… zÅ‚ożoność wielu prostych algorytmów możemy szacować, posÅ‚u-gujÄ…c siÄ™ wyÅ‚Ä…cznie intuicjÄ… i zdrowym rozsÄ…dkiem.lð Proste pÄ™tle.JeÅ›li prosta pÄ™tla wykonuje od 1 do n-tej iteracji, zÅ‚ożonośćcaÅ‚ego algorytmu najprawdopodobniej wynosi O(n) czas jego wykony-wania roÅ›nie liniowo wraz z wartoÅ›ciÄ… n.Do typowych przykÅ‚adów należywyczerpujÄ…ce wyszukiwanie, odnajdywanie wartoÅ›ci maksymalnej w ta-blicy oraz generowanie sum kontrolnych.lð PÄ™tle zagnieżdżone.JeÅ›li zagnieżdżamy jednÄ… pÄ™tlÄ™ w innej pÄ™tli, otrzy-mujemy algorytm o zÅ‚ożonoÅ›ci O(m×n), gdzie m oraz n to liczby iteracji obupÄ™tli.Taka sytuacja czÄ™sto ma miejsce w prostych algorytmach sortujÄ…-cych (na przykÅ‚ad w algorytmie sortowania bÄ…belkowego), gdzie pÄ™tlazewnÄ™trzna przeszukuje wszystkie elementy tablicy, a pÄ™tla wewnÄ™trznaokreÅ›la, gdzie należy umieszczać każdy z tych elementów w posortowanejtablicy wynikowej.Takie algorytmy sortujÄ…ce zwykle majÄ… zÅ‚ożoność O(n2).lð Przeszukiwanie dwudzielne.JeÅ›li nasz algorytm dzieli na pół zbiór ele-mentów w każdym przebiegu pÄ™tli, zÅ‚ożoność tego kodu najprawdopo-dobniej jest logarytmiczna i wynosi O(lg(n)) (patrz ćwiczenie 37.na koÅ„cutego podrozdziaÅ‚u).TakÄ… zÅ‚ożonoÅ›ciÄ… cechuje siÄ™ wyszukiwanie binarnena posortowanej liÅ›cie oraz odnajdywanie pierwszego ustawionego bituw sÅ‚owie maszynowym.lð Dziel i zwyciężaj.Algorytmy, które dzielÄ… swoje dane wejÅ›ciowe i pracujÄ…niezależnie na dwóch poÅ‚owach, po czym Å‚Ä…czÄ… wyniki, osiÄ…gajÄ… zÅ‚ożonośćO(n lg(n)).Klasycznym przykÅ‚adem jest algorytm sortowania szybkiego,który dzieli dane na dwie poÅ‚owy i rekurencyjnie sortuje każdÄ… z nich.Mimo że formalnie wciąż mamy do czynienia z algorytmem O(n2), w prak-tyce algorytm dziaÅ‚a szybciej, kiedy otrzymuje posortowane dane wejÅ›cio-we, zatem Å›rednia zÅ‚ożoność sortowania szybkiego wynosi O(n lg(n)).lð Algorytmy kombinatoryczne.Każdy algorytm poszukujÄ…cy permuta-cji oznacza ryzyko utraty kontroli nad czasami wykonywania.Problemw tym, że liczba permutacji jest równa silni liczby elementów (istnieje5! = 5×4×3×2×1 = 120 permutacji cyfr od 1 do 5).Oznacza to, że czaspotrzebny do przetworzenia przez algorytm kombinatoryczny piÄ™ciuelementów wydÅ‚uży siÄ™ 6-krotnie w przypadku szeÅ›ciu elementów oraz42-krotnie w przypadku siedmiu elementów.Tego rodzaju algorytmystosuje siÄ™ do rozwiÄ…zywania trudnych obliczeniowo problemów, jakproblem komiwojażera, problem optymalnego rozmieszczania zawartoÅ›cikontenera, dzielenie zbioru liczb tak, aby suma elementów w każdympodzbiorze byÅ‚a identyczna itp.CzÄ™sto stosuje siÄ™ algorytmy heurystycz-ne, które pozwalajÄ… skrócić czas wykonywania tych algorytmów w kon-kretnych dziedzinach problemu.Szybkość algorytmu tð 197Szybkość algorytmu w praktyceTrudno oczekiwać, aby pisanie funkcji sortujÄ…cych miaÅ‚o zająć istotnÄ… częśćnaszej kariery.RozwiÄ…zania zaimplementowane już w dostÄ™pnych bibliotekachprawdopodobnie oferujÄ… wyższÄ… wydajność niż jakikolwiek kod, który mogli-byÅ›my napisać w rozsÄ…dnym czasie.Okazuje siÄ™ jednak, że podstawowe rodzajealgorytmów, które opisaliÅ›my wczeÅ›niej, w różnych formach przewijajÄ… siÄ™w pracy każdego programisty.Za każdym razem, gdy piszemy prostÄ… pÄ™tlÄ™,możemy być pewni, że zÅ‚ożoność tego algorytmu wyniesie O(n) [ Pobierz caÅ‚ość w formacie PDF ]