Wprowadzenie do zlozonosci obliczeniowej

advertisement
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
Download