1 / 38

Førsteårsprojekt (F2010)

Førsteårsprojekt (F2010). Claus Brabrand [ brabrand@itu.dk ] IT University of Copenhagen. Graphs & Graph Algorithms. Claus Brabrand [ brabrand@itu.dk ] IT University of Copenhagen. Outline. Graphs Graph Representations Breadth First Search (BFS) Depth First Search (DFS)

felix
Download Presentation

Førsteårsprojekt (F2010)

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. Førsteårsprojekt(F2010) Claus Brabrand[ brabrand@itu.dk ] IT University of Copenhagen

  2. Graphs &Graph Algorithms Claus Brabrand[ brabrand@itu.dk ] IT University of Copenhagen

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

  4. 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

  5. Directed vs. Undirected • 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

  6. 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

  7. Graph Terminology • A path(sti) is a list 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)

  8. 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”):

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

  10. Which properties does the graph satisfy? • reflexive • symmetric • transitive • reflexive, symmetric,and transitive • none of the above answers are correct a b c d

  11. Which properties does the graph satisfy? • reflexive • symmetric • transitive • reflexive, symmetric, andtransitive • none of the above answers are correct a b c d

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

  13. 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

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

  15. 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

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

  17. A) O(1) B) O(log(|E|)) C) O(|E|) D) O(|E|*log(|E|)) E) O(|E|2) F) Something else "Edge List" Representation • Performance: • boolean isEdge(Node n, Node m)? • void addEdge(Node n, Node m)? • void deleteEdge(Node n, Node m)? • List<Node> getEdges(Node n)? Just put all edges in ”one big” edge list: E = [ (1,2), (2,1), (2,3), (3,1), (4,2) ] O(|E|) O(1) O(|E|) O(|E|)

  18. A) O(1) B) O(log(|V|)) C) O(|V|) D) O(|V|*log(|V|)) E) O(|V|2) F) Something else "Adjacency Matrix" Repr. • Performance: • boolean isEdge(Node n, Node m)? • void addEdge(Node n, Node m)? • void deleteEdge(Node n, Node m)? • List<Node> getEdges(Node n)? Make a matrix with entry M[i,j]=1 iff there's an edge from vertex #i to vertex #j O(1) O(1) O(1) O(|V|)

  19. What about Space? • Edge List: • Adjacency Matrix: O(|E|) E = [ (1,2), (2,1), (2,3), (3,1), (4,2) ] O(|V|2) always!  even for sparse graphs!

  20. "Adjacency List" Repr. • Performance: • boolean isEdge(Node n, Node m)? • void addEdge(Node n, Node m)? • void deleteEdge(Node n, Node m)? • List<Node> getEdges(Node 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: [ ] ] O( outdeg(n) ) O( 1 ) O( in(n)+out(n) ) O( in(n)+out(n) )

  21. What about Space? (cont'd) • Edge List: • Adjacency Matrix: • Adjacency List: O(|E|) E = [ (1,2), (2,1), (2,3), (3,1), (4,2) ] O(|V|2) always!  O(|V|+|E|) 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: [ ] ]

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

  23. 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 queue 5) Mark v as visited (count++) 6) Enqueue all of v’s unvisited neighbours

  24. 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) System.out.print(v.index + " "); // print visited node exploredNodes.add(v); (5) for (Edge<Node> edge: graph.getEdges(v)) { (6) Node w = edge.getOtherEnd(v); // get v's neighbour w if (!exploredNodes.contains(w)) { // if w unvisited 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) Mark v as visited (count++) 6) Enqueue all of v’s unvisited neighbours enqueue

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

  26. 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) Mark v as visited (count++) 6) Push all of v’s unvisited neighbours onto stack

  27. 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) Mark v as visited (count++) 6) Push all of v’s unvisited neighbours onto stack push

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

  29. 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

  30. 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| )

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

  32. Exercises • 1) Graph: • Make a graph interface and implementation • 2) Breadth First Search: • Run the code (from this lecture) on example graph • 3) Depth First Search: • Change the BFS to a DFS algorithm (and try it out) • 4) Draw graph (using GraphViz): • Add a "toDot()" method to your Graph (and try it out) • 5) Topological Sorting: • Implement "List<Node> topSort(Graph<...>)"

  33. ”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):

  34. 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)

  35. 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”

  36. 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; } }

  37. ”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) {…} }

More Related