Prioritets Köer (Priority Queues ), Graph Data Structures & Problem Solving using Java --Kap 21,14 Köer med prioritet, varför? Ett behov av olika prioritesnivåer. Skrivare-kö TCP/IP Stack 1-sida skrivs ut/ 100-sidor skrivs ut ”Fast-lane” för mycket viktig trafik (RT) Real-tid system Schemaläggning Prioritets tilldellning Varje uppgift / objekt i kön innehåller också ett prioritet-nummer Vanligtviss positiva heltal Där största värde har minsta prioritet Mer om priority queues… Viktiga operationer Lägg till, nya objekt Hitta, objektet med högst prioritet … med tilldelning av prioritet insert() … den mista prioritet-nummer findMin() Ta bort, objektet med högst prioritet deleteMin() (put, get, remove) or (enqueue, peek, dequeue) Passande datastruktur? Snaba insert Helst konstant tid ! Snabba romove och sökning Helst konstant tid ! En kompromis datastruktur mellan kö och binära träd…..?? Ordnad länkad-lista insert() konstant tid! findMin() Linjär tid… 3 2 4 H T Sorterad länkad-lista insert() Linjär tid… findMin() Konstant tid! 2 4 H 3 T Binära träd insert() log N findMin() log N Binära Träd insert() log N findMin() log N Balancerade binära träd insert() log N findMin() log N Kräver ”hårt” arbete för balancering Kompromis – Binary Heap Kombination av två egenskaper Strukturell egenskap Representeras inplicit Order egenskap Heap-order Structurell egenskap Implicit representation Representeras som ett komplett binär träd med array För ett objekt på array-position x: Left child på array-position 2x Rigth child på array-position 2x + 1 Parent at array-position x/2 Root 0 1 2 3 4 5 6 7 8 Order egenskap Heap-order För ett objekt X som har parent P gäller: X’s priority key has to be greater than P’s priority key Objektet med den minsta prioritetsnummer ( högst prioritet) finns alltid i rooten. Konstant tid for findMin()! Exempel – insert() 13 21 16 24 65 31 26 32 19 14 Percolate up 68 Exempel – Remove() 13 14 16 24 65 21 26 32 19 68 31 Percolate down … Hur bra är den? insert() log N -- Worstcase Konstant tid -- Average deleteMin() log N – Worstcase AND as an average Prioritets kö för sortering – Heapsort Använder a max heap Heapsort 1. 2. 3. (Strukturerar data ) Bygger heap Använder deleteMax för att ta bort data O(N log N) (worst-case) Heapsort – Steg 1 Kopierara data i en heap struktur Behövs inte om data redan är i array ? Heapsort – Steg 2 Bygger heap Perculate down frrån alla föräldrar Börjar med sista 2 4 5 6 1 7 3 Heapsort – Steg 3 Sortera med deleteMax 7 5 4 6 1 2 3 Heapsort – Step 3 Sort with deleteMax 7 5 4 6 1 2 3 Heapsort – Steg 3 Sortera med deleteMax 6 5 4 3 1 2 7 Heapsort – Steg 3 Sortera med deleteMax 5 4 2 3 1 6 7 Heapsort – Steg 3 Sortera med deleteMax 4 2 1 3 5 6 7 Heapsort – Steg 3 Sortera with deleteMax 3 2 4 1 5 6 7 Heapsort – Steg 3 Sortera med deleteMax 2 1 4 3 5 6 7 Slutsats Priority Queues Unsorted linked-list Sorted linked-list Binary trees Binary heap Heap sort Fast! (O(N log N) worst-case)