1 / 34

Divide et impera Rozdeľuj a panuj

Divide et impera Rozdeľuj a panuj. Maroš Dzuriš, Marian Pruchnerovič (Seminár z informatiky). Obsah. Princíp a formálny zápis História Výhody a Nevýhody Quicksort Binárne vyhľadávanie Mergesort. Rozdeľuj a panuj - princíp.

evita
Download Presentation

Divide et impera Rozdeľuj a panuj

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Divide et impera Rozdeľuj a panuj Maroš Dzuriš, Marian Pruchnerovič (Seminár z informatiky)

  2. Obsah • Princíp a formálny zápis • História • Výhody a Nevýhody • Quicksort • Binárne vyhľadávanie • Mergesort Dzuriš,Pruchnerovič

  3. Rozdeľuj a panuj - princíp • výrok sa pripisuje macedónskému kráľovi Filipovi II (382-336 p.n.l.) • zložitý problém sa rieši pomocou menších (jednoduchších) problémov • riešenie prístupom rozdeľuj a panuj je založené na multi - rozvetvenej rekurzii Dzuriš,Pruchnerovič

  4. Rozdeľuj a panuj - princíp • riešenie pod-problémov sa zlúči, aby sa vyriešil základný problém • Napr. quicksort, mergesort, hanojské veže, syntaktická analýza, binárne vyhľadávanie Dzuriš,Pruchnerovič

  5. Rozdeľuj a panuj - princíp • P- riešený problém, N - rozmer dát, potom môžeme zapísať: • P(N) → P(N1) → P(N2) + ... + P(Nk) + KOMB(N) • problém rádu N sme rozdelili na k pod-problémov • Zefektívnenie z O(n) → O(log2n). Dzuriš,Pruchnerovič

  6. Formálny zápis rozdeľuj_a_panuj(N) {      pokial+ N je dostatočne nízke vráťKonečná_podmienka(N);      inak      {      "Rozdeľ" P(N) na jednotlivé časti       P(N1), P(N2),...P(NK)       Pre  i= 1 ... K         vypočítaj jednotlivý výsledok wi = rozdel_a_panuj(N1);       vráť KOMB(w1, w2, .., wk);       } } Dzuriš,Pruchnerovič

  7. História • 200 r. pred Kristom v Babylone –myšlienky použiť triedenie pre uľahčenie vyhľadávanie s jednými pod problémom • 1946 Johan Mauchly – v jeho článku sa objavuje popis spomínaného algoritmu • 1945 John von Neuman –alg. rozdeľuj a panuj z dvoma podproblémami – Merge sort Dzuriš,Pruchnerovič

  8. Výhody algoritmu rozdeľuj a panuj • riešenie zložitých problémov • často pomáha pri objavení efektívnych algoritmov (quicksort, mergesort, Strassen alg. pre násobenie matíc, Fourierova transformácia) • paralelizmus – prispôsobený pre výkon v multiprocesorových strojoch • efektívne využitie pamäte Dzuriš,Pruchnerovič

  9. Nevýhody algoritmu rozdeľuj a panuj • pri jednoduchých algoritmoch môže byť neefektívna a zbytočná Dzuriš,Pruchnerovič

  10. Quciksort • jeden z najrýchlejších známych triediacich algoritmov, založených na porovnávaní prvkov Princíp: • Výber pivota • Rozdelenie na dve časti • Rekurzívne triedenie oboch častí Dzuriš,Pruchnerovič

  11. Quciksort • vizualizácia: Dzuriš,Pruchnerovič

  12. Quciksort • Ukážka triediaceho algoritmu quicksort pomocou algoritmu rozdeľuj a panuj v Jave: Dzuriš,Pruchnerovič

  13. Quciksort • publicclass quicksort • { • publicstaticvoid swap(int[]pole,int a,int b){ • int k=pole[a]; • pole[a]=pole[b]; • pole[b]=k; • } • publicstaticint partition(int [] pole,int begin, int end, int pivot){ • int piv=pole[pivot]; • swap(pole,pivot,end-1); • int store=begin; • for(int i=begin;i<end-1;i++){ • if(pole[i]<=piv){ • swap(pole,store,i); • store++; • } • } • swap(pole,end-1,store); • return store; • } Dzuriš,Pruchnerovič

  14. Quciksort • publicstaticvoid qsort(int []pole,int begin, int end){ • if(end-1>begin){ • int pivot=(int) (begin+((end-begin)/2)); • pivot=partition(pole, begin, end, pivot); • qsort(pole, begin, pivot); • qsort(pole, pivot+1, end); • } • } • publicstaticvoid quick_sort(int [] pole){ • qsort(pole, 0, pole.length); • } • publicstaticvoid main(String[] args) { • // TODO Auto-generated method stub • quick_sort(int [] pole); • } • } Dzuriš,Pruchnerovič

  15. Binárne vyhľadávanie • nájdenie zadanej hodnoty v usporiadanom zozname pomocou skracovania zoznamu o polovicu v každom kroku • logaritmická zložitosť O(log n) • vyžaduje usporiadané pole Dzuriš,Pruchnerovič

  16. Binárne vyhľadávanie • Jednoduchý postup: • určíme stred, ľavý a pravý prvok • zistíme či prvok patri do ľavej alebo do pravej časti • nájdeme nový stred a rozdeľujeme postupnosť ďalej • koniec: • ak je hľadaný prvok stredom • prvok v postupnosti nie je Dzuriš,Pruchnerovič

  17. Binárne vyhľadávanie - schéma • begin while x != a[stred] do begin if a[stred] < x then posuň dolnú hranicu; else posuň hornú hranicu; vypočítaj nový stred; end end Dzuriš,Pruchnerovič

  18. MergeSort - Triedenie zlučovaním • 1945 John von Neumann • mal veľký význam v minulosti pri triedení údajov na magnetických páskach (sekvenčný prístup) • vyžaduje len malé množstvo pamäte s priamym prístupom Dzuriš,Pruchnerovič

  19. MergeSort - princíp • rozdelenie n-prvkovej postupnosti, ktorú treba utriediť, na dve pod postupnosti dĺžky približne n/2 • rekurzívne utriedenie podpostupností použitím MergeSortu • zlúčenie dvoch utriedených podpostupností do výslednej postupnosti Dzuriš,Pruchnerovič

  20. MergeSort - zlučovanie • obe postupností sú utriedené • stačí postupne 2 kurzormi prechádzať oboma podpostupnosťami → utriedená postupnosť • Lineárna časová zložitosť Dzuriš,Pruchnerovič

  21. MergeSort • vizualizácia: Dzuriš,Pruchnerovič

  22. MergeSort (sché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; Dzuriš,Pruchnerovič

  23. MergeSort -príklad • Postupnosť: 10 2 9 5 71 3 6 4 8 10 2 * 9 5 7 10<2 →2 10 – utriedené 9 * 5 7 9 →9 5<7 → 5 7 →spajanie →5<9 →7<9 →5 7 9 Dzuriš,Pruchnerovič

  24. MergeSort -príklad • 2 10 • 5 7 9 • Výsledok: Dzuriš,Pruchnerovič

  25. MergeSort -príklad • 2 10 • 5 7 9 • Výsledok:2 Dzuriš,Pruchnerovič

  26. MergeSort -príklad • 2 10 • 5 7 9 • Výsledok:2 5 Dzuriš,Pruchnerovič

  27. MergeSort -príklad • 2 10 • 5 7 9 • Výsledok:2 5 7 Dzuriš,Pruchnerovič

  28. MergeSort -príklad • 2 10 • 5 7 9 • Výsledok:2 5 7 9 Dzuriš,Pruchnerovič

  29. MergeSort -príklad • 2 10 • 5 7 9 • Výsledok:2 5 7 9 10 Dzuriš,Pruchnerovič

  30. MergeSort -príklad • 2 5 7 9 10 – utriedené • 1 3 6 4 8→1 3 4 6 8 -utriedené • Spájame: 2 5 7 9 10 + 1 3 4 6 8 • Výsledok: 1 2 3 4 5 6 7 8 9 10 Dzuriš,Pruchnerovič

  31. MergeSort • Zložitosť v najhoršom, najlepšom aj priemernom prípade je O(n.log n) • Rekurzia: T(n) = 2T(n/2) + n, • T(n/2)-rekurzívne volanie na obe podpolia • n – zlúčenie podpoli → Podľa Master Theorem → O(n log n) Dzuriš,Pruchnerovič

  32. Porovnanie • Priemerný prípad: • MergeSort pomalší ako Quicksort a rýchlejší ako Heapsort • Pamäťová zložitosť • MergeSort vyžaduje prídavnú pamäť • je odporúčaný najmä pre spájané zoznamy, pretože tam stačí konštantná prídavná pamäť. Dzuriš,Pruchnerovič

  33. Použitá literatúra • Thomas H. Cormen, Charles E. Leiserson, a Ronald L. Rivest, Introduction to Algorithms (MIT Press, 2000). • Brassard, G. and Bratley, P. Fundamental of Algorithmics, Prentice-Hall, 1996. • Anany V. Levitin, Introduction to the Design and Analysis of Algorithms (Addison Wesley, 2002). • Donald E. Knuth, The Art of Computer Programming: Volume 3, Sorting and Searching , second edition (Addison-Wesley, 1998). • http://en.wikipedia.org/wiki/Divide_and_conquer_algorithm • http://pascalsource.ic.cz/orion/viewtopic.php?t=77 • http://www.dcs.fmph.uniba.sk/bakalarky/obhajene/getfile.php/Triediace_algoritmy.pdf?id=4&fid=6&type=application%2Fpdf • Niklaus Wirth: Algoritmy a štruktúry údajov, ALFA, Bratislava, 1987 • http://en.wikipedia.org/wiki/Merge_sort • ics.upjs.sk/~galcik/files/progLS2007/EfektivneAlgoritmy.ppt • http://www.sum-it.nl/quicksort.php3 Dzuriš,Pruchnerovič

  34. Ďakujeme za pozornosť!

More Related