Graphs

advertisement
Graphs
Some Examples and Terminology
A graph is a set of vertices (nodes) and
a set of edges (arcs) such that each
edge is associated with exactly two
vertices
• Edges can be undirected or directed
(digraph)
A subgraph is a portion of a graph that
itself is a graph
2
Nodes
Edges
A portion of a road map treated as a graph
3
A directed graph representing part of a city street map
4
(a) A maze; (b) its representation as a graph
5
The prerequisite structure for a selection of courses as
a directed graph without cycles.
6
Paths
A sequence of edges that connect two
vertices in a graph
In a directed graph the direction of the
edges must be considered
• Called a directed path
A cycle is a path that begins and ends at
same vertex and does not pass through
any vertex more than once
A graph with no cycles is acyclic
7
Weights
A weighted graph has values on its edges
• Weights, costs, etc.
A path in a weighted graph also has weight
or cost
• The sum of the edge weights
Examples of weights
• Miles between nodes on a map
• Driving time between nodes
• Taxi cost between node locations
8
A weighted graph
9
Connected Graphs
A connected graph
• Has a path between every pair of
distinct vertices
A complete graph
• Has an edge between every pair of
distinct vertices
A disconnected graph
• Not connected
10
Connected Graphs
Undirected graphs
11
Adjacent Vertices
Two vertices are adjacent in an undirected
graph if they are joined by an edge
Sometimes adjacent vertices are called
neighbors
Vertex A is adjacent to B,
but B is not adjacent to A.
12
Note the graph with two subgraphs
• Each subgraph connected
• Entire graph disconnected
Airline routes
13
Trees
All trees are graphs
• But not all graphs are trees
A tree is a connected graph without cycles
Traversals
• Preorder (and, technically, inorder and
postorder) traversals are examples of depthfirst traversal
• Level-order traversal of a tree is an example of
breadth-first traversal
Visit a node
• Process the node’s data and/or mark the node
as visited
14
Trees
Visitation order of two traversals;
(a) depth first; (b) breadth first.
15
Depth-First Traversal
Visits a vertex, then
• A neighbor of the vertex,
• A neighbor of the neighbor,
• Etc.
Advance as far as possible from the
original vertex
Then back up by one vertex
• Considers the next neighbor
16
Algorithm depthFirstTraversal (originVertex)
traversalOrder = a new queue for the resulting traversal order
vertexStack = a new stack to hold vertices as they are visited
Mark originVertex as visited
traversalOrder.enqueue (originVertex)
vertexStack.push (originVertex)
while (!vertexStack.isEmpty ()) {
topVertex = vertexStack.peek ()
if (topVertex has an unvisited neighbor) {
nextNeighbor = next unvisited neighbor of topVertex
Mark nextNeighbor as visited
traversalOrder.enqueue (nextNeighbor)
vertexStack.push (nextNeighbor)
}
else // all neighbors are visited
vertexStack.pop ()
}
return traversalOrder
17
Depth-First Traversal
Trace of a
depth-first
traversal
beginning at
vertex A.
Assumes that children are placed on the
stack in alphabetic (or numeric order).
18
Breadth-First Traversal
Algorithm for breadth-first traversal of nonempty
graph beginning at a given vertex
Algorithm breadthFirstTraversal(originVertex)
vertexQueue = a new queue to hold neighbors
traversalOrder = a new queue for the resulting traversal order
Mark originVertex as visited
A breadth-first traversal visits
traversalOrder.enqueue(originVertex)
a vertex and then each of the
vertexQueue.enqueue(originVertex)
vertex's neighbors before
while (!vertexQueue.isEmpty()) {
advancing
frontVertex = vertexQueue.dequeue()
while (frontVertex has an unvisited neighbor) {
nextNeighbor = next unvisited neighbor of frontVertex
Mark nextNeighbor as visited
traversalOrder.enqueue(nextNeighbor)
vertexQueue.enqueue(nextNeighbor)
}
}
19
return traversalOrder
Breadth-First Traversal
A trace of a
breadth-first
traversal for a
directed graph,
beginning at
vertex A.
Assumes that children are placed in the
queue in alphabetic (or numeric order).
20
Implementations of the ADT Graph
A B C D
A 0
1
1
1
B 0
0
0
0
C 0
0
0
0
D 1
0
1
0
A directed graph and implementations using
adjacency lists and an adjacency matrix.
21
22
Topological Order
Given a directed graph without cycles
In a topological order
• Vertex a precedes vertex b whenever
a directed edge exists from a to b
23
Topological Order
Three topological
orders for the
indicated graph.
24
Topological Order
An impossible prerequisite structure for three
courses as a directed graph with a cycle.
25
Topological Order
Algorithm for a topological sort
Algorithm getTopologicalSort()
vertexStack = a new stack to hold vertices as they are visited
n = number of vertices in the graph
for (counter = 1 to n) {
nextVertex = an unvisited vertex having no unvisited successors
Mark nextVertex as visited
stack.push(nextVertex)
}
return stack
26
Topological Sorting
Algorithm getTopologicalSort()
vertexStack = a new stack to hold vertices as they are visited
n = number of vertices in the graph
for (counter = 1 to n) {
nextVertex = an unvisited vertex having no unvisited successors
Mark nextVertex as visited
stack.push(nextVertex)
}
return stack
27
Topological
Order
Finding a
topological order
28
Shortest Path in an
Unweighted Graph
(a) an unweighted graph and
(b) the possible paths from vertex A to vertex H.
29
Shortest Path in an
Unweighted Graph
The previous graph after the shortest-path algorithm
has traversed from vertex A to vertex H
30
Shortest Path in an
Unweighted Graph
Finding the shortest path from vertex A to vertex H.
31
Shortest Path in an
Weighted Graph
(a) A weighted graph and
(b) the possible paths from vertex A to vertex H.
32
Shortest Path in an
Weighted Graph
Shortest path between two given vertices
• Smallest edge-weight sum
Algorithm based on breadth-first traversal
Several paths in a weighted graph might
have same minimum edge-weight sum
• Algorithm given by text finds only one of these
paths
33
Shortest Path in an Weighted Graph
Finding the shortest
path from vertex A
to vertex H
34
Shortest Path in an
Weighted Graph
The previous graph after finding the
shortest path from vertex A to vertex H.
35
Java Interfaces for the ADT Graph
Methods in the BasicGraphInterface
• addVertex
• addEdge
• hasEdge
• isEmpty
• getNumberOfVertices
• getNumberOfEdges
• clear
36
Download