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ö 1-sida skrivs ut/ 100-sidor skrivs ut TCP/IP Stack ”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 … med tilldelning av prioritet insert() Hitta, objektet med högst prioritet … 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… H H T T
Sorterad länkad-lista insert() Linjär tid… findMin() Konstant tid! H H T 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/ Root
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 prioritets- nummer ( högst prioritet) finns alltid i rooten. Konstant tid for findMin()!
Exempel – insert() Percolate up
Exempel – Remove() 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. (Strukturerar data ) 2. Bygger heap 3. 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
Heapsort – Steg 3 Sortera med deleteMax
Heapsort – Step 3 Sort with deleteMax
Heapsort – Steg Sortera med deleteMax 5 5
Heapsort – Steg 3 Sortera med deleteMax
Heapsort – Steg 3 Sortera med deleteMax 1 1
Heapsort – Steg 3 Sortera with deleteMax
Heapsort – Steg 3 Sortera med deleteMax
Slutsats Priority Queues Unsorted linked-list Sorted linked-list Binary trees Binary heap Heap sort Fast! (O(N log N) worst-case)