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
Metódy návrhu efektívnych Metódy návrhu efektívnych algoritmovalgoritmov
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.))
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
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í
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 (???)
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 !
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
88
Programujeme …Programujeme …
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))
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ď
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
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
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))
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;
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
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í ??
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
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
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]
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
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;
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
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 ??