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