70
1 14 장 . 장장장 장장장장 장장장 장장장장 위위위위 , 위위위위 위위 , 위위 위위 , 위위위위 , 위위 위위 , 위위위 위위위 , 위위위위 위위위 장장장장 위위위 위위 위위위 위위위위 . 위위위위 위위위위 위위 위 위위 위위위위위 위위위위 . 위위위위 , 위위 위위위위 위위위위 위위 위위위위 . 위위위위 , 위위위위 위위위위 위위 위위위위 . 위위위위 , 위위위 위위위 , 위위위위 위위위 위위위위 위위 위위위위 .

14 장 . 그래프 알고리즘

  • Upload
    fola

  • View
    73

  • Download
    0

Embed Size (px)

DESCRIPTION

14 장 . 그래프 알고리즘. 그래프 알고리즘 위상정렬 , 최소신장 트리 , 최단 경로 , 이행폐쇄 , 이중 연결 , 유니언 파인드 , 네트워크 플로우 학습목표 그래프 관련 용어를 이해한다 . 그래프를 표현하기 위한 두 가지 자료구조를 이해한다 . 신장트리 , 최소 신장트리 알고리즘 들을 이해한다 . 이행폐쇄 , 최단경로 알고리즘 들을 이해한다 . 이중연결 , 유니언 파인드 , 네트워크 플로우 알고리즘 들을 이해한다. 그래프. - PowerPoint PPT Presentation

Citation preview

PowerPoint
, , , , , ,

, .
, .
, , .
http://cg.myongji.ac.kr
(Object) (Concepts) . (Connection Network Network). (Task) , , . ,
Graph
Vertices
Edges

G‘(Subgraph)
(Path)
(Complete Graph)
V , (V-1)
,
(Forest):
IsAdjacent:
IsEmpty:
. 0 1.
http://cg.myongji.ac.kr
: .
http://cg.myongji.ac.kr
.
.

Vertex
. int AdjacencyMatrix[Max][Max];

http://cg.myongji.ac.kr


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




TRUE
FALSE . TRUE . O(2V) .
http://cg.myongji.ac.kr

O(V). O(V2). O(2V + V2) = O(V2)

A , A B O(E). B , B A O(E). O(2V+2E) = O(V+E). (V+E) . V2 .
http://cg.myongji.ac.kr


A->B A B
.

:
http://cg.myongji.ac.kr
.
A, C, D, F, B, E, G . . A-D-E-G A-C-D-B-E-G
: . (DAG: Directed Acyclic Graph) .
http://cg.myongji.ac.kr
(Sink, )
,

(Source, )
,
,
(, Out-Degree):
0 , 0 .
http://cg.myongji.ac.kr

G G . E F. E .

( 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


http://cg.myongji.ac.kr
.
http://cg.myongji.ac.kr
.
.
. .
, . ,
http://cg.myongji.ac.kr
.

“ , .”
{A, B, C, D} {E, F, G, H} . B-E, C-E, D-E, D-F, A-F, A-D 6 . 2 .
. D-F . .
http://cg.myongji.ac.kr

. 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




(Network Flow)

http://cg.myongji.ac.kr
5/3 (Capacity) 5 (Flow) 3
S->M->N->T . (Forward Edge) .
(Slack, ) .
S-M 5 - 3 = 2
(Augmenting Path, Alternating Path)
.
http://cg.myongji.ac.kr
S-M-N-T
N-T 0
S-Q-P-T 0
5 + 3 + 5 = 13, 3 + 7 + 3 = 13
. , .
http://cg.myongji.ac.kr
(Backward Edge)
S-M-N-P-T. N-P .
S-M-N 2. 2 S-M 7/5, M-N 4/4 . N . 2 , 2 . P-N . N 4/1 2 N . N P . P 2 2 . P-T 6/3 2 6/5 . 2 .
http://cg.myongji.ac.kr
?
                                                                                                                                                                                                                                                                             
(Cut)
S, A, M , . A-B, A-N, M-N, M-P, S-Q
S, M, Q , . S-A, M-N, M-P, Q-P . .
http://cg.myongji.ac.kr

“ “
. (Capacity) . .

(4 + 3 + 4 + 1 + 6) = 18. (5 + 4 + 1 + 5) = 15. 15 .
.
http://cg.myongji.ac.kr