Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Wprowadzenie do złożoności obliczeniowej mgr inż. Arkadiusz Chrobot Katedra Informatyki Politechniki Świętokrzyskiej Kielce, 16 stycznia 2007 mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Plan wykładu 1 Efektywność algorytmów 2 Złożoność obliczeniowa algorytmów 3 Notacje asymptotyczne 4 Przykłady 5 Uwagi na temat notacji asymptotycznych 6 Złożoność obliczeniowa problemów mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Plan wykładu 1 Efektywność algorytmów 2 Złożoność obliczeniowa algorytmów 3 Notacje asymptotyczne 4 Przykłady 5 Uwagi na temat notacji asymptotycznych 6 Złożoność obliczeniowa problemów mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Plan wykładu 1 Efektywność algorytmów 2 Złożoność obliczeniowa algorytmów 3 Notacje asymptotyczne 4 Przykłady 5 Uwagi na temat notacji asymptotycznych 6 Złożoność obliczeniowa problemów mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Plan wykładu 1 Efektywność algorytmów 2 Złożoność obliczeniowa algorytmów 3 Notacje asymptotyczne 4 Przykłady 5 Uwagi na temat notacji asymptotycznych 6 Złożoność obliczeniowa problemów mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Plan wykładu 1 Efektywność algorytmów 2 Złożoność obliczeniowa algorytmów 3 Notacje asymptotyczne 4 Przykłady 5 Uwagi na temat notacji asymptotycznych 6 Złożoność obliczeniowa problemów mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Plan wykładu 1 Efektywność algorytmów 2 Złożoność obliczeniowa algorytmów 3 Notacje asymptotyczne 4 Przykłady 5 Uwagi na temat notacji asymptotycznych 6 Złożoność obliczeniowa problemów mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Efektywność - dodatkowa własność algorytmów D.E.Knuth „Sztuka programowania”: „Algorytm powinien być określony efektywnie w tym sensie, że jego operacje powinny być wystarczająco proste, by (przynajmniej teoretycznie) można było je dokładnie i w skończonym czasie wykonać za pomocą ołówka i kartki.” mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Efektywność - dodatkowa własność algorytmów Definicja efektywności: Efektywnością algorytmu będziemy nazywać zapotrzebowanie jego implementacji (programu komputerowego) na zasoby (pamięć, czas procesora) zgromadzone w konkretnym systemie komputerowym. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Efektywność algorytmu zależy od: architektury systemu komputerowego, mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Efektywność algorytmu zależy od: architektury systemu komputerowego, konfiguracji sprzętowej systemu komputerowego mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Efektywność algorytmu zależy od: architektury systemu komputerowego, konfiguracji sprzętowej systemu komputerowego rozmiaru danych wejściowych, mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Efektywność algorytmu zależy od: architektury systemu komputerowego, konfiguracji sprzętowej systemu komputerowego rozmiaru danych wejściowych, porządku danych wejściowych. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Problemy 1 Jakiej miary użyć do wyrażenia efektywności (sekundy,cykle,bajty)? mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Problemy 1 Jakiej miary użyć do wyrażenia efektywności (sekundy,cykle,bajty)? 2 Jak porównywać poszczególne platformy systemowe? mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Maszyna wzorcowa Maszyna o dostępie swobodnym do pamięci Chcąc wyznaczyć efektywność działania algorytmu niezależnie od języka programowania, ani sprzętu na którym zostanie on zrealizowany, należy przyjąć jakąś maszynę wzorcową, która będzie wykonywała ten algorytm. Taką maszyną może być maszyna Turinga lub maszyna RAM. Ta ostatnia jest abstrakcyjnym, jednoprocesorowym komputerem, który dysponuje nieograniczoną pamięcią o dostępie swobodnym. Dostęp swobodny oznacza, że odwołanie do dowolnej lokacji tej pamięci (komórki) jest realizowane w takim samym czasie, niezależnie od jej położenia. Procesor tej maszyny ma krótką listę rozkazów, z których każdy jest zawsze wykonywany w takim samym czasie jak pozostałe. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Złożoność obliczeniowa Definicja Złożoność obliczeniowa wyznacza wielkość zasobów jakie potrzebne są do wykonania algorytmu w dowolnym systemie komputerowym. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Rodzaje złożoności obliczeniowej Złożoność czasowa Złożoność czasowa jest to zależność między rozmiarem i porządkiem danych wejściowych algorytmu, a czasem wykonania algorytmu. Rozmiar danych najczęściej jest wyrażany w liczbie elementów stanowiących dane wejściowe, natomiast czas jest wyrażany w przybliżonej liczbie kroków, jakie musi wykonać maszyna z pamięcią o dostępie swobodnym, by zakończyć wykonanie algorytmu. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Rodzaje złożoności obliczeniowej Złożoność czasowa Złożoność czasowa jest to zależność między rozmiarem i porządkiem danych wejściowych algorytmu, a czasem wykonania algorytmu. Rozmiar danych najczęściej jest wyrażany w liczbie elementów stanowiących dane wejściowe, natomiast czas jest wyrażany w przybliżonej liczbie kroków, jakie musi wykonać maszyna z pamięcią o dostępie swobodnym, by zakończyć wykonanie algorytmu. Złożoność pamięciowa Złożoność pamięciowa jest to zależność pomiędzy rozmiarem i porządkiem danych wejściowych algorytmu, a jego zapotrzebowaniem na pamięć niezbędną do jego realizacji. Wielkość tej pamięci wyrażana jest w liczbie elementów, które należy przechować. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Analiza złożoności algorytmów Złożoność obliczeniowa nie zależy od architektury i konfiguracji sprzętowej komputerów (wyznaczamy ją dla maszyny z pamięcią o dostępie swobodnym), ale zależy od rozmiaru i uporządkowania danych wejściowych. Wyznaczając złożoność obliczeniową algorytmu badamy trzy przypadki. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Analizowane przypadki wykonania algorytmów Przypadek optymistyczny Zakładamy takie wstępne uporządkowanie danych wejściowych, że algorytm jest wykonywany najszybciej i wymaga najmniej pamięci do swojego działania. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Analizowane przypadki wykonania algorytmów Przypadek pesymistyczny Zakładamy takie wstępne uporządkowanie danych wejściowych, że algorytm jest wykonywany najwolniej i wymaga najwięcej pamięci do swojego działania. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Czynniki wpływające na efektywność algorytmów Maszyna wzorcowa Złożoność obliczeniowa Analiza algorytmów Analizowane przypadki wykonania algorytmów Przypadek średni Badamy zapotrzebowanie algorytmu na pamięć i czas procesora dla najczęściej spotykanych uporządkowań danych wejściowych. Im ta złożoność jest bliższa złożoności przypadku optymistycznego, tym lepiej. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacje asymptotyczne Najczęściej nie interesuje nas dokładne wyznaczenie złożoność obliczeniowej, wystarcza nam jej oszacowanie. Wynik takiego oszacowania najlepiej przedstawić za pomocą jednej z notacji asymptotycznych. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja Θ Θ(g (n)) = {f (n) : istnieją dodatnie stałe c1 , c2 , n0 takie, że 0 ¬ c1 · g (n) ¬ f (n) ¬ c2 · g (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja Θ Θ(g (n)) = {f (n) : istnieją dodatnie stałe c1 , c2 , n0 takie, że 0 ¬ c1 · g (n) ¬ f (n) ¬ c2 · g (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja Θ Θ(g (n)) = {f (n) : istnieją dodatnie stałe c1 , c2 , n0 takie, że 0 ¬ c1 · g (n) ¬ f (n) ¬ c2 · g (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja Θ Θ(g (n)) = {f (n) : istnieją dodatnie stałe c1 , c2 , n0 takie, że 0 ¬ c1 · g (n) ¬ f (n) ¬ c2 · g (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja Θ Θ(g (n)) = {f (n) : istnieją dodatnie stałe c1 , c2 , n0 takie, że 0 ¬ c1 · g (n) ¬ f (n) ¬ c2 · g (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja O O(g (n)) = {f (n) : istnieją dodatnie stałe c, n0 takie, że 0 ¬ f (n) ¬ c · g (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja O O(g (n)) = {f (n) : istnieją dodatnie stałe c, n0 takie, że 0 ¬ f (n) ¬ c · g (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja O O(g (n)) = {f (n) : istnieją dodatnie stałe c, n0 takie, że 0 ¬ f (n) ¬ c · g (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja O O(g (n)) = {f (n) : istnieją dodatnie stałe c, n0 takie, że 0 ¬ f (n) ¬ c · g (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja Ω Ω(g (n)) = {f (n) : istnieją dodatnie stałe c, n0 takie, że 0 ¬ c · g (n) ¬ f (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja Ω Ω(g (n)) = {f (n) : istnieją dodatnie stałe c, n0 takie, że 0 ¬ c · g (n) ¬ f (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja Ω Ω(g (n)) = {f (n) : istnieją dodatnie stałe c, n0 takie, że 0 ¬ c · g (n) ¬ f (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacja Ω Ω(g (n)) = {f (n) : istnieją dodatnie stałe c, n0 takie, że 0 ¬ c · g (n) ¬ f (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Notacja Notacja Notacja Notacje wielkie wielkie wielkie małe o theta o omega i małe omega Notacje o i ω Notacja o o(g (n)) = {f (n) : dla każdej dodatniej stałej c > 0, istnieje stała n0 > 0 taka, że 0 ¬ f (n) < c · g (n) dla wszystkich n ­ n0 } Notacja ω ω(g (n)) = {f (n) : dla każdej dodatniej stałej c > 0, istnieje stała n0 > 0 takie, że 0 ¬ c · g (n) < f (n) dla wszystkich n ­ n0 } mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Przykład pierwszy Przykład drugi Złożoność czasowa algorytmu insertionsort for j:=low(t)+1 to high(t) do begin key:=t[j]; i:=j-1; while (i>0) and (t[i]>key) do begin t[i+1]:=t[i]; i:=i-1; end; t[i+1]:=key; end; koszt c1 mgr inż. Arkadiusz Chrobot liczba wykonań n c2 c3 c4 n-1 n-1 Pn c5 c6 Pn (t − 1) Pnj=2 j (t j=2 j − 1) c7 n-1 j=2 tj Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Przykład pierwszy Przykład drugi Ogólne równanie na czas działania algorytmu insertionsort T (n) = c1 · n + c2 · (n − 1) + c3 · (n − 1) + c4 · Pn Pn j=2 (tj − 1) + c6 · j=2 (tj − 1) + c7 · (n − 1) mgr inż. Arkadiusz Chrobot Pn j=2 tj + c5 · Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Przykład pierwszy Przykład drugi Przypadek optymistyczny dla insertionsort Algorytm sortowania przez wstawianie najszybciej jest wykonywany, kiedy musi posortować tablicę już posortowaną (tj = 1): T (n) = c1 · n + c2 · (n − 1) + c3 · (n − 1) + c4 · (n − 1) + c7 · (n − 1) = (c1 + c2 + c3 + c4 + c7 ) · n − (c2 + c3 + c4 + c7 ) Jeśli teraz przyjmiemy, że a = c1 + c2 + c3 + c4 + c7 , a b = c2 + c3 + c4 + c7 to możemy powyższe równanie zapisać jako T (n) = a · n − b mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Przykład pierwszy Przykład drugi Przypadek pesymistyczny Algorytm sortowania przez wstawianie wykonywany jest najwolniej, kiedy musi posortować tablicę posortowaną odwrotnie (tj = j). W takim przypadku Pn Pn n·(n+1) −1 j=2 j = j=2 tj = 2 i Pn j=2 (tj − 1) = Pn j=2 (j − 1) = mgr inż. Arkadiusz Chrobot n·(n−1) 2 Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Przykład pierwszy Przykład drugi Przypadek pesymistyczny Zatem: T (n) = c1 · n + c2 · (n − 1) + c3 · (n − 1) + c4 n·(n+1) − 1 + c5 · 2 n·(n−1) + c6 · n·(n−1) + c7 · (n − 1) = 2 2 c4 c5 c6 2 + c +c +c + c4 − c5 − c6 +c ·n−(c +c +c +c ) + + ·n 1 2 3 2 3 4 7 7 2 2 2 2 2 2 Jeżeli przyjmiemy, że a = c24 + c25 + c26 , b = c1 + c2 + c3 + c24 − c25 − c26 + c7 i c = c2 + c3 + c4 + c7 To możemy zapisać powyższe równianie jako: T (n) = a · n2 + b · n − c mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Przykład pierwszy Przykład drugi Użycie notacji asymptotycznych Używając notacji asymptotycznych zwracamy uwagę na ten człon równania opisującego czas, który ma największe znaczenie i pomijamy wszelkie stałe. W przypadku optymistycznego przypadku czas działania algorytmu insertionsort możemy wyrazić jako To (n) = Θ(n), w przypadku pesymistycznym jako Tp (n) = Θ(n2 ). Ogólnie możemy napisać, że czas działania algorytmu insertionsort wynosi T (n) = O(n2 ) (jest to asymptotyczna granica górna czasu działania tego algorytmu wiemy, że gorzej być nie może). mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Przykład pierwszy Przykład drugi Przypadek średni Analiza przypadku średniego (lub oczekiwanego) może być złożona, ze względu na określenie „średnich” danych wejściowych. Dosyć często przyjmuje się (jeśli jest to uzasadnione), że przypadek średni jest równy przypadkowi pesymistycznemu. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Przykład pierwszy Przykład drugi Oszacowanie rzeczywistego czasu wykonania Załóżmy, że mamy algorytm sortowania, którego złożoność czasowa wynosi O(n2 ). Dla tablicy o stu elementach (n=100) wykonywał się on przez dwie sekundy. Ile będzie wykonywał się ten algorytm dla jeśli tablica będzie miała 106 elementów? Czas ten 106 2 obliczamy następująco: t = 2 · 102 = (2 · 104 )2 = 4 · 108 sekund. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Zależność między notacjami O, Θ i Ω Jeśli asymptotyczna granica dolna (notacja O) i asymptotyczna granica dolna (notacja Ω) są sobie równe, to możemy podać asymptotycznie dokładne oszacowanie czasu działania algorytmu (notacja Θ). mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Pułapki stosowania notacji asymptotycznych Stosując notacje asymptotyczne podajemy oszacowania czasu działania algorytmu lub jego wymagania co do pamięci, dla rozmiaru danych dążącego do nieskończoności, dlatego wolno nam zaniedbać stałe i niektóre mniej ważne człony w równaniach. Niestety te „nieistotne” stałe mogą mieć bardzo duży wpływ na np. czas działania algorytmu, jeśli jest on wykonywany dla danych o niewielkim rozmiarze. W ten sposób algorytm o złożoności czasowej O(n2 ) może okazać się wydajniejszy od O(n). mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Pułapki stosowania notacji asymptotycznych Podając złożoność obliczeniową algorytmów z zastosowaniem notacji asymptotycznej podajemy jedynie rząd wielkości. Może się więc okazać, że dwa algorytmy należące do tej samej klasy złożoności nie zachowują się tak samo w codziennych zastosowaniach (np. bubblesort i selectionsort). W takich wypadkach konieczna jest dokładniejsza ocena ich złożoności (np. poprzez policzenie liczby porównań lub liczby wymian). mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Porównanie różnych klas złożoności algorytmów O(1) - 1µs O(n) - 1s O(n2 ) - 11,6 dni O(n3 ) - 32000 lat O(2n ) - 10301006 · wiek wszechświata mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Złożoność obliczeniowa problemów Złożoność obliczeniowa jest nie tylko cechą algorytmów, ale również cechą problemów, które one rozwiązują. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Złożoność obliczeniowa problemów Problemy zaliczane do klasy P są rozwiązywane przez deterministyczne algorytmy działające w czasie wielomianowym. Problemy klasy NP są problemami rozwiązywanymi przez algorytmy niedeterministyczne działające w czasie wielomianowym. Podklasą tych problemów są problemy należące do klasy NP-zupełnych (ang. NP-complete). Zakłada się, że znalezienie algorytmu deterministycznego, który rozwiązywałby choć jeden z tych problemów w czasie wielomianowym, mogłoby doprowadzić do znalezienia algorytmów działających w tym czasie dla wszystkich pozostałych problemów należących do tej klasy. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej Plan Efektywność algorytmów Złożoność obliczeniowa Notacje asymptotyczne Przykłady Uwagi na temat notacji asymptotycznych Złożoność obliczeniowa problemów Złożoność obliczeniowa problemów Problemy należące do klasy PSPACE mają wielomianową złożoność pamięciową. Zakłada się, że są one trudniejsze od problemów należących do klasy NP. Klasa PSPACE-zupełne (PSPACE-complete) jest odpowiednikiem klasy NP-complete. Największą złożoność obliczeniową (wykładniczą) mają problemy należące do klasy EXPTIME. mgr inż. Arkadiusz Chrobot Wprowadzenie do złożoności obliczeniowej