1 / 34

Graphs & Graph Algorithms

Graphs & Graph Algorithms. ( “FÅP”: First-year Project Course, ITU, Denmark ). Claus Brabrand [ brabrand@itu.dk ]. Outline. Graphs Graph Representations Krak Data Representation Breadth First Search (BFS) Depth First Search (DFS) Topological Sorting Exercises

abrial
Download Presentation

Graphs & Graph Algorithms

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Graphs &Graph Algorithms ( “FÅP”: First-year Project Course, ITU, Denmark) Claus Brabrand [ brabrand@itu.dk ]

  2. Outline • Graphs • Graph Representations • Krak Data Representation • Breadth First Search (BFS) • Depth First Search (DFS) • Topological Sorting • Exercises • Project (part 1): ”Visualization”

  3. Definition: GRAPH • A ”graph G = (V,E)” consists of: • V: a set of vertices(nodes)(knuder) • E: a set of edges(arcs)(kanter) • where EV V • There is an edge between ’v1’ and ’v2’ if • (v1, v2)  E (abbreviated: ”v1  v2”) • Example: { 1, 2, 3, 4 } V = vertex { (1,2), (2,1), (2,3), (3,1), (4,2) } E = edge

  4. Oriented vs. Non-oriented • Directed graph:(orienteret graf) • Undirected graph:(ikke-orienteret) { 1, 2, 3, 4 } V = { (1,2), (2,1), (2,3), (3,1), (4,2) } E = { 1, 2, 3, 4 } V = { (1,2), (2,1), (1,3), (3,1), (2,3), (3,2), (2,4), (4,2) } E = v1  v2  v2  v1

  5. Graph Examples • Roadmap: roads and intersectionsproject! • Powergrid: wires and connexions • Rivers: river and confluences • World Wide Web: pages and links • Facebook: people and friends-of • Data structures: objects and references • Class hierarchies: classes and inheritances • Bacon index: people and co-starring

  6. Graph Terminology • A path(sti) is a sequence of adjacent edges: • p = (e0, e1, …, en) • A cycle (kreds) is a non-empty path from a vertex to itself: • p = (e0, e1, …, en) e1 e0 en v0  v1  …  vn+1 = = = (v0,v1) (v1,v2) (vn,vn+1) v0  v1  …  v0 = = (v0,_) (_,v0)

  7. Graph Terminology (cont’d) • A directed acyclic graph (DAG) (orienteret acyklisk graf) is a connected graph w/o cycles: • A tree (træ) is a connected acyclicgraph every node has indegree 0 or 1 (i.e., a DAG w/o ”sharing”):

  8. Graph Properties • A graph ”G= (V,E)” is: • Reflexive: • Symmetric: • Transitive: v1V: v1v1 v1,v2V: v1v2 v2v1 v1,v2,v3V: v1v2 v2v3  v1v3

  9. What is this? The ”borders-with” relation (for the Europeanmainland)

  10. Graph Visualization • The ”Graphviz” Tool: • [ http://www.graphviz.org ] graph nfa { overlap=false; splines=true; DK -- DE; DE -- NL; DE -- BE; DE -- LU; DE -- FR; DE -- CH; DE -- AT; DE -- CZ; DE -- PL; … } graphviz ’.dot’ file

  11. Edge Information • Often, information associated with edges • e.g., Roadmaps: • e.g., Powergrid: • e.g., Bacon-index: • … 305 km Aarhus KBH 175 min 220 V Agave 70 Outlet 10 A Mr. & Mrs. Smith B.Pitt A.Jolie 2005

  12. Graph Visualization (cont’d) • The ”Graphviz” Tool: • [ http://www.graphviz.org ] graph nfa { n571 -- n9 [label="Kirkevej"]; n9 -- n184 [label="Kongeledet"]; n7 -- n200 [label="Norasvej"]; n46 -- n10 [label="Norasvej"]; n7 -- n160 [label="Skovagervej"]; n28 -- n71 [label="Kirkevej"]; … } graphviz ’.dot’ file

  13. Outline • Graphs • Graph Representations • Krak Data Representation • Breadth First Search (BFS) • Depth First Search (DFS) • Topological Sorting • Exercises • Project (part 1): ”Visualization”

  14. 1) Edge List Representation • Problem: • We have to examine entire edge-list(in linear time)to answer questions about a node ’N’ • Performance: • boolean isEdge(Node n, Node m)O( |E| ) • List<Node> inEdges(Node n)O( |E| ) • List<Node> outEdges(Node n)O( |E| ) Just put all edges in ”one big” edge list: E = [ (1,2), (2,1), (2,3), (3,1), (4,2) ] Space: O( |E| )

  15. 2) Adjacency List Repr. • Performance: • boolean isEdge(Node n, Node m)O( outdeg(n) ) • List<Node> inEdges(Node n)O( indeg(n) ) • List<Node> outEdges(Node n)O( outdeg(n) ) Each node has its own edge list of… …and incoming edges: outgoing… outgoing: 1:[ [ (1,2) ], 2:[ (2,1), (2,3) ], 3:[ (3,1) ], 4:[ (4,2) ] ] incoming: 1: [ [ (2,1), (3,1) ], 2:[ (1,2), (4,2) ], 3: [ (2,3) ], 4: [ ] ] Space: O( |V| + |E| )

  16. 3) Adjacency Matrix Repr. • Performance: • boolean isEdge(Node n, Node m)O( 1 ) • List<Node> inEdges(Node n)O( |V| ) • List<Node> outEdges(Node n)O( |V| ) Space: O( |V|2 ) always! 

  17. Outline • Graphs • Graph Representations • Krak Data Representation • Breadth First Search (BFS) • Depth First Search (DFS) • Topological Sorting • Exercises • Project (part 1): ”Visualization”

  18. ”KRAK” Data Representation Krak data: • NB: only for teachingand research at ITU ! • Size: ~ 150 MB (big) • Sealand: 209.402 roads • Lots of challenges: • Efficient visualization • Effective browsing • Efficient road searching • Calculate fastest routes • … ”KDV” (Kraks Danske Vejnet):

  19. UTM Coordinates • UTM(Universal Transverse Mercator net): • Approximated (x,y)-coordinates for earth • 60x24 zones: • (west) 01, …, 60 (east) • (south) A, …, Z (north) • Denmark is in zones: • 32V + 32U + 33U • KRAK: • Coord’s converted to (”zone 32”, meters N of equator) • E.g., US military 1940s ”Rued Langgaards Vej”: (x1,y1) = (725696.40753, 6174169.66806) (x2,y2) = (725860.58568, 6174110.34971)

  20. Edges (roads): Vertices (intersections): ”KRAK” Data Representation 208484, // arc node#// (not used) 132371, // node# 441762, // national node# 725696.40753, // UTM: # meters // west of zone 28 6174169.66806 // UTM: # meters // north of equ’tr 132371, // from node#132196, // to node#199.34533, // length, meters208484,208484,6, // road type'Rued Langgaards Vej’, // name0,0,0,0, // to/from house#s,,,,0,0, 2300,2300, // to/from zipcode101,6005,0,,0,0,10, // speed limit1.375, // drive time, min,,,10178744,09/04/02,4164866 ”kdv_unload.txt” ”kdv_node_unload.txt”

  21. Node: Edge: ”graphlib” Representation ”krak-kode-faap-1.zip”: Contains code for reading the KRAK data format and for building a graph! package graphlib; public class Edge<N extends Node> { // fields: public N v1; public N v2; protected byte direction; public static final byte FORWARD = 1, BACKWARD = 2, BOTH = FORWARD | BACKWARD; // constructors: protected Edge() {} public Edge(N n1, N n2, byte dir) {…} // methods: public N getStart() {…} public N getOtherEnd(N n) {…} public N getEnd(){…} } package graphlib; public class Node { public final int index; public Node(int index) { this.index = index; } public final int getIndex() { return index; } }

  22. ”graphlib” Representation NB!: all lists start at index 1 (index 0 is bogus) • Graph: NB!: ”node.index” are numbered & initialized 1..N+1 public class Graph<E extends Edge<N>, N extends Node> { // fields: public ArrayList<N> nodes; //list of all nodes int edgeCount = 0; public ArrayList<ArrayList<E>> edges; //nodes: list of edges ArrayList<ArrayList<E>> reverse_edges; //nodes: list of rev-edges //(excepting the BOTH edges) // constructor: public Graph(ArrayList<N> nodes) {…} // methods: public int getEdgeCount() {…} public void addEdges(Collection<E> c) {…} public void addEdge(E e) {…} public N getNode(int index) {…} public Iterator<E> outGoingEdges(Node n) {…} public Iterator<E> incomingEdges(Node n) {…} }

  23. Outline • Graphs • Graph Representations • Krak Data Representation • Breadth First Search (BFS) • Depth First Search (DFS) • Topological Sorting • Exercises • Project (part 1): ”Visualization”

  24. Breadth First Search (BFS) • Breadth First Search (BFS): 1) Make queue of nodes to be visited 2) Enqueue start node in queue 3) While queue not empty do:4) Dequeue node v from queue5) If v not already visited then:6) Mark v as visited (count++)7) Enqueue all of v’s neighbours

  25. BFS.java Set<Node> exploredNodes = new HashSet<Node>(); Queue<Node> queue = new LinkedList<Node>(); (1) queue.offer(start); (2) while (!queue.isEmpty()) { (3) Node v = queue.poll(); (4) if (!exploredNodes.contains(v)) { (5) System.out.print(v.index + " "); // print exploredNodes.add(v); (6) for (Edge<Node> edge: graph.edges.get(v.index)) {(7) Node w = edge.getOtherEnd(v); queue.offer(w); } } } enqueue dequeue 1) Make queue of nodes to be visited 2) Enqueue start node in queue 3) While queue not empty do: 4) Dequeue node v from queue 5) If v not already visited then: 6) Mark v as visited (count++) 7) Enqueue all of v’s neighbours enqueue

  26. Outline • Graphs • Graph Representations • Krak Data Representation • Breadth First Search (BFS) • Depth First Search (DFS) • Topological Sorting • Exercises • Project (part 1): ”Visualization”

  27. Depth First Search (DFS) • Depth First Search (DFS): 1) Make stack of nodes to be visited 2) Push start node onto stack 3) While stack not empty do: 4) Pop node v from stack 5) If v not already visited then: 6) Mark v as visited (count++) 7) Push all of v’s neighbours onto stack

  28. Exercise: DFS.java push pop 1) Make stack of nodes to be visited 2) Push start node onto stack 3) While stack not empty do: 4) Pop node v from stack 5) If v not already visited then: 6) Mark v as visited (count++) 7) Push all of v’s neighbours onto stack push

  29. Outline • Graphs • Graph Representations • Krak Data Representation • Breadth First Search (BFS) • Depth First Search (DFS) • Topological Sorting • Exercises • Project (part 1): ”Visualization”

  30. Topological Sorting (a DAG) • (Assumption: no cycles) • Uses: • Sequence of activities in a building project • Recalculation sequence in a spread-sheet • Observation: • In a finite acyclic graph there exists at least one node with indegree zero… “A topological ordering of a DAG is a linear ordering of its nodes in which each node comes before all nodes to which it has outbound edges.” -- Wikipedia

  31. Topological Sorting (cont’d) • Topological Sorting: • Efficient implementation: • Maintain ”HashMap<Node,Integer>” of all indegrees • Maintain ”Stack<Node>” of nodes with indegree zero 1) Initialize empty topologically ordered node list 2) Repeat until no more nodes: 3) Pick a node v without incoming edges* 4) Push v onto topologically ordered list 5) Remove v from graph; and 6) Remove all edges out of v *) if no such node exists, the graph is cyclic Time: O( |V| + |E| )

  32. Outline • Graphs • Graph Representations • Krak Data Representation • Breadth First Search (BFS) • Depth First Search (DFS) • Topological Sorting • Exercises • Project (part 1): ”Visualization”

  33. [cf. Homepage] Exercises (week 8) • 8.1: Breadth First Search • Run the code (from lecture) on example graph in book • 8.2: Breadth First Search w/ Levels • Implement BFS, with explicit levels (distance from start) • 8.3: Depth First Search • Change the BFS to a DFS algorithm (try it on book ex.) • 8.4: Indegrees • Implement method ”int indegree(Node node)” in Graph • 8.5: Topological Sorting • Implement ”static ArrayList<Node> topsort(Graph<…>)”

More Related