14 장 . 그래프 알고리즘. 그래프 알고리즘 위상정렬 , 최소신장 트리 , 최단 경로 , 이행폐쇄 , 이중 연결 , 유니언 파인드 , 네트워크 플로우 학습목표 그래프 관련 용어를 이해한다 . 그래프를 표현하기 위한 두 가지 자료구조를 이해한다 . 신장트리 , 최소 신장트리 알고리즘 들을 이해한다 . 이행폐쇄 , 최단경로 알고리즘 들을 이해한다 . 이중연결 , 유니언 파인드 , 네트워크 플로우 알고리즘 들을 이해한다. 그래프. - PowerPoint PPT Presentation
http://cg.myongji.ac.kr
http://cg.myongji.ac.kr
int ** InitMatrix(int NRow, int NCol, int Value)
Value
{ int **m;
m = malloc(NRow * sizeof(int
*)); NRow
for (int i = 0; i < NRow;
i++)
m[i] = malloc(NCol *
sizeof(int)); NCol
for (int i = 0; i < NRow;
i++)
for (int j = 0; j < NCol;
j++)
m[i][j] = Value;
Value
return
m;
}
void
FreeMatrix(**m)
m
{ for (int i = 0; i < NRow;
i++)
free(m[i]);
free(m);
}
http://cg.myongji.ac.kr
int
**M;
} graphType;
graphPtr InitGraph(int
V)
void InsertEdge(graphPtr g, int V1, int V2)
http://cg.myongji.ac.kr
graphPtr InitGraph(int
V)
V
{ graphPtr G = malloc(sizeof(graphType));
G->V =
V;
V
G->E =
0;
0
G->M = InitMatrix(V, V, 0); V
0
return G;
}
void InsertEdge(graphPtr g, int V1, int V2) V1,
V2
{ if (g->M[V1][V2] = =
0) 0
{
g->E++;
g->M[V1][V2] =
1; V1->V2
1
}
}
.
http://cg.myongji.ac.kr
E 2
i :
V2 , 2E
,
http://cg.myongji.ac.kr
node*
Next;
} node;
} graphType;
graphPtr InitGraph(int
V)
void InsertEdge(graphPtr g, int V1, int V2)
http://cg.myongji.ac.kr
graphPtr InitGraph(int
V)
V
{ graphPtr G = malloc(sizeof(graphType));
G->V =
V;
V
G->E =
0;
0
G->L = malloc(V * sizeof(node *)); V
for (int i = 0; i < V;
i++)
G->L[i] =
NULL;
return
G;
}
void InsertEdge(graphPtr g, int V1, int V2) V1,
V2
{ Nptr temp = malloc(sizeof(node));
temp->Data =
V2;
V2 ID
temp->Next =
g->L[V1];
g->L[V1] =
temp;
L[V1]
}
V2 V1 .
http://cg.myongji.ac.kr
( A, C, D, F, B, E, G)
http://cg.myongji.ac.kr
TopologicalSort(G)
{ Select a Sink
T;
L.Insert(1,
T);
}
}
(Directed Edge)
.
http://cg.myongji.ac.kr
A-D-B-E-G-F-C
. A-D-B-E-G-F-C G. G, E, B.
F.
http://cg.myongji.ac.kr
TopologicalSort(V)
{ for All Nodes T Adjacent to
V
if (T Is
Unvisited)
TopologicalSort(T);
}
G G G .
. N , (N-1)
.
A A-B-C-D-G-E-F-H-I
B B-A-F-G-D-C-E-H-I
. A
A G, B, F B
A-B .
A B .
B-C, A-G, A-F B-C
B-C
. , .
A A G, B, F .
B , B C, E, D .
http://cg.myongji.ac.kr
(Kruskal's Method)
1 A-B
1 G-E
()
. .
(Greedy Algorithm)
“ ”
“ ”
.
http://cg.myongji.ac.kr
1
,
, . .
. .
http://cg.myongji.ac.kr
.
http://cg.myongji.ac.kr
(Dijkstra Algorithm)
.
i j
, 1 B.
A B C, D, E, F . 1 .
2 C, D, E, F
B , B
[C]: 1 5 . A-B 1 , B-C 2 3 A-B-C . 5 3 .
D, E, F B 1 . F
3 F C, D, E . F C, D, E 2 , 3 C .
4 C . 3 A-C 3 , C-E 1 4. A C . 4 . E . 5 D .
. 5 [D] 5 A-E + E-D = 4 + 1 = 5 . D E E
3 D
(Dynamic Programming)
http://cg.myongji.ac.kr
Y X
X Y
(Transitive Closure)
, .
A ACBDGF
A CBDGF .
H A .
O(V*(V+E)), O(V*V2)
http://cg.myongji.ac.kr
A[B][A] = 1 B A
A B . B A . A C, F A . A[B][C], A[B][F] 1 .
0 , 0 1 . .
O(V3). V2 . V . B C C C
http://cg.myongji.ac.kr
.
:
A[A][B] = 1
A B B A
B B
2 C . A-B + B-C = 1 + 2 = 3. A C A[A][C] 5 .
A[D][B] = 1
D B C D-B-C D-B + B-C = 1 + 2 = 3
A[D][C] 3
.
A
B
C
D
E
F
A
0
1
(Biconnected Graph)
-- . . .
.
(AP: Articulation Point)
. . .
http://cg.myongji.ac.kr
B . G B . B . B , B
C D C C . .
2 . .
http://cg.myongji.ac.kr
{A, B, F, D, E} {C, G}.
http://cg.myongji.ac.kr
D A .
,
http://cg.myongji.ac.kr
A-B A
B-D B D B D
http://cg.myongji.ac.kr
A-E * . E A
B-D D B . D C, B A C A . C A C A .
while (A[i] ≠ Empty) i = A[i];
M N
D-E , C-E , B-E
E . . O(V).
(Union by Weighting)
(a) J-D J J D C .
http://cg.myongji.ac.kr
(Path Compression)
. K L K, A, M
2 : . .
(Halving)
http://cg.myongji.ac.kr