• Nie Znaleziono Wyników

Złożonosć obliczeniowa

N/A
N/A
Protected

Academic year: 2021

Share "Złożonosć obliczeniowa"

Copied!
3
0
0

Pełen tekst

(1)

Zajęcia

Algorytmy i programowanie

Analiza algorytmów. Szacowanie złożoności obliczeniowej.

Złożoność obliczeniowa (czasowa) algorytmu - zależność pomię- dzy rozmiarem danych wejściowych a liczbą operacji elementarnych wyko- nywanych w trakcie przebiegu algorytmu (podawana jako funkcja rozmiaru danych).

Operacje elementarne to np. liczba porównań dwóch liczb w algorytmie sortowania, liczba mnożeń w algorytmie obliczania silni, liczba dzieleń w algorytmie sprawdzania czy dana liczba jest pierwsza, ogólna liczba operacji arytmetycznych wykonywanych przez dany algorytm itp..

Złożoność obliczeniowa jest jednym z najważniejszych parametrów cha- rakteryzujących algorytm. Decyduje ona o efektywności całego programu.

Podstawowymi zasobami systemowymi uwzględnianymi w analizie algoryt- mów są czas działania (złożoność obliczeniowa algorytmu) oraz obszar zaj- mowanej pamięci (złożoność pamięciowa algorytmu). Złożoność pamięciowa wynika z liczby i rozmiaru struktur danych wykorzystywanych w algorytmie.

Złożoność algorytmu może być rozumiana w sensie złożoności najgorszego przypadku lub złożoności średniej. Złożoność najgorszego przypadku nazy- wamy złożonością pesymistyczną - jest to maksymalna złożoność dla danych o zadanym rozmiarze n. Złożoność średnia lub oczekiwana to średnia war- tość złożoności dla wszystkich problemów rozmiaru n. Najczęściej algorytmy mają złożoność czasową proporcjonalną do funkcji:

— log(n)- złożoność logarytmiczna,

— n - złożoność liniowa,

— n log(n) - złożoność liniowo-logarytmiczna,

— n

2

- złożoność kwadratowa,

— n

k

- złożoność wielomianowa, (k > 2),

— 2

log n

- złożoność podwykładnicza,

— 2

n

- złożoność wykładnicza,

— n! - złożoność wykładnicza

Notacja asymptotyczna

Rząd wielkości służy do opisu czasu działania algorytmu. Istnieją 3 no- tacje służące do tego celu:

Funkcja asymptotycznie niewiększa od funkcji g(n) to taka funkcja f : N −→ R, dla której istnieją c > 0 i n

0

∈ N, że |f(n)| ¬ c · |g(n)| dla wszystkich n ­ n

0

.

Będziemy też często mówić, że |f (n)| ¬ c · |g(n)| zachodzi dla prawie wszystkich liczb naturalnych n. Zbiór funkcji asymptotycznie niewiększych niż g(n) oznaczamy przez O(g(n)).

Funkcja asymptotycznie niemniejsza od funkcji g(n) to taka funkcja f : N −→ R, dla której istnieją c > 0 i n

0

∈ N, że c · |g(n)| ¬ |f(n)| dla wszystkich n ­ n

0

.

Zbiór funkcji asymptotycznie niemniejszych niż g(n) oznaczamy przez Ω(g(n)).

1

(2)

Zajęcia

Algorytmy i programowanie

Funkcja asymptotycznie podobna do funkcji g(n) to taka funkcja f : N −→ R, dla której istnieją c

0

, c

1

> 0 i n

0

∈ N, że c

0

· |g(n)| 6 |f(n)| ¬ c

1

· |g(n)| dla wszystkich n ­ n

0

.

Zbiór funkcji asymptotycznie podobnych do g(n) oznaczamy przez Θ(g(n)).

A zatem Θ(g(n)) = O(g(n)) ∩ Ω(g(n)).

Odpowiednio w stosunku do wcześniej wypisanych funkcji powiemy, że złożoność obliczeniowa algorytmu wynosi (lub algorytm „działa w czasie”) O(log(n)), O(n), O(n log(n)), itd.

Gdzie np. log n = O(n) , n

2

= Ω(n) , n = O(n) , n = Ω(n) , n = Θ(n) , 20n = Θ(n).

2

(3)

Zajęcia

Algorytmy i programowanie

Zadania na ćwiczenia Zadanie 0

Jaka jest złożoność obliczeniowa algorytmu wyszukiwania maksimum ? Sumowania elementów macierzy?

Zadanie 1

Uporządkować rosnąco wg rzędu następujące funkcje:

2

n!

, n

2

, (2009!)n

2

, n

3

− n

2

, n

3

, n

3

+ n

2

, 2

n

, n

2009!

, n! , n log n , log n.

Zadanie 2

Udowodnij przechodność:

f (n) = Θ(g(n)) i g(n) = Θ(h(n)) ⇒ f (n) = Θ(h(n)) Zadanie 3

Znajdź i wykaż (udowodnij) zależności pomiędzy funkcjami w notacji asymptotycznej:

— 2n w odniesieniu do (20!)n,

— n

2

− n w odniesieniu do n

2

+ n,

— log

2

n w odniesieniu do n,

— 3

n

w odniesieniu do 2

n

— 2

n+1

w odniesieniu do 2

n

— 2

2n

w odniesieniu do 2

n

— n! w odniesieniu do 2

n

Zadanie 4

Podaj złożoność funkcji rekurencyjnych:

T (n) = 2T ( n

2 ) + 5n − 15 T (n) = 16T ( n

4 ) + n lg n T (n) = 2T ( n

2 ) + n lg n

Podaj dokładnie asymptotyczne oszacowanie dla rekurencji T (n) = T (n − 1) + n + 1

Zadanie 5

Podaj złożoność algorytmów rekurencyjnych:

Wyliczającego silnię, fibonacciego? Wyszukiwania binarnego, sortowania przez scalanie?

Literatura

Wykład Asymptotyka

3

Cytaty

Powiązane dokumenty

Dla dodatniej liczby naturalnej n znaleźć wzór na największą potęgę liczby pierwszej p dzielącą n!4. Rozłożyć na czynniki pierwsze

Krawędzi, które łączą wierzchołki należące do różnych kawałków, jest dokładnie n k − 1, a ponieważ poddrzewa połączone takimi krawędziami składają się z

Studenci realizujący kurs „Technologie paszowe i nawozowe nowej generacji”, zostali zaproszeni do zrealizowania jednodniowego szkolenia w Kędzierzynie-Koźlu.. Jednym z zadań

[r]

Dla podanych a, b, c podać takie d, aby istniał czworokąt wy- pukły o bokach długości (z zachowaniem kolejności) a, b, c, d, w który można wpisać okrąg.. Dla podanych a, b,

, n} tak, by dla każdych trzech wierzchołków A, B, C, dla których |AB| = |AC|, liczba przy wierzchołku A była albo mniejsza, albo wi e , ksza od jednocześnie obu liczb

Wśród dowolnych k różnych liczb całkowitych dodatnich istnieją dwie, których różnica jest podzielna przez n.. Wśród dowolnych k różnych liczb całkowitych dodatnich

Dla równoległoboku o przekątnych długości 6 i 8, przecinających się pod kątem α, oznaczmy przez S(α) sumę kwadratów długości jego boków