1 / 82

Prioritetskøer

Prioritetskøer. Binære heaper Venstrevridde heaper (Leftist) Skeive heaper (Skew) Binomialheaper Fibonacciheaper Prioritetskøer er viktige i bla. operativsystemer (prosesstyring i multitaskingssystemer), og søkealgoritmer (A, A*, D*, etc.). Prioritetskøer.

baxter
Download Presentation

Prioritetskøer

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. Prioritetskøer • Binære heaper • Venstrevridde heaper (Leftist) • Skeive heaper (Skew) • Binomialheaper • Fibonacciheaper Prioritetskøer er viktige i bla. operativsystemer (prosesstyring i multitaskingssystemer), og søkealgoritmer (A, A*, D*, etc.).

  2. Prioritetskøer Prioritetskøer er datastukturer som holder elementer med en prioritet (key) i en kø-aktig struktur, og som implementerer følgende operasjoner: • insert() – Legge et element inn i køen • deleteMin() – Ta ut elementet med høyest prioritet Og kanskje også: • buildHeap() – Lage en kø av en mengde elementer • increaseKey()/DecreaseKey() – Endre prioritet • delete() – Slette et element • merge() – Slå sammen to prioritetskøer

  3. Prioritetskøer En usortert lenket liste kan brukes. insert() legger inn først i listen (O(1)) og deleteMin() søker igjennom listen etter elementet med høyest prioritet (O(n)). En sortert liste kan brukes. (Omvendt kjøretid.) – Ikke så veldig effektivt. For å lage en effektiv prioritetskø, holder det at elementene i køen er ”nogenlunde sorterte”.

  4. Binære heaper(vanligst) En binærheap er organisert som et komplett binærtre. (Alle nivåer fulle, med evt. unntak av det siste nivået) I en binærheap skal elementet i roten ha en key som er mindre eller lik key’en til barna, i tillegg skal hvert deltre være en binærheap. 1 a 2 b c 3 d e f g 4 h i j

  5. Binære heaper(vanligst) En binærheap er organisert som et komplett binærtre. (Alle nivåer fulle, med evt. unntak av det siste nivået) I en binærheap skal elementet i roten ha en key som er mindre eller lik key’en til barna, i tillegg skal hvert deltre være en binærheap. 1 a 2 b c 3 d e f g 2i 4 h i j

  6. Binære heaper(vanligst) En binærheap er organisert som et komplett binærtre. (Alle nivåer fulle, med evt. unntak av det siste nivået) I en binærheap skal elementet i roten ha en key som er mindre eller lik key’en til barna, i tillegg skal hvert deltre være en binærheap. 1 a 2 b c 3 d e f g 2i+1 4 h i j

  7. Binære heaper(vanligst) En binærheap er organisert som et komplett binærtre. (Alle nivåer fulle, med evt. unntak av det siste nivået) I en binærheap skal elementet i roten ha en key som er mindre eller lik key’en til barna, i tillegg skal hvert deltre være en binærheap. 1 a 2 i / 2 b c 3 d e f g 4 h i j

  8. Binære heaper(vanligst) 1 13 2 21 16 3 31 19 68 24 26 65 32 4

  9. Binære heaper(vanligst) insert(14) 1 13 2 21 16 3 19 68 24 31 26 65 32 4

  10. Binære heaper(vanligst) insert(14) 1 13 2 21 16 3 19 68 24 31 26 14 65 32 4

  11. Binære heaper(vanligst) insert(14) 1 13 2 21 16 3 19 68 24 31 25 14 65 32 4

  12. Binære heaper(vanligst) insert(14) 1 13 2 21 16 3 19 68 24 14 26 31 65 32 4

  13. Binære heaper(vanligst) insert(14) 1 13 2 21 16 3 19 68 24 14 26 31 65 32 4

  14. Binære heaper(vanligst) insert(14) 1 13 2 14 16 3 19 68 24 21 26 31 65 32 4

  15. Binære heaper(vanligst) insert(14) 1 13 2 14 16 3 19 68 24 21 65 26 31 32 4

  16. Binære heaper(vanligst) insert(14) 1 13 2 14 16 3 19 68 23 21 26 31 65 32 4 ”percolateUp()”

  17. Binære heaper(vanligst) deleteMin() 1 13 2 14 16 3 19 68 19 21 26 31 65 32 4

  18. Binære heaper(vanligst) deleteMin() 1 2 14 16 3 19 68 19 21 26 31 65 32 4

  19. Binære heaper(vanligst) deleteMin() 1 31 2 14 16 3 19 68 19 21 26 65 32 4

  20. Binære heaper(vanligst) deleteMin() 1 14 2 31 16 3 19 68 19 21 26 65 32 4

  21. Binære heaper(vanligst) deleteMin() 1 14 2 19 16 3 19 68 31 21 26 65 32 4

  22. Binære heaper(vanligst) deleteMin() 1 14 2 19 16 3 19 68 26 21 31 65 32 4

  23. Venstrevridde heaper For å implementere merge() effektivt, går vi bort fra tabell-metoden, og ser på såkalte venstrevridde heaper (leftist heaps), som rene trær. Tanken er å gjøre heapen (treet) skeivt, slik at vi kan gjøre det meste av arbeidet på den laveste delen av treet. En venstrevridd heap er et binærtre med heap-struktur (røttene i deltrærne skal ha lavere key enn barna.) og et ekstra skeivhetskrav. For alle noder X i treet, definerer vi nullsti-lengede(X) (null path length) som lengden av korteste sti fra X til en node som ikke har to barn. Kravet er at for alle noder, skal nullsti-lengden til det venstre barnet være minst like stor som nullsti-lengden til det høyre barnet.

  24. Venstrevridde heaper 1 1 0 0 0 LEFTIST 1 0 1 0 0 1 0 0 IKKE LEFTIST

  25. Venstrevridde heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26

  26. Venstrevridde heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26

  27. Venstrevridde heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26

  28. Venstrevridde heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26

  29. Venstrevridde heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 8 18 17 26

  30. Venstrevridde heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 7 37 8 18 17 26

  31. Venstrevridde heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 7 37 8 18 17 26

  32. Venstrevridde heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 6 12 7 18 24 37 8 18 33 17 26

  33. Venstrevridde heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 3 10 6 21 14 12 7 23 18 24 37 8 18 33 17 26

  34. Venstrevridde heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 3 6 10 21 14 12 7 23 18 24 37 8 18 33 17 26

  35. Venstrevridde heaper 5 3 insert(3) merge() 7 6 10 1 deleteMin() merge() 5 3 7 6 11 10

  36. Venstrevridde heaper W.C. merge()O(log N) insert()O(log N) deleteMin()O(log N) buildHeap()O(N) (N = antall elementer) I venstrevridde heaper med N noder, er høyre sti maksimalt log (N+1) lang.

  37. Skeive heaper Skeive heaper (skew heaps) er en selvbalanserende variant av venstrevridde heaper. Vi har ikke lengre noe eksplisitt skeivhetskrav, som for de venstrevridde heapene, og vi vedlikeholder ingen nullsti-lengde, heapen er selvjusterende (analogt med AVL/Splay-trær). For skeive heaper er merge()-rutinen den samme som for venstrevridde heaper, men vi bytter alltid om på barna, bortsett fra noden med høyest key i de høyre stiene (denne har ikke noe høyre barn).

  38. Skeive heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26

  39. Skeive heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26

  40. Skeive heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26

  41. Skeive heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 8 18 17 26

  42. Skeive heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 8 17 18 26

  43. Skeive heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 7 37 8 17 18 26

  44. Skeive heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 7 37 8 17 18 26

  45. Skeive heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 6 12 7 18 24 37 8 22 17 18 26

  46. Skeive heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 6 7 12 37 18 24 8 17 18 22 26

  47. Skeive heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 3 10 6 21 14 7 12 23 37 18 24 8 17 18 22 26

  48. Skeive heaper merge() 3 6 10 8 12 7 21 14 18 24 18 17 37 23 33 26 3 10 6 21 14 7 12 23 37 18 24 8 17 18 22 26

  49. Binomialheaper Venstrevridde / skeive heaper: merge(), insert() og deleteMin() i tid O(log N). Binære heaper: insert() i tid O(1) i gjennomsnitt. Binomialheaper merge(), insert() og deleteMin() i tid O(log N) W.C. insert() i tid O(1) i gjennomsnitt. Binomialheaper er ikke trær, men en skog av trær, hvert tre en heap.

  50. Binomialheaper Binomialtrær B0

More Related