Algoritmer och datastrukturer Graf och Grafalgoritmer
Några enkla graf teorier Hur IP trafik hittar destinationen i Internät ? GPS-system ?
Några enkla graf teorier Sociala nätverk Vanligaste frågeställningar: Hur hittar man från A->B? Hur beräknas den kortaste vägen mellan A B
Terminology Vertices & edges ( Noder och förbindelse eller bågar) En nod a är granne till b i en oriktad graf om det finns en båge mellan a och b. Paths (väg) Viktad Oviktad Riktad Oriktad Göteborg Halmstad Varberg Göteborg Borås Jönköping Växjö 40 70 100 200 120 60 40 Borås 60 Jönköping 60 70 Varberg 200 120 70 Växjö 100 Halmstad
Mer terminology Path length Oviktad path length – antalet förbindelse mellan två noder Viktad path length- summan av vikter mellan två nod Riktad graph Visa förbindelse är enbart envägs Vikten för en förbindelse behövs inte vara dessama i båda riktningarna ( om båda finns) Göteborg Halmstad Varberg Göteborg Borås Jönköping Växjö 40 70 100 200 120 60 40 Borås 60 Jönköping 60 70 Varberg 200 120 70 Växjö 100 Halmstad
Mer terminology Simple paths ( Enkla vägar) Innehåller en nod enbart en gång Cyclic paths ( cykliska vägar) Startar och slutar i samma nod. Halmstad Varberg Göteborg Borås Jönköping Växjö 40 70 100 200 120 60
Ä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 1 Node 2 Node 6 Node 3 Node 6 Node 3 Node 5 Node 4 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. 1 2 (2) 4 (1) 2 5 (10) 4 (3) Node 1 2 Node 2 3 1 (4) 6 (5) 4 1 3 10 4 5 (2) 7 (4) 6 (8) 3 (2) Node 3 Node 4 Node 5 2 2 5 7 (6) 5 8 4 6 Node 6 Node 7 6 1 7 6 (1)
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 4 5 6 7 1 2 1 Node 1 2 Node 2 2 3 10 1 3 4 5 4 3 10 4 2 2 8 4 Node 3 Node 4 Node 5 2 2 5 6 5 8 4 6 6 Node 6 Node 7 7 1 1
Vad är en nod (vertex) ? protected class Vertex { String name; List adjacents; Vertex (String n) { name = n; adjacents = new LinkedList(); } }
Vad är en förbindelse? public class Edge { public Vertex dest; public double cost; public Edge( Vertex d, double c) { dest=d; cost=c; } }
Traversera graf- Bredden-först: Motsvarar närmast level-by-level-traversering av träd. Man besöker först utgångsnoden, sedan dess grannar, sedan grannarnas grannar osv. Använder en extra attribut ”visited-attribut”. Endast noder till vilka det finns en väg från utgångsnoden kommer att besökas. Djupet först- ett annat teknik för graf traversering
Bredden-först – tillämpning – hitta kortaste vägen i oviktade grafer 1 2 Node 3 Node 1 Node 2 1 Node 1 1 Node 6 2 3 Node 3 Node 4 Node 5 2 Node 2 2 Node 4 1 3 3 Node 5 Node 6 Node 7 3 Node 7
Dijkstra’s Algorithm For viktade grafer Distance From 2 1 3 4 5 8 Node 1 Node 2 Node 1 Node 2 Node 3 Node 3 Node 4 Node 5 Node 4 Node 5 Node 6 Node 6 Node 7 Node 7
Dijkstra’s Algorithm För viktade grfer Distance From 2 1 3 4 5 8 Node 1 Node 2 Node 1 4 INF 3 Node 1 (4) Node 2 6 INF 1 Node 4 (5) Node 2 (6) Node 6 (5) Node 3 - Node 3 Node 4 Node 5 Node 4 5 INF 1 Node 5 INF Node 6 5 INF 3 Node 6 Node 7 Node 7 INF
Dijkstra’s Algorithm Distance From 2 1 3 4 5 8 Node 1 4 3 Node 6 (5) For viktade grafer! Distance From 2 1 3 4 5 8 Node 1 Node 2 Node 1 4 3 Node 6 (5) Node 2 6 1 Node 4 (5) Node 5 (8) Node 3 - Node 3 Node 4 Node 5 Node 7 (9) Node 2 (6) Node 4 5 1 Node 5 INF 8 4 Node 6 5 3 Node 6 Node 7 Node 7 INF 9 4
Dijkstra’s Algorithm Distance From 2 1 3 4 5 8 Node 1 4 3 Node 2 (6) För viktade grapher! Distance From 2 1 3 4 5 8 Node 1 Node 2 Node 1 4 3 Node 2 (6) Node 5 (7) Node 2 6 1 Node 5 (8) Node 3 - Node 3 Node 4 Node 5 Node 7 (9) Node 4 5 1 Node 5 7 8 4 2 Node 6 5 3 Node 6 Node 7 Node 7 8 9 5 4
Dijkstra’s Algorithm Node 1 3 Node 2 1 3 Node 1 Node 2 Node 3 Node 4 För viktade grapher! Node 1 3 Node 2 1 3 Node 1 Node 2 Node 3 Node 4 Node 5 Node 6 Node 7 Distance From - 4 5 3 1 6 7 2 8 Node 6 Node 7 Node 1 Node 2 Node 5 Node 3 Node 4 2 1 3 4 5 8 Node 3 Node 4 1 3 Node 5 2 1 3 Node 6 3 Node 7 5 2 1 3