Strukture podataka i algoritmi 8 ANALIZA REKURZIVNIH ALGORITAMA

  • Slides: 57
Download presentation
Strukture podataka i algoritmi 8. ANALIZA REKURZIVNIH ALGORITAMA

Strukture podataka i algoritmi 8. ANALIZA REKURZIVNIH ALGORITAMA

Analiza rekurzivnih algoritama • • • Vrijeme izvršavanja rekurzivnih algoritama Sortiranje objedinjavanjem (merge-sort) Sortiranje

Analiza rekurzivnih algoritama • • • Vrijeme izvršavanja rekurzivnih algoritama Sortiranje objedinjavanjem (merge-sort) Sortiranje razdvajanjem (quick-sort) Strukture podataka i algoritmi

Analiza rekurzivnih algoritama □ □ □ Analiza iterativnih algoritama: prebrojavanje osnovnih instrukcija Analiza rekurzivnih

Analiza rekurzivnih algoritama □ □ □ Analiza iterativnih algoritama: prebrojavanje osnovnih instrukcija Analiza rekurzivnih algoritama: rješavanje rekurentnih jednačina Rekurentnom jednačinom se definiše vrijednost funkcije za neki argument pomoću vrijednosti iste funkcije za manje argumente Strukture podataka i algoritmi

Analiza rekurzivnih algoritama – najveći element niza □ Primjer: najveći element niza // Ulaz:

Analiza rekurzivnih algoritama – najveći element niza □ Primjer: najveći element niza // Ulaz: niz �� , njegov broj elemenata �� // Izlaz: indeks najvećeg elementa niza �� algorithm max(a, n) if (n == 1) then // bazni slučaj return 1; else // opšti slučaj i = max(a, n-1); if (a[i] < a[n]) then return n; else return i; Strukture podataka i algoritmi

Analiza rekurzivnih algoritama – najveći element niza □ Vrijeme izvršavanja �� (�� ) za

