Algoritmer och Datastrukturer
--Kap 21,14
Prioritets Köer (Priority Queues ), Graph
För utveckling av verksamhet, produkter och livskvalitet.
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 real tid trafik (RT)
•
Real-tid system
• Schemaläggning
För utveckling av verksamhet, produkter och livskvalitet.
Prioritets tilldellning .Hur?
•
Varje uppgift / objekt i kön innehåller också ett prioritet-nummer
•
Vanligtviss positiva heltal
• Där största värde har minsta prioritet
För utveckling av verksamhet, produkter och livskvalitet.
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)
För utveckling av verksamhet, produkter och livskvalitet.
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…..??
För utveckling av verksamhet, produkter och livskvalitet.
Ordnad länkad-lista
•
•
insert()
•
konstant tid!
findMin()
•
Linjär tid…
3
2
4
H
T
För utveckling av verksamhet, produkter och livskvalitet.
Sorterad länkad-lista
•
•
insert()
•
Linjär tid…
findMin()
•
Konstant tid!
2
4
H
3
T
För utveckling av verksamhet, produkter och livskvalitet.
Binära sökträd
•
•
insert()
•
log N
findMin()
•
log N
För utveckling av verksamhet, produkter och livskvalitet.
Binära sökträd
•
•
insert()
•
log N
findMin()
•
log N
För utveckling av verksamhet, produkter och livskvalitet.
Balancerade binära träd
•
•
insert()
•
log N
findMin()
•
log N
Kräver ”hårt” arbete för
balancering
För utveckling av verksamhet, produkter och livskvalitet.
Kompromis – Binary Heap
•
Kombination av två egenskaper
•
Strukturell egenskap
• Representeras inplicit
•
Order egenskap
• Heap-order
För utveckling av verksamhet, produkter och livskvalitet.
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
För utveckling av verksamhet, produkter och livskvalitet.
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()!
För utveckling av verksamhet, produkter och livskvalitet.
Exempel – insert()
13
21
16
24
65
31
26
32
19
14
Percolate up
För utveckling av verksamhet, produkter och livskvalitet.
68
Exempel – Remove()
13
14
16
24
65
21
26
32
19
31
Percolate down
För utveckling av verksamhet, produkter och livskvalitet.
68
… Hur bra är den?
•
•
insert()
•
log N -- Worstcase
•
Konstant tid -- Average
deleteMin()
•
log N – Worstcase AND as an average
För utveckling av verksamhet, produkter och livskvalitet.
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)
För utveckling av verksamhet, produkter och livskvalitet.
Graph och graph-algoritmer
Data Structures & Problem Solving using Java
-- Kapitel 14
För utveckling av verksamhet, produkter och livskvalitet.
Några enkla graf teorier
•
•
•
•
Hur IP trafik hittar destinationen i Internät ?
GPS-system ?
Hur hittas om det finns ett förbindelae mellan A->B?
Hur man beräknar den kortaste vägen mellan dator A och B ?
För utveckling av verksamhet, produkter och livskvalitet.
Terminology
•
•
•
Vertices & edges ( Noder och förbindelse)
Paths (väg)
•
Viktad
•
Oviktad
Göteborg
Borås
Riktad graph
Jönköping
•
Visa förbindelse är enbart envägs
70
•
Vikten för en förbindelse behövs inte vara dessama i båda
riktningarna ( om
båda finns)
Varberg
120
70
Växjö
Halmstad
För utveckling av verksamhet, produkter och livskvalitet.
Mer terminology

