Date post: | 21-Dec-2015 |
Category: |
Documents |
View: | 216 times |
Download: | 0 times |
Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Graphs &Graph Algorithms
Claus Brabrand[ [email protected] ]
( “FÅP”: First-year Project Course, ITU, Denmark )
[ 2 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
[ 3 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Outline
Graphs Graph Representations Krak Data Representation Breadth First Search (BFS) Depth First Search (DFS) Topological Sorting Exercises Project (part 1): ”Visualization”
[ 4 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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:
V = { 1, 2, 3, 4 }
E = { (1,2), (2,1), (2,3), (3,1), (4,2) }vertex
edge
[ 5 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Oriented vs. Non-oriented
Directed graph: (orienteret graf)
Undirected graph: (ikke-orienteret)
V = { 1, 2, 3, 4 }
E = { (1,2), (2,1), (2,3), (3,1), (4,2) }
V = { 1, 2, 3, 4 }
E = { (1,2), (2,1), (1,3), (3,1), (2,3), (3,2), (2,4), (4,2) }
v1 v2 v2 v1
[ 6 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Graph Examples
Roadmap: roads and intersections project! 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 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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)
v0 v1 … vn+1e0 e1 en
v0 v1 … v0
(v0,_) (_,v0)
= =
(v0,v1) (vn,vn+1)
= =
(v1,v2)=
[ 8 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Graph Properties
A graph ”G = (V,E)” is:
Reflexive:
Symmetric:
Transitive:
v1V: v1 v1
v1,v2V: v1 v2 v2 v1
v1,v2,v3V: v1 v2 v2 v3 v1 v3
[ 10 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
What is this?
The”borders-with”
relation(for the
Europeanmainland)
[ 11 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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
[ 12 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Edge Information
Often, information associated with edges
e.g., Roadmaps:
e.g., Powergrid:
e.g., Bacon-index:
…
305 kmKBHAarhus
175 min
220 V Agave70Outlet
Mr. & Mrs. Smith A.JolieB.Pitt
10 A
2005
[ 13 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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
[ 14 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Outline
Graphs Graph Representations Krak Data Representation Breadth First Search (BFS) Depth First Search (DFS) Topological Sorting Exercises Project (part 1): ”Visualization”
[ 15 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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| )
E = [ (1,2), (2,1), (2,3), (3,1), (4,2) ]
Just put all edges in ”one big” edge list:
Space: O( |E| )
[ 16 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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) )
outgoing:1: [ [ (1,2) ],2: [ (2,1), (2,3) ],3: [ (3,1) ],4: [ (4,2) ] ]
Each node has its own edge list of…
incoming:1: [ [ (2,1), (3,1) ],2: [ (1,2), (4,2) ],3: [ (2,3) ],4: [ ] ]
Space: O( |V| + |E| )
outgoing… …and incoming edges:
[ 17 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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!
[ 18 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Outline
Graphs Graph Representations Krak Data Representation Breadth First Search (BFS) Depth First Search (DFS) Topological Sorting Exercises Project (part 1): ”Visualization”
[ 19 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
”KRAK” Data Representation
Krak data: NB: only for teaching
and 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):
[ 20 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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)
[ 21 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
”KRAK” Data Representation
Edges (roads): Vertices (intersections):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
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
”kdv_unload.txt” ”kdv_node_unload.txt”
[ 22 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
”graphlib” Representation
Node:
Edge:
package graphlib;
public class Node { public final int index; public Node(int index) { this.index = index; }
public final int getIndex() { return index; }}
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(){…}}
”krak-kode-faap-1.zip”:Contains code for reading the KRAK data format and for building a graph!
[ 23 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
”graphlib” Representation
Graph: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) {…}}
NB!: all lists start at index 1 (index 0 is bogus)NB!: ”node.index” are numbered & initialized 1..N+1
[ 24 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Outline
Graphs Graph Representations Krak Data Representation Breadth First Search (BFS) Depth First Search (DFS) Topological Sorting Exercises Project (part 1): ”Visualization”
[ 25 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Breadth First Search (BFS)
Breadth First Search (BFS):1) Make queue of nodes to be visited2) Enqueue start node in queue3) 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
[ 26 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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); } }}
dequeue
1) Make queue of nodes to be visited2) Enqueue start node in queue3) 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
enqueue
enqueue
[ 27 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Outline
Graphs Graph Representations Krak Data Representation Breadth First Search (BFS) Depth First Search (DFS) Topological Sorting Exercises Project (part 1): ”Visualization”
[ 28 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Depth First Search (DFS)
Depth First Search (DFS):1) Make stack of nodes to be visited2) Push start node onto stack3) While stack not empty do:4) Pop node v from stack5) If v not already visited then:6) Mark v as visited (count++)7) Push all of v’s neighbours onto stack
[ 29 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Exercise: DFS.java
pop
1) Make stack of nodes to be visited2) Push start node onto stack3) While stack not empty do:4) Pop node v from stack5) If v not already visited then:6) Mark v as visited (count++)7) Push all of v’s neighbours onto stack
push
push
[ 30 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Outline
Graphs Graph Representations Krak Data Representation Breadth First Search (BFS) Depth First Search (DFS) Topological Sorting Exercises Project (part 1): ”Visualization”
[ 31 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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
[ 32 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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 list2) Repeat until no more nodes:3) Pick a node v without incoming edges*4) Push v onto topologically ordered list5) Remove v from graph; and6) Remove all edges out of v
*) if no such node exists, the graph is cyclic
Time: O( |V| + |E| )
[ 33 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
Outline
Graphs Graph Representations Krak Data Representation Breadth First Search (BFS) Depth First Search (DFS) Topological Sorting Exercises Project (part 1): ”Visualization”
[ 34 ]Claus Brabrand, ITU, Denmark Mar 17, 2009Graphs & Graph Algorithms
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<…>)”
[cf. Homepage]