23
Metódy návrhu efektívnych Metódy návrhu efektívnych algoritmov algoritmov

Metódy návrhu efektívnych algoritmov

  • Upload
    eadoin

  • View
    74

  • Download
    4

Embed Size (px)

DESCRIPTION

Metódy návrhu efektívnych algoritmov. Divide et impera (rozde ľuj a vládni ). Jedna zo základných stratégií v politike, sociológii, ekonomike, armáde, .... a informatike Výrok sa pripisuje maced ónskému kráľovi Filipovi II (382-336 p.n.l. ). Divide et impera - princíp. - PowerPoint PPT Presentation

Citation preview

Page 1: Metódy návrhu efektívnych algoritmov

Metódy návrhu efektívnych Metódy návrhu efektívnych algoritmovalgoritmov

Page 2: Metódy návrhu efektívnych algoritmov

22

Divide et impera Divide et impera (rozde(rozdeľuj a vládniľuj a vládni))

Jedna zo základných stratégií v politike, Jedna zo základných stratégií v politike, sociológii, ekonomike, armáde, .... asociológii, ekonomike, armáde, .... a informatike informatike

Výrok sa pripisujeVýrok sa pripisuje maced macedónskému kráľovi ónskému kráľovi Filipovi II (382-336 Filipovi II (382-336 p.n.l.p.n.l.))

Page 3: Metódy návrhu efektívnych algoritmov

33

Divide et impera - princípDivide et impera - princíp

Zložitý problém sa rieši pomocou menších Zložitý problém sa rieši pomocou menších (jednoduch(jednoduchšíchších)) problémov problémov

Tento princíp poznáme z bežného života ale aj z Tento princíp poznáme z bežného života ale aj z programovania programovania (u(už niekoľko krát bol použitýž niekoľko krát bol použitý))

2 z2 základné metódy:ákladné metódy:

Rozdeľuj a panujRozdeľuj a panuj – prístup zhora nadol – prístup zhora nadol

Dynamické programovanieDynamické programovanie – prístup zdola nahor – prístup zdola nahor

Page 4: Metódy návrhu efektívnych algoritmov

44

Rozdeľuj a panujRozdeľuj a panuj

3 kroky:3 kroky:

rozdelenie problému na podproblémyrozdelenie problému na podproblémy

(rekurz(rekurzívneívne) vyrie) vyriešenie každého z podproblémovšenie každého z podproblémov

spojenie riešení podproblémov do riešenia spojenie riešení podproblémov do riešenia pôvodného problémupôvodného problému

Príklady:Príklady:

Hanojské vežeHanojské veže

QuickSort – kľúčová časť je rozdelenie problémuQuickSort – kľúčová časť je rozdelenie problému

MergeSort – kľúčová časť je spojenie riešeníMergeSort – kľúčová časť je spojenie riešení

Page 5: Metódy návrhu efektívnych algoritmov

55

MergeSort MergeSort (princ(princípíp))

Rozdelenie n-prvkovej postupnosti, ktorú treba utriediť, na dve podpostupnosti dĺžky približne n/2 (jednoduché)

Rekurzívne utriedenie podpostupností použitím MergeSortu (jednoduché)

Zlúčenie dvoch utriedených podpostupností do výslednej utriedenej postupnosti (???)

Page 6: Metódy návrhu efektívnych algoritmov

66

MergeSort (schMergeSort (schémaéma))var p, q:array[1..MaxN] of integer;

n: integer;

procedure MergeSort(Zac, Kon: integer);

var stred: integer;

begin

stred := (Zac + Kon) div 2; // rozdelenie

MergeSort(Zac, stred); // rekurzivne riesenie

MergeSort(stred + 1, Kon); // podproblemov

Zluc(zac, kon); // spojenie rieseni

end;

Pozor, toto je len schéma !

Page 7: Metódy návrhu efektívnych algoritmov

77

ZlučovanieZlučovanie

Využijeme, že obe postupností sú utriedenéVyužijeme, že obe postupností sú utriedené

Pozorovanie Pozorovanie (+ obr(+ obrázokázok))::

prvý prvok zlúčenej postupnosti je menší z prvých prvý prvok zlúčenej postupnosti je menší z prvých prvkov podpostupnostíprvkov podpostupností

