슬라이드 1 - Pusan
Download
Report
Transcript 슬라이드 1 - Pusan
Graphs
2011, Fall
Pusan National University
Ki-Joune Li
PNU
STEM
Graph
Definition
G = (V,E )
where V : a set of vertices and
E = { <u ,v > | u ,v V } : a set of edges
Some Properties
Equivalence of Graphs
Tree
a Graph
Minimal Graph
b
a
c
a
e
d
d
c
d
e
2
PNU
STEM
Some Terms
Directed Graph
Complete Graph
G is a directed graph iff <u,v > <u,v > for u v V
Otherwise G is an undirected graph
Suppose nv = number(V )
Undirected graph G is a complete graph if ne = nv (nv - 1) / 2,
where ne is the number of edges
Adjacency
For a graph G=(V,E )
u is adjacent to v iff e = <u,v > E , where u,v V
If G is undirected, v is adjacent to u
otherwise v is adjacent from u
3
PNU
STEM
Some Terms
Subgraph
Path from u to v
G’ is a subgraph of a graph G iff
V (G’ ) V (G ) and E (G’ ) E (G )
A sequence of vertices u=v0, v1, v2, … vn=v V , such that
<vi ,vi +1> E for every vi
Cycle iff u = v
Connected
Two vertices u and v are connected iff a path from u to v
Graph G is connected iff for every pair u and v there is a path
from u to v
Connected Components
A connected subgraph of G
4
PNU
STEM
Some Terms
Connected
An directed graph G is strongly connected iff
iff for every pair u and v there is a path from u to v and
path from v to u
DAG: directed acyclic graph (DAG)
In-degree and Out-Degree
In-degree of v : number of edges coming to v
Out-degree of v : number of edges going from v
5
PNU
STEM
Representation of Graphs: Matrix
Adjacency Matrix
A[i, j ] = 1, if there is an edge <vi ,vj >
A[i, j ] = 0, otherwise
0
1
Example
0 1 1 1
0 0 1 0
2
3
0 0 0 1
0 0 0 0
Undirected Graph: Symmetric Matrix
Space complexity: O (nv2 ) bits
In-degree (out-degree) of a node
6
PNU
STEM
Representation of Graphs: List
Adjacency List
Each node has a list of adjacent nodes
0
1
1
2
2
3
2
3
0
3
Space Complexity: O (nv + ne )
Inverse Adjacent List
1
2
3
0
1
0
2
0
1
3
0
2
7
PNU
STEM
Weighted Graph: Network
For each edge <vi ,vj >, a weight is given
Example: Road Network
Adjacency Matrix
A[i, j ] = wij, if there is an edge <vi ,vj > and wij is the weight
A[i, j ] = , otherwise
1.5
2.3
1.2
1.0
1.9
Adjacency List
0
1 1.5
1
2 1.0
2
3 1.9
3
0
1.5
1
1.0
2.3
1.2
2
1.9
2 2.3
3
3 1.2
8
PNU
STEM
Graph: Basic Operations
Traversal
Depth First Search (DFS)
Breadth First Search (BFS)
Used for search
Example
Find Yellow Node from 0
0
1
4
2
3
5
7
6
9
PNU
STEM
DFS: Depth First Search
void Graph::DFS() {
visited=new Boolean[n];
for(i=0;i<n;i++)visited=FALSE;
DFS(0);
delete[] visited;
}
0
1
4
2
void Graph::DFS(int v) {
visited[v]=TRUE;
for each u adjacent to v {
if(visited[u]==FALSE) DFS(w);
}
}
3
5
7
6
Adjacency List: Time Complexity: O(e)
Adjacency Matrix: Time Complexity: O(n2)
10
PNU
STEM
BFS: Breadth First Search
void Graph::BFS() {
visited=new Boolean[n];
for(i=0;i<n;i++)visited=FALSE;
Queue *queue=new Queue;
queue.insert(v);
while(queue.empty()!=TRUE) {
v=queue.delete()
for every w adjacent to v) {
if(visited[w]==FALSE) {
queue.insert(w);
visited[w]=TRUE;
}
}
}
delete[] visited;
}
0
1
4
2
3
5
7
6
Adjacency List: Time Complexity: O(e)
Adjacency Matrix: Time Complexity: O(n2)
11
PNU
STEM
Spanning Tree
A subgraph T of G = (V,E ) is a spanning tree of G
iff T is tree and V (T )=V (G )
0
1
4
Finding Spanning Tree: Traversal
2
DFS Spanning Tree
BFS Spanning Tree
3
5
6
7
0
0
1
1
4
4
2
2
3
5
7
6
3
5
7
6
12
PNU
STEM
Articulation Point and Biconnected
Components
Articulation Point
A vertex v of a graph G is an articulation point iff
the deletion of v makes G two connected components
0
0
1
4
2
5
Biconnected Graph
1
7
1
6
3
4
7
2
2
5
6
6
3
Connected Graph without articulation point
Biconnected Components of a graph
13
PNU
STEM
Finding Articulation Point: DFS Tree
Back Edge and Cross Edge of DFS Spanning Tree
Tree edge: edge of tree
Back edge: edge to an ancestor
Cross edge: neither tree edge nor back edge
No cross edge for DFS spanning tree
2
0
Back edge
1
1
7
0
4
6
2
4
6
3
5
3
5
Back edge
7
14
PNU
STEM
Finding Articulation Point
Articulation point
Root is an articulation point if it has at least two children.
u is an articulation point
if child of u without back edge to an ancestor of u
2
Back edge
1
0
6
4
3
5
Back edge
7
15
PNU
STEM
Finding Articulation Point by DFS Number
DFS number of a vertex: dfn (v )
0
The visit number by DFS
1
Low number: low (v )
1
low (v )= min{
dfn (v),
min{dfn (x)| (v, x ): back edge },
min{low (x)| x : child of v } }
0
2
0
6
5
2
0
3
2
4
3
0
4
5
0
5
5
6
5
7
7
v is an articulation Point
If v is the root node with at least two children or
If v has a child u such that low (u) dfn (v)
v is the boss of subtree: if v dies, the subtree looses the line
16
PNU
STEM
Computation of dfs(v) and low(v)
void Graph::DfnLow(x) {
num=1; // num: class variable
for(i=0;i<n;i++) dfn[i]=low[i]=0;
DfnLow(x,-1);//x is the root node
}
void Graph::DfnLow(int u,v) {
dfn[u]=low[u]=num++;
for(each vertex w adjacent from u){
if(dfn[w]==0) // unvisited w
DfnLow(w,u);
low[w]=min(low[u],low[w]);
else if(w!=v)
low[u]=min(low[u],dfn[w]); //back edge
}
}
Adjacency List: Time Complexity: O(e)
Adjacency Matrix: Time Complexity: O(n2)
17
PNU
STEM
Minimum Spanning Tree
G is a weighted graph
T is the MST of G iff T is a spanning tree of G and
for any other spanning tree of G, C (T ) < C (T’ )
0
0
7
5
10
4
2
1
4
5
12
3
2
6
1
8
6
15
5
7
3
4
2
4
5
12
7
3
2
6
8
6
3
18
PNU
STEM
Finding MST
Greedy Algorithm
Choosing a next branch which looks like better than others.
Not always the optimal solution
Globally optimal solution
Solution by greedy algorithm,
only locally optimal
Current
state
Kruskal’s Algorithm and Prim’s Algorithm
Two greedy algorithms to find MST
19
PNU
STEM
Kruskal’s Algorithm
Algorithm KruskalMST
Input: Graph G
Output: MST T
Begin
T {};
while( n(T)<n-1 and G.E is not empty) {
(v,w) smallest edge of G.E;
G.E G.E-{(v,w)};
if no cycle in {(v,w)}T, T {(v,w)}T
}
if(n(T)<n-1) cout<<“No MST”;
End Algorithm
0
7X
5
10
T is MST
Time Complexity: O(e loge)
1
X
4
2
4
5
12
7
3
2
6
8
6
15
3
20
PNU
STEM
Checking Cycles for Kruskal’s Algorithm
V
1
V1
V2
log n
5
6
4
2
3
If v V and
8
w V,
then cycle,
otherwise no cycle
w
v
21
PNU
STEM
Prim’s Algorithm
Algorithm PrimMST
Input: Graph G
Output: MST T
Begin
Vnew {v0}; Enew {};
while( n(Enew)<n-1) {
select v such that (u,v) is the smallest edge
where u Vnew, v Vnew;
if no such v, break;
G.E G.E-{(u,v)};
Enew {(u,v)} Enew;
Vnew {v} Vnew;
}
if(n(T)<n-1) cout<<“No MST”;
End Algorithm
0
7
10
5
1
3
T is the MST
Time Complexity: O( n
4
2)
2
4
5
2
6
12
7
8
6
15
3
22
PNU
STEM
Finding the Edge with Min-Cost
Step 1
Step 2
T
V
TV
TV
0
0
1
1
3
3
2
2
n-1
n
n + (n-1) +… 1 = O( n2 )
23
PNU
STEM
Shortest Path Problem
Shortest Path
From 0 to all other vertices
0
5
vertex
cost
1
5
2
6
3
10
4
8
5
7
6
13
7
11
3
8
1
4
2
11
9
4
7
6
5
10
1
6
15
2
3
13
6
12
24
PNU
STEM
Finding Shortest Path from Single Source
(Nonnegative Weight)
2
0
Algorithm DijkstraShortestPath(G) /* G=(V,E) */
output: Shortest Path Length Array D[n]
Begin
S {v0};
D[v0]0;
for each v in V-{v0}, do D[v] c(v0,v);
while S V do
begin
choose a vertex w in V-S such that D[w] is minimum;
add w to S;
for each v in V-S do
D[v] min(D[v],D[w]+c(w,v));
end
End Algorithm
1
7
10
3
6
2
4
3
5
4
w
v
u
S
O(
n2 )
25
PNU
STEM
Finding Shortest Path from Single Source
(Nonnegative Weight)
2
0
0
1
7
10
3
6
4
5
9
∞
2
4
0
1
9
2
4
3
3: {v0, v1, v2}
2: {v0, v1}
2
1
0
5
9
2
3
3
5
9
∞
4
1: {v0}
0
1
5
∞
4
2
2
0
1
10
2
3
2
9
2
4
2
1
5
9
9
4
3
2
3
4: {v0, v1, v2, v4}
5: {v0, v1, v2, v3, v4}
26
PNU
STEM
Transitive Closure
Transitive Closure
Set of reachable nodes
0
0
1
0
1
1
2
2
4
2
4
4
3
3
3
A+
A
A*
0
1
0
0
0
0
1
1
1
1
1
1
1
1
1
0
0
1
0
0
0
0
1
1
1
0
1
1
1
1
0
0
0
1
0
0
0
1
1
1
0
0
1
1
1
0
0
0
0
1
0
0
1
1
1
0
0
1
1
1
0
0
1
0
0
0
0
1
1
1
0
0
1
1
1
27
PNU
STEM
Transitive Closure
Void Graph::TransitiveClosure {
for(int i=0;i<n;i++)
for (int j=0;i<n;j++)
a[i][j]=c[i][j];
for(int k=0;k<n;k++)
for(int i=0;i<n;i++)
for (int j=0;i<n;j++)
a[i][j]= a[i][j]||(a[i][k] && a[k][j]);
}
O ( n3 )
Void Graph::AllPairsShortestPath {
for(int i=0;i<n;i++)
for (int j=0;i<n;j++)
a[i][j]=c[i][j];
for(int k=0;k<n;k++)
for(int i=0;i<n;i++)
for (int j=0;i<n;j++)
a[i][j]= min(a[i][j],(a[i][k]+a[k][j]));
}
O ( n3 )
28
PNU
STEM
Activity Networks
29
PNU
STEM
AOV – Activity-on-vertex
Node 1 is a immediate successor of Node 0
0
Node 0 is a immediate predecessor of Node 1
1
Node 0 Node 1
4
2
Node 1 Node 5
3
5
Node 5 is a successor of Node 0
7
6
Node 0 is a successor of Node 5
Node 0 Node 5
Partial order: for some pairs (v, w) (v, w V ), v w (but not for all pairs)
(cf. Total Order: for every pair (v, w) (v, w V ), v w or w v )
No Cycle
Transitive and Irreflexive
30
PNU
STEM
Topological Order
0
Ordering: (0, 1, 2, 3, 4, 5, 7, 6)
1
Ordering: (0, 1, 4, 2, 3, 5, 7, 6)
4
2
Both orderings satisfy the partial order
3
5
7
6
Topological order: Ordering by partial order
Ordering: (0, 1, 2, 5, 4, 3, 7, 6): Not a topological order
31
PNU
STEM
Topological Ordering
0
0
1
1
4
4
2
2
3
5
6
7
3
5
6
7
0, 1
0, 1, 4
0, 1, 4, 3
4
2
2
3
5
7
6
3
5
7
6
3
5
7
6
32
PNU
STEM
Topological Ordering
Void Topological_Ordering_AOV(Digraph G)
for each node v in G.V {
if v has no predecessor {
cout << v;
O( n + e )
delete v from G.V;
deleve (v,w) from G.E;
}
}
if G.V is not empty, cout <<“Cycle found\n”;
}
33
PNU
STEM
AOE – Activity-on-edge
PERT (Project Evaluation and Review Technique
5
3
1
9
4
2
6
5
6
7
12
6
8
1
4
11
0
2
Node 2 is completed
only if every predecessor is completed
Earliest Time: the LONGEST PATH from node 0
Earliest time of node 1: 5
Earliest time of node 2: 8
Earliest time of node 4: 8
Earliest time of node 5: max(8+11, 5+2, 8+6)=19
Earliest time of node 7: max(8+9, 19+4)=23
Earliest time of node 6: max(23+12, 19+6)=35
5
3
1
(0, 1, 4, 5, 7, 6) : Critical Path
By reducing the length on the critical path,
we can reduce the length of total path.
9
4
8
1
4
2
11
0
6
2
5
6
7
12
6
34