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)