stastačí postupne 2 kurzormi prechádzať oboma čí postupne 2 kurzormi prechádzať oboma podpostupnosťami, aby sme získali utriedenú podpostupnosťami, aby sme získali utriedenú postupnosťpostupnosť

Lineárna časová zložitosťLineárna časová zložitosť

Treba pomocné poleTreba pomocné pole

Page 8: Metódy návrhu efektívnych algoritmov

88

Programujeme …Programujeme …

Page 9: Metódy návrhu efektívnych algoritmov

99

PPár slov o efektivite riešeniaár slov o efektivite riešenia

Časová zložitosť: OČasová zložitosť: O(n log n)(n log n)

MMáme najviac Oáme najviac O(log n) rekurz(log n) rekurzívnych vnorení v rámci ívnych vnorení v rámci jednej vetvyjednej vetvy

Lineárna zložitosť zlučovaniaLineárna zložitosť zlučovania

V každej „vrstve“ stromu vykonáme lineárny počet V každej „vrstve“ stromu vykonáme lineárny počet operáciíoperácií

Nevýhoda: Nutné pomocné poleNevýhoda: Nutné pomocné pole

MergeSort ide využiť na efektívne triedenie MergeSort ide využiť na efektívne triedenie spájaných zoznamov spájaných zoznamov (netreba pomocn(netreba pomocné poleé pole))

Page 10: Metódy návrhu efektívnych algoritmov

1010

Vyhodnocovanie artimetickVyhodnocovanie artimetických výrazových výrazov

K zadanému výrazu skonštruujeme aritmetický K zadanému výrazu skonštruujeme aritmetický stromstrom

Elegantné rekurzívne vyhodnotenie:Elegantné rekurzívne vyhodnotenie:

Ak je to uzol, ktorý uchováva operáciu:Ak je to uzol, ktorý uchováva operáciu:

necháme vyhodnotiť podstrom zakorenený v ľavom necháme vyhodnotiť podstrom zakorenený v ľavom synovisynovi

necháme vyhodnotiť podstrom zakorenený v pravom necháme vyhodnotiť podstrom zakorenený v pravom synovisynovi

na výsledky aplikujeme požadovanú operáciuna výsledky aplikujeme požadovanú operáciu

Ak je to uzol, ktorý uchováva hodnotu, tak Ak je to uzol, ktorý uchováva hodnotu, tak vyhodnotenie máme ihneďvyhodnotenie máme ihneď

Page 11: Metódy návrhu efektívnych algoritmov

1111

Dynamické programovanieDynamické programovanie

Postup zdola nahorPostup zdola nahor

najprv riešime malé najprv riešime malé (element(elementárneárne) probl) problémy a z émy a z nich budujeme riešenie väčších a väčších nich budujeme riešenie väčších a väčších problémovproblémov

nie všetko čo počítame musí priamo nie všetko čo počítame musí priamo (vidite(viditeľneľne) ) súvisieť s problémom, ktorý má vyriešiťsúvisieť s problémom, ktorý má vyriešiť

PrPríklady:íklady:

Fibonacciho číslaFibonacciho čísla

Optimálne násobenie matícOptimálne násobenie matíc

Grafové algoritmyGrafové algoritmy

Page 12: Metódy návrhu efektívnych algoritmov

1212

Postup pri riešeníPostup pri riešení

Charakterizuj štruktúru optimálneho riešenia

Rekurzívne definuj hodnotu optimálneho riešenia

Metódou zdola nahor vypočítaj ohodnotenie optimálneho riešenia

Z vypočítanej informácie skonštruuj optimálne riešenie

Page 13: Metódy návrhu efektívnych algoritmov

1313

Násobenie matícNásobenie matíc

Matica Matica AA typu typu pp x x qq (p riadkov, q st(p riadkov, q stĺpcovĺpcov))

Matica Matica BB typu typu q x rq x r (q riadkov, r st (q riadkov, r stĺpcovĺpcov))

A x BA x B je matica typu je matica typu p x rp x r

PoPočet operácií čet operácií (zl(zložitosťožitosť)) potrebných na výpočet potrebných na výpočet matice matice A xA x B B je je p x q x r p x q x r jednoduchým jednoduchým algoritmom algoritmom (existuj(existujú aj iné prefíkanejšie a ú aj iné prefíkanejšie a rýchlejšierýchlejšie))