Path length
•
Oviktad path length – antalet förbindelse mellan två nod
•
Viktad path length- summan av vikter mellan två nod
Göteborg
Borås
Jönköping
70
Varberg
120
70
Växjö
Halmstad
För utveckling av verksamhet, produkter och livskvalitet.
Mer terminology
•
•
Simple paths ( Enkla vägar)
• Innehåller en nod enbart en gång
Cyclic paths
• Startar och slutar i samma nod.
Göteborg
Borås
Jönköping
70
Varberg
120
70
Växjö
Halmstad
För utveckling av verksamhet, produkter och livskvalitet.
Ännu mer terminology
•
Graph täthet
• Refererar till antalet förbindelse i grafen
• gles graph
• tät graph ( ~~ N2 förbindelse )
Node 1
Node 2
Node 6
Node 1
Node 3
Node 5
Node 2
Node 6
Node 4
För utveckling av verksamhet, produkter och livskvalitet.
Node 3
Node 5
Node 4
Graph representation
•
Adjacent list
• Varje node håller en länkad lista som innehåller information om grann- noder
och vikt.
2
Node 1
1
4
Node 3
Node 2
2
3
Node 4
8
5
2
2
5 (10)
3
1 (4)
6 (5)
4
5 (2)
7 (4)
5
7 (6)
Node 5
6
Node 7
1
2 (2)
4 (1)
4 (3)
10
4
Node 6
1
6
7
6 (1)
För utveckling av verksamhet, produkter och livskvalitet.
6 (8)
3 (2)
Graph representation
•
Adjacent matrix
•
En kvadratisk matris där raderna och kolumnerna är representerade av noder och elementen i matrisen av förbindelser.
För viktad graph innehåller elemnenten i matrisen just vikten
1
2
3
10
3
2
Node 4
8
5
2
6
4
Node 6
Node 7
1
Node 5
5
6
7
3 10
4
4
Node 3
4
1
2
Node 2
1
4
3
2
1
Node 1
2
5
2
2
8
5
6
6
7
För utveckling av verksamhet, produkter och livskvalitet.
4
1
Vad är en nod (vertex) ?
protected class Vertex
{
String name;
List adjacents;
Vertex(String n) {
name = n;
adjacents = new LinkedList();
}
}
För utveckling av verksamhet, produkter och livskvalitet.
Vad är en förbindelse?
public class Edge
{
public Vertex dest;
public double cost;
public Edge( Vertex d, double c)
{
dest=d;
cost=c;
}
}
För utveckling av verksamhet, produkter och livskvalitet.
...och Graph klassen
public class Graph
{
public static final double INFINITY = Double.MAX_VALUE;
private Map<String,Vertex> vertexMap = new HashMap<String,Vertex>( );
public void addEdge( String sourceName, String destName, double cost )
{
Vertex v = getVertex( sourceName );
Vertex w = getVertex( destName );
v.adj.add( new Edge( w, cost ) );
}
private Vertex getVertex( String vertexName )
{
Vertex v = vertexMap.get( vertexName );
if( v == null )
{
v = new Vertex( vertexName );
vertexMap.put( vertexName, v );
}
return v;
}
}
För utveckling av verksamhet, produkter och livskvalitet.
Viktiga frågor …
•
Den kortaste vägen mellan node A och B
•
•
Breadth First Algorithm, oviktad graph
Dijkstra’s Algorithm, viktad graph
För utveckling av verksamhet, produkter och livskvalitet.
Breadth First Algorithm
•
För oviktade graphs
1
2
Node 1
Node 2
2
0
Node 3
3
Node 5
Node 4
1
Node 6
3
Node 7
För utveckling av verksamhet, produkter och livskvalitet.
0
Node 3
1
Node 1
1
Node 6
2
Node 2
2
Node 4
3
Node 5
3
Node 7
Dijkstra’s Algorithm
For viktade graphs!
•
Node 1
Node 2
1
4
Node 3
Distance From
2
2
3
Node 4
8
5
1
3
1
4
Node 6
Node 5
Node 7
1
För utveckling av verksamhet, produkter och livskvalitet.
Node 1
Node 2
Node 3
Node 4
Node 5
Node 6
Node 7
Dijkstra’s Algorithm
För viktade grapher!
•
2
Node 1
1
4
Node 3
Node 2
2
3
Node 4
8
5
1
3
Node 5
1
4
Node 6
Node 1 (4)
Node 4
6 (5)
2
(6)
Node 7
1
För utveckling av verksamhet, produkter och livskvalitet.
Node 1
Node 2
Node 3
Node 4
Node 5
Node 6
Node 7
Distance From
INF
4
3
INF
1
6
0
INF
1
5
INF
INF
3
5
INF
Dijkstra’s Algorithm
For viktade grapher!
•
2
Node 1
1
4
Node 3
Node 2
2
3
Node 4
8
5
1
3
1
4
Node 6
Node 5
Node 6 (5)
Node 5
4 (8)
(5)
Node 7
2 (9)
(6)
Node 7
1
För utveckling av verksamhet, produkter och livskvalitet.
Node 1
Node 2
Node 3
Node 4
Node 5
Node 6
Node 7
Distance From
4
3
1
6
0
1
5
INF
4
8
3
5
INF
4
9
Dijkstra’s Algorithm
För viktade grapher!
•
2
Node 1
1
4
Node 3
Node 2
2
3
Node 4
8
5
1
3
1
4
Node 6
Node 5
Node 5
2 (7)
(6)
Node 5 (8)
Node 7 (9)
Node 7
1
För utveckling av verksamhet, produkter och livskvalitet.
Node 1
Node 2
Node 3
Node 4
Node 5
Node 6
Node 7
Distance From
4
3
1
6
0
1
5
2
4
7
8
3
5
5
4
8
9
Dijkstra’s Algorithm
För viktade grapher!
•
2
Node 1
Node 3
2
3
Node 4
8
5
3
Node 6
Node 7
1
Node 2
1
1
Node 4
1
Node 5
Node 5
2
Node 6
3
Node 7
5
1
4
3
Node 3
Node 2
1
4
Node 1
För utveckling av verksamhet, produkter och livskvalitet.
3
Node 1
3 Node 2
Node 3
1 Node
34
Node 5
Node 6
2 Node
17
Distance From
4
3
1
6
0
1
5
2
7
3
5
5
38