Analiza rekurzivnih algoritama – najveći element niza □ Vrijeme izvršavanja �� (�� ) za max(a, n): �� (�� )= { 1, �� (�� − 1) + 1, Strukture podataka i algoritmi ako je �� = 1 ako je �� > 1

Analiza rekurzivnih algoritama – Hanojske kule □ Primjer: igra Hanojskih kula // Ulaz: broj

Analiza rekurzivnih algoritama – Hanojske kule □ Primjer: igra Hanojskih kula // Ulaz: broj diskova, početni, pomoćni i ciljni stub // Izlaz: niz poteza za Hanojske kule sa n diskova algorithm hkule(n, a, b, c) if (n == 1) then // bazni slučaj premjesti(a, c); else // opšti slučaj hkule(n-1, a, c, b); premjesti(a, c); hkule(n-1, b, a, c); return; Strukture podataka i algoritmi

Analiza rekurzivnih algoritama – Hanojske kule □ Vrijeme izvršavanja �� (�� ) za max(a,

Analiza rekurzivnih algoritama – Hanojske kule □ Vrijeme izvršavanja �� (�� ) za max(a, n): �� (�� )= { ako je �� = 1 1, 2�� (�� − 1) + 1, ako je �� > 1 Strukture podataka i algoritmi

Analiza rekurzivnih algoritama – Hanojske kule □ Strukture podataka i algoritmi

Analiza rekurzivnih algoritama – Hanojske kule □ Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) □ Zasniva se na objedinjavanju (merge) dva sortirana niza u jedan

Sortiranje objedinjavanjem (merge-sort) □ Zasniva se na objedinjavanju (merge) dva sortirana niza u jedan sortiran niz Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) □ □ Zasniva se na objedinjavanju (merge) dva sortirana niza u

Sortiranje objedinjavanjem (merge-sort) □ □ Zasniva se na objedinjavanju (merge) dva sortirana niza u jedan sortiran niz Primjer: �� �� 1 2 6 15 86 99 0 4 35 58 86 �� 0 4 6 15 35 58 86 86 99 Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz:

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz: �� 1 6 15 86 99 �� 2 0 �� 4 35 58 86

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz:

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz: �� 1 6 15 86 99 �� 2 0 �� 4 35 58 86

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz:

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz: �� 1 6 15 86 99 �� 2 0 �� 0 4 35 58 86

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz:

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz: �� 1 6 15 86 99 �� 2 0 �� 0 4 4 35 58 86

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz:

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz: �� 1 6 15 86 99 �� 2 0 �� 0 4 6 4 35 58 86

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz:

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz: �� 1 6 �� 2 15 86 99 0 �� 0 4 6 15 4 35 58 86

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz:

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz: �� 1 6 �� 2 15 86 99 0 �� 0 4 6 15 35 4 35 58 86

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz:

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz: �� 1 6 �� 2 15 86 99 0 �� 0 4 6 15 35 58 4 35 58 86

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz:

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz: �� 1 6 �� 2 15 86 99 0 4 35 58 86 �� 0 4 6 15 35 58 86

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz:

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz: �� 1 6 �� 2 15 86 99 0 4 35 58 86 �� 0 4 6 15 35 58 86 86

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz:

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz: �� 1 6 �� 2 15 86 99 0 4 35 58 86 �� 0 4 6 15 35 58 86 86 99

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz:

Sortiranje objedinjavanjem (merge-sort) □ Operacija objedinjavanja (merge) dva sortirana niza u jedan sortiran niz: �� 1 1 �� 2 �� 1 + �� 2 • �� ] < �� ] ⇒ �� [�� ] = �� ], �� = �� +1 1[�� 2[�� 1[�� • �� ] ≥ �� ] ⇒ �� [�� ] = �� ], �� = �� +1 1[�� 2[�� • �� = �� +1 Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) – iterativni postupak // Ulaz: dva sortirana niza a 1 i

Sortiranje objedinjavanjem (merge-sort) – iterativni postupak // Ulaz: dva sortirana niza a 1 i a 2 dužine n 1 i n 2 // Izlaz: objedinjeni nizovi a 1 i a 2 u sortiran niz b algorithm merge(a 1, n 1, a 2, n 2) i = 1; j = 1; k = 1; // indeksi nizova a 1, a 2 i b while ((i <= n 1) && (j <= n 2)) do if (a 1[i] < a 2[j]) then b[k] = a 1[i]; i = i + 1; else b[k] = a 2[j]; j = j + 1; k = k + 1; while (i <= n 1) do b[k] = a 1[i]; i = i + 1; k = k + 1; while (j <= n 2) do b[k] = a 2[j]; j = j + 1; k = k + 1; return b; Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) – iterativni postupak □ Vrijeme izvršavanja za merge(a 1, n 1,

Sortiranje objedinjavanjem (merge-sort) – iterativni postupak □ Vrijeme izvršavanja za merge(a 1, n 1, a 2, n 2)? Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) – iterativni postupak □ □ Vrijeme izvršavanja za merge(a 1, n

Sortiranje objedinjavanjem (merge-sort) – iterativni postupak □ □ Vrijeme izvršavanja za merge(a 1, n 1, a 2, n 2)? �� (�� 1 + �� 2) Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ □ Algoritam (rekurzivni) merge-sort za sortiranje niza

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ □ Algoritam (rekurzivni) merge-sort za sortiranje niza Primjer: �� = [99, 6, 86, 15, 58, 35, 86, 4, 0] Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ □ Algoritam (rekurzivni) merge-sort za sortiranje niza

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ □ Algoritam (rekurzivni) merge-sort za sortiranje niza Primjer: �� = [99, 6, 86, 15, 58, 35, 86, 4, 0] 1. Podijeliti niz u dvije polovine (lijevu i desnu) �� �� 1 = [99, 6, 86, 15], 2 = [58, 35, 86, 4, 0] Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ □ Algoritam (rekurzivni) merge-sort za sortiranje niza

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ □ Algoritam (rekurzivni) merge-sort za sortiranje niza Primjer: �� = [99, 6, 86, 15, 58, 35, 86, 4, 0] 1. Podijeliti niz u dvije polovine (lijevu i desnu) �� �� 1 = [99, 6, 86, 15], 2 = [58, 35, 86, 4, 0] 2. Sortirati (rekurzivno) obe polovine nezavisno �� �� 1 = [6, 15, 86, 99], 2 = [0, 4, 35, 58, 86] Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ □ Algoritam (rekurzivni) merge-sort za sortiranje niza

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ □ Algoritam (rekurzivni) merge-sort za sortiranje niza Primjer: �� = [99, 6, 86, 15, 58, 35, 86, 4, 0] 1. Podijeliti niz u dvije polovine (lijevu i desnu) �� �� 1 = [99, 6, 86, 15], 2 = [58, 35, 86, 4, 0] 2. Sortirati (rekurzivno) obe polovine nezavisno �� �� 1 = [6, 15, 86, 99], 2 = [0, 4, 35, 58, 86] 3. Objediniti sortirane polovine u cio sortiran niz �� = [0, 4, 6, 15, 35, 58, 86, 99] Strukture podataka i algoritmi

merge-sort – rekurzivni algoritam 99 6 86 15 58 35 86 4 0

merge-sort – rekurzivni algoritam 99 6 86 15 58 35 86 4 0

merge-sort – rekurzivni algoritam 99 6 86 15 58 35 86 0 4 1.

merge-sort – rekurzivni algoritam 99 6 86 15 58 35 86 0 4 1. 99 6 86 15 58 35 86 4 0

merge-sort – rekurzivni algoritam 99 6 86 15 58 35 86 0 4 1.

merge-sort – rekurzivni algoritam 99 6 86 15 58 35 86 0 4 1. 99 6 86 15 58 35 86 4 0 2. 6 15 86 99 0 4 35 58 86

merge-sort – rekurzivni algoritam 99 6 86 15 58 35 86 0 4 1.

merge-sort – rekurzivni algoritam 99 6 86 15 58 35 86 0 4 1. 99 6 86 15 58 35 86 4 0 2. 6 15 86 99 0 4 35 58 86 3. 0 4 6 15 35 58 86 86 99

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam // Ulaz: niz �� , njegov broj elemenata

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam // Ulaz: niz �� , njegov broj elemenata �� // Izlaz: sortiran niz �� algorithm merge-sort(a, n) if (n == 1) then return a; else for i = 1 to n/2 // bazni slučaj // opšti slučaj do a 1[i] = a[i]; do a 2[i] = a[n/2+i]; a 1 = merge-sort(a 1, n/2); a 2 = merge-sort(a 2, n/2); a = merge(a 1, n/2, a 2, n/2); return a; Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ Vrijeme izvršavanja za merge-sort(a, n): �� (��

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ Vrijeme izvršavanja za merge-sort(a, n): �� (�� )= { ako je �� = 1 �� , 2�� (�� /2) + ���� , ako je �� > 1 Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ Vrijeme izvršavanja za merge-sort(a, n): �� (��

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ Vrijeme izvršavanja za merge-sort(a, n): �� (�� )= { □ ako je �� = 1 �� , 2�� (�� /2) + ���� , ako je �� > 1 Rješenje: �� (�� ) = �� (�� log �� ) Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ Zašto �� (�� ) = �� (��

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam □ Zašto �� (�� ) = �� (�� log �� )? Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam Strukture podataka i algoritmi

Sortiranje objedinjavanjem (merge-sort) – rekurzivni algoritam Strukture podataka i algoritmi

Sortiranje razdvajanjem (quick-sort) 35 6 86 15 58 99 86 4 0

Sortiranje razdvajanjem (quick-sort) 35 6 86 15 58 99 86 4 0

Sortiranje razdvajanjem (quick-sort) 35 6 86 15 58 99 86 4 6 0 4

Sortiranje razdvajanjem (quick-sort) 35 6 86 15 58 99 86 4 6 0 4 0 1. 15 35 99 86 58 86

Sortiranje razdvajanjem (quick-sort) 35 6 86 15 58 99 86 4 6 0 15

Sortiranje razdvajanjem (quick-sort) 35 6 86 15 58 99 86 4 6 0 15 35 99 86 58 86 0 4 6 15 35 99 86 58 86 4 0 1. 2.

Sortiranje razdvajanjem (quick-sort) 35 6 86 15 58 99 86 4 6 0 15

Sortiranje razdvajanjem (quick-sort) 35 6 86 15 58 99 86 4 6 0 15 35 99 86 58 86 0 4 6 15 35 58 86 86 99 4 0 1. 2. 3.

Sortiranje razdvajanjem (quick-sort) □ Osnovna ideja: • Uzeti jedan element niza p (pivot) datog

Sortiranje razdvajanjem (quick-sort) □ Osnovna ideja: • Uzeti jedan element niza p (pivot) datog niza • Preurediti dati niz tako da svi elementi niza lijevo od p budu manji (ili jednaki) od njega, a svi elementi desno od p da budu veći od njega: 1 n k k+1 �� p ai ≤ p ai > p • Sortirati dijelove niza lijevo i desno od p nezavisno • Napomena: pošto je p već na svom pravom mjestu u sortiranom nizu, objedinjavanje sortiranih dijelova nije potrebno Strukture podataka i algoritmi

Sortiranje razdvajanjem (quick-sort) □ Izbor pivota: • • Prvi element niza Poslednji element niza

Sortiranje razdvajanjem (quick-sort) □ Izbor pivota: • • Prvi element niza Poslednji element niza Srednji element niza Slučajni element niza Strukture podataka i algoritmi

Razdvajanje niza kada je pivot prvi element niza □ Preuređivanje (razdvajanje) niza �� kada

Razdvajanje niza kada je pivot prvi element niza □ Preuređivanje (razdvajanje) niza �� kada je pivot prvi element niza: 1. Od lijevog kraja, preskočiti sve elemente niza koji su ≤ p do prvog elementa a i za koji a i > p 2. Od desnog kraja, preskoči sve elemente niza koji su > p do prvog elementa a j za koji a j ≤ p 3. a i > p i a j ≤ p ⇒ swap(ai, a j ) l j i �� �� ≤p >p ? ≤p Strukture podataka i algoritmi d > p

Razdvajanje niza kada je pivot prvi element niza // Ulaz: podniz niza a ograničen

Razdvajanje niza kada je pivot prvi element niza // Ulaz: podniz niza a ograničen indeksima od l do d // Izlaz: razdvojen podniz i indeks u kome se nalazi pivot algorithm partition(a, l, d) // Pretpostavlja se da je a d + 1 = +∞ p = a[l]; i = l + 1; j = d; while (i < j) do while (a[i] <= p) do i = i + 1; while (a[j] > p) do j swap(a[i], a[j]); swap(a[l], a[j-1]); return j; Strukture podataka i algoritmi = j - 1;

Razdvajanje niza kada je pivot poslednji element niza □ Preuređivanje (razdvajanje) niza �� kada

Razdvajanje niza kada je pivot poslednji element niza □ Preuređivanje (razdvajanje) niza �� kada je pivot poslednji element niza: 1. Niz se redom ispituje samo u jednom smjeru (s lijeva na desno) 2. Niz se dijeli u 4 oblasti (moguće prazne) l j i �� ≤p >p Strukture podataka i algoritmi r p ?

Razdvajanje niza kada je pivot poslednji element niza // Ulaz: podniz niza a ograničen

Razdvajanje niza kada je pivot poslednji element niza // Ulaz: podniz niza a ograničen indeksima od l do r // Izlaz: razdvojen podniz i indeks u kome se nalazi pivot algorithm partition(a, l, r) p = a[r]; i = l - 1; for j = l to r-1 do if (a[j] <= p) then i = i + 1; swap(a[i], a[j]); swap(a[i+1], a[r]); return i+1; Strukture podataka i algoritmi

Sortiranje razdvajanjem (quick-sort) // Ulaz: podniz niza a ograničen indeksima od l do //

Sortiranje razdvajanjem (quick-sort) // Ulaz: podniz niza a ograničen indeksima od l do // Izlaz: sortiran podniz algorithm quick-sort(a, l, d) if (l < d) then k = partition(a, l, d); quick-sort(a, l, k-1); quick-sort(a, k+1, d); return a; Strukture podataka i algoritmi d

Sortiranje razdvajanjem (quick-sort) □ Vrijeme izvršavanja za partition(a, 1, n): �� (�� ) =

Sortiranje razdvajanjem (quick-sort) □ Vrijeme izvršavanja za partition(a, 1, n): �� (�� ) = �� (�� ) □ Vrijeme izvršavanja za quick-sort(a, 1, n): �� (�� )= { �� (1), �� =1 �� >1 �� (�� − 1) + �� (�� − �� ) + �� (�� ), Strukture podataka i algoritmi

Sortiranje razdvajanjem (quick-sort) □ Rješenje za �� (�� ) za quick-sort(a, 1, n)? Strukture

Sortiranje razdvajanjem (quick-sort) □ Rješenje za �� (�� ) za quick-sort(a, 1, n)? Strukture podataka i algoritmi

Sortiranje razdvajanjem (quick-sort) □ □ Rješenje za �� (�� ) za quick-sort(a, 1, n)?

Sortiranje razdvajanjem (quick-sort) □ □ Rješenje za �� (�� ) za quick-sort(a, 1, n)? Najbolji slučaj: �� ≈ �� /2 ⇒ �� (�� ) = �� (�� log �� ) 2) U Najgori slučaj: �� = 1 ili �� = �� − 1 ⇒ �� (�� ) = �� (�� praksi: �� (�� ) = �� (�� log �� ) Strukture podataka i algoritmi

Zaključak • Analiza iterativnih algoritama: prebrojavanje osnovnih instrukcija • Analiza rekurzivnih algoritama: rješavanje rekurentnih

Zaključak • Analiza iterativnih algoritama: prebrojavanje osnovnih instrukcija • Analiza rekurzivnih algoritama: rješavanje rekurentnih jednačina • Rekurentnom jednačinom se definiše vrijednost funkcije za neki argument pomoću vrijednosti iste funkcije za manje argumente Strukture podataka i algoritmi

Zaključak 2 • Sortiranje objedinjavanjem (merge-sort) – zasniva se na objedinjavanju (merge) dva sortirana

Zaključak 2 • Sortiranje objedinjavanjem (merge-sort) – zasniva se na objedinjavanju (merge) dva sortirana niza u jedan sortiran niz • Sortiranje razdvajanjem (quick-sort): • Uzeti jedan element p (pivot) datog niza • Preurediti dati niz tako da svi elementi niza lijevo od p budu manji (ili jednaki) od njega, a svi elementi desno od p da budu veći od njega • Sortirati dijelove niza lijevo i desno od p nezavisno Strukture podataka i algoritmi

Hvala na pažnji! Strukture podataka i algoritmi

Hvala na pažnji! Strukture podataka i algoritmi