Page 14: Metódy návrhu efektívnych algoritmov

1414

Algoritmus na nAlgoritmus na násobenie matícásobenie matíc (sch(schémaéma))

procedure VynasobMatice(A, B, C);

begin

for i:=1 to riadky[A] do

for j:=1 to stlpce[B] do

begin

C[i, j] := 0;

for k:=1 to stlpce[A] do

C[i, j] := C[i, j] + A[i, k] * B[k, j];

end;

end;

Page 15: Metódy návrhu efektívnych algoritmov

1515

NNásobenie matíc - problémásobenie matíc - problém

AA11, A, A22, A, A33, ..., A, ..., An n - postupnosť kompatibilných - postupnosť kompatibilných matícmatíc

Nech P je pole rozmerov matíc a nech matica ANech P je pole rozmerov matíc a nech matica A ii má rozmery Pmá rozmery P[i-1] a P[i][i-1] a P[i]

Chceme vypočítať AChceme vypočítať A11x Ax A22 x A x A3 3 x ...x Ax ...x An n

Násobenie matíc je asociatívne – nezáleží na Násobenie matíc je asociatívne – nezáleží na ozátvorkovaníozátvorkovaní

Rôzne „spôsoby“ Rôzne „spôsoby“ (oz(ozátvorkovaniaátvorkovania) ako vypo) ako vypočítať čítať výsledný súčinvýsledný súčin

Page 16: Metódy návrhu efektívnych algoritmov

1616

PríkladPríklad

AA11: 1: 10 x 100, A0 x 100, A22: 100 x 5, A: 100 x 5, A33: 5 x 50: 5 x 50

(A(A11 x (A x (A22 x A x A33)))):: 75000 operácií 75000 operácií

M = AM = A22 x A x A33: 100 x 5 x 50 = 25000 oper: 100 x 5 x 50 = 25000 operáciíácií

AA11 x M: 10 x 100 x 50 = 50000 oper x M: 10 x 100 x 50 = 50000 operáciíácií

((((AA11 x A x A22) x A) x A33)):: 7500 operácií 7500 operácií

M = AM = A11 x A x A22: 10 x 100 x 5 = 5000 oper: 10 x 100 x 5 = 5000 operáciíácií

M x AM x A33: 10 x 5 x 50 : 10 x 5 x 50 = 2500 oper= 2500 operáciíácií

Aké Aké je je ozátvorkovanie s minimálnym počtom operácií pri ozátvorkovanie s minimálnym počtom operácií pri násobení násobení ??

Page 17: Metódy návrhu efektívnych algoritmov

1717

Štruktúra optimálneho riešeniaŠtruktúra optimálneho riešenia (1) (1)

Nech Nech MM[i, j][i, j] je minim je minimálny počet operácií, ktoré treba pri álny počet operácií, ktoré treba pri optimálnom ozátvorkovaní výrazu: optimálnom ozátvorkovaní výrazu:

AAjj x A x Aj+1j+1 x … x A x … x Aj+i-1j+i-1

M[N, 1]M[N, 1] – – hľadaný počet operácií pri optimálnom hľadaný počet operácií pri optimálnom ozátvorkovaníozátvorkovaní

MM[1, j] = 0 pre v[1, j] = 0 pre všetky j šetky j = 1, 2, …, N= 1, 2, …, N

M[2, j]M[2, j] zodpoved zodpovedá Aá Ajj x A x Ajj+1+1, kde , kde

AAjj je P[j-1] x P[j] matica je P[j-1] x P[j] matica

AAj+1j+1 je P[j] x P[j+1] matica je P[j] x P[j+1] matica

MM[2, j] = P[j-1] x P[j] x P[j+1][2, j] = P[j-1] x P[j] x P[j+1], pre j=1, 2, …, N-1, pre j=1, 2, …, N-1

Page 18: Metódy návrhu efektívnych algoritmov

1818

Štruktúra optimálneho riešeniaŠtruktúra optimálneho riešenia (2) (2)

Čomu sa rovná MČomu sa rovná M[i, j] v[i, j] všeobecne šeobecne ??

Súčin Súčin AAjj x A x Aj+1j+1 x … x A x … x Aj+i-1j+i-1 možno rozdeliť na možno rozdeliť na

súčin 2 medzivýsledkových matíc jsúčin 2 medzivýsledkových matíc j-1 sp-1 spôsobmi:ôsobmi:

AAjj x x ((AAj+1j+1 x … x A x … x Aj+i-1 j+i-1 ))

((AAjj x A x Aj+1 j+1 ) x (… x A) x (… x Aj+i-1 j+i-1 ))

……

((AAjj x A x Aj+1 j+1 x … ) x Ax … ) x Aj+i-1 j+i-1

Page 19: Metódy návrhu efektívnych algoritmov

1919

Štruktúra optimálneho riešeniaŠtruktúra optimálneho riešenia (3) (3)

PoPočet operácií pri ozátvorkovaníčet operácií pri ozátvorkovaní

((AAjj x A x Aj+1j+1 x … x A x … x Aj+k-1j+k-1) x (A) x (Aj+kj+k x … x A x … x Aj+i-1 j+i-1 ))

súčin k matíc

optimum M[k, j]

súčin j-k matíc

optimum M[j-k, j+k]

celkovo:celkovo:

M[k, j] + M[i-k, j+k] + p[j-1] x p[j-k-1] x p[j+i-1]M[k, j] + M[i-k, j+k] + p[j-1] x p[j-k-1] x p[j+i-1]

Page 20: Metódy návrhu efektívnych algoritmov

2020

Štruktúra optimálneho riešeniaŠtruktúra optimálneho riešenia

MM[i, j] = min {[i, j] = min {M[k, j] + M[i-k, j+k] + p[j-1] x p[j-k-1] x p[j+i-1], M[k, j] + M[i-k, j+k] + p[j-1] x p[j-k-1] x p[j+i-1],

pre k=1, …, i-1}pre k=1, …, i-1}

VVšimnišimnimeme si si

k k < i< i

j-k < Ij-k < I

Ak budeme postupne počítať hodnoty pre iAk budeme postupne počítať hodnoty pre i=1, …, N tak =1, …, N tak mmáme hľadané riešenieáme hľadané riešenie

Page 21: Metódy návrhu efektívnych algoritmov

2121

for j:=1 to N do M[1,j]:=0;

for i:=2 to N do

for j:=1 to N-i+1 do

begin

Min:=maxint;

for k:=1 to i-1 do

begin

Poc:= M[k,j] + M[i-k,j+k] +

P[j-1] * P[j+k-1] * P[j+i-1];

if Poc < Min then Min:=Poc

end;

M[i,j]:=Min

end;

Page 22: Metódy návrhu efektívnych algoritmov

2222

RekonRekonštrukcia optimálneho riešeniaštrukcia optimálneho riešenia

Pri výpočte MPri výpočte M[i, j] si do [i, j] si do ďalšieho poľa ďalšieho poľa poznamenáme, cez ktoré poznamenáme, cez ktoré “rozdelenie” bolo “rozdelenie” bolo dosiahnutdosiahnuté minimum vypočítané v Mé minimum vypočítané v M[[ii, j], j]

SpSpätným prechodom zrekonštruujeme optimálne ätným prechodom zrekonštruujeme optimálne ozátvorkovanieozátvorkovanie

Page 23: Metódy návrhu efektívnych algoritmov

2323

Dynamické programovanieDynamické programovanie

Iné úlohy:Iné úlohy:

najdlhšia spoločná podpostupnosťnajdlhšia spoločná podpostupnosť

najdlhšia rastúca podpostupnosťnajdlhšia rastúca podpostupnosť

Úloha:Úloha:

záhrada s rozmermi m x nzáhrada s rozmermi m x n

na každom políčku je Ana každom políčku je A[i, j] jab[i, j] jabĺkĺk

začíname v ľavom hornom rohu a v rámci každého začíname v ľavom hornom rohu a v rámci každého kroku sa môžeme pohnúť doprava alebo dolekroku sa môžeme pohnúť doprava alebo dole

pri ktorej ceste nazbierame najviac jabĺk pri ktorej ceste nazbierame najviac jabĺk ??