25
12. 그래프와 관련 알고리즘 2015-1 Programming Language 2015년 5월 28일 교수 김 영 탁 영남대학교 공과대학 정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : [email protected])

ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

12. 그래프와 관련 알고리즘

2015-1 Programming Language

2015년 5월 28일

교수 김 영 탁

영남대학교 공과대학 정보통신공학과(Tel : +82-53-810-2497; Fax : +82-53-810-4742http://antl.yu.ac.kr/; E-mail : [email protected])

Page 2: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 2

Outline

그래프 (Graph)그래프의 응용 예 미로 찾기 인터넷 라우터에서의 패킷 forwarding

그래프의 구현그래프 탐색 Depth First Searching Breadth First Searching

그래프 노드간의 최단 거리 경로 산출 Shortest path: Dijkstra’s Algorithm

Page 3: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 3

그래프(graph)

연결되어 있는 객체 간의 관계를 표현하는 자료구조가장 일반적인 자료구조 형태 우리가 배운 트리(tree)도 그래프의 특수한 경우임 전기회로의 소자 간 연결 상태 운영체제의 프로세스와 자원 관계 큰 프로젝트에서 작은 프로젝트 간의 우선 순위 지도에서 도시들의 연결 상태

Page 4: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 4

그래프의 응용 예 (1)

미로 찾기 (1) 아래 그림으로 표현된 미로에서 지정된 입구 (v0)에서 지정된

출구 (v20)로 찾아 갈 수 있는 길이 있는가? 만약 출구로 찾아 갈 수 있는 길이 있다면, 최단 경로 ?

v0 ~ v24: cross pointsdistance(v0, v1): 1distance(v0, v5): 1

distance(v2, v3): +

0 1 2 3 4

0

1

2

3

4

v0

v24

(start)

(end)

v4

v20

v1 v2 v3

v5 v6 v7 v8 v9

v10 v11 v12 v13 v14

v15 v16 v17 v18 v19

v21 v22 v23

Page 5: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 5

미로 찾기 (2) 출구로 찾아갈 수 있는 경로 최단 경로

0 1 2 3 4

0

1

2

3

4

v0

v24

(start)

(end)

v4

v20

v1 v2 v3

v5 v6 v7 v8 v9

v10 v11 v12 v13 v14

v15 v16 v17 v18 v19

v21 v22 v23

Path by obtained by Depth First Search

Path by obtained by Breadth First Search

Page 6: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 6

그래프의 응용 예 (2)

인터넷 라우터에서의 패킷 Forwarding

DestAddr

Router Addr

Next hop for Destination Addr

0 1 2 3 4

0 0 1 1 1 1

1 0 1 2 2 2

2 1 1 2 3 3

3 2 2 2 3 4

4 3 3 3 3 4

0 1 2 3 4

Page 7: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 7

복잡한 network topology에서의 패킷 전달 각 라우터 위치에서의 목적지 주소로 최단 경로를 통하여 패킷을

전달하기 위한 next hop은 ?

28510M

0

1

2

5

7

8

6

9

12

1314

19

18

17

16

10

15

11

3

8205M

114420M

82810M

Seattle

San Francisco

Salt Lake City

Los Angels

Denver

Phoenix

Houston

Dallas

Minneapolis

Chicago

St. Louis

Memphis

New Orleans

Atlanta

Miami

Washington D.C.

Detroit

New York

Boston

74510M

3805M

68810M

38110M

81610M

106750M

92050M

86150M

780100M

52150M

40910M

297102

28610M

84510M

454100M

2465M 352

10M

39310M

3945M

47310M

86110M

66110M

63210M

53410M

6405M

834 10M211 5M

237 5M

4

Rapid city61110M657

10M 38950M

Page 8: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 8

그래프 정의

그래프 G는 (V, E)로 표시정점(vertex) 여러 가지 특성을 가질 수 있는 객체 의미 V(G) : 그래프 G의 정점들의 집합 노드(node)라고도 불림

간선(edge)

정점들 간의 관계 의미 E(G) : 그래프 G의 간선들의 집합 링크(link)라고도 불림

Page 9: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 9

그래프로 표현하는 것들

도로망

영역간 인접 관계

Page 10: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 10

무방향 그래프(undirected graph) 무방향 간선(undirected edge)만 사용 간선을 통해서 양방향으로 갈수 있음 도로의 왕복통행 길 (A, B)와 같이 정점의 쌍으로 표현 (A, B) = (B, A)

방향 그래프(directed graph) 방향 간선(undirected edge)만 사용 간선을 통해서 한쪽 방향으로만 갈 수 있음 도로의 일방통행 길 <A, B> 와 같이 정점의 쌍으로 표현 <A, B> ≠ <B, A>

그래프의 종류

A B

A B

Page 11: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 11

가중치 그래프 (Weighted Graph)

가중치 그래프(weighted graph)는 네트워크(network)라고도함

간선에 비용(cost)이나 가중치(weight)가 할당된 그래프

가중치 그래프 예 정점 : 각 도시를 의미 간선 : 도시를 연결하는 도로 의미 가중치 : 도로의 길이

A B1200

Page 12: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 12

그래프 표현의 예

V(G1)= {0, 1, 2, 3}, E(G1)= {(0, 1), (0, 2), (0, 3), (1, 2), (2, 3)}

V(G2)= {0, 1, 2, 3}, E(G2)= {(0, 1), (0, 2))}

V(G3)= {0, 1, 2}, E(G3)= {<0, 1>, <1, 0>, <1, 2>}

Page 13: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 13

부분 그래프(subgraph)

정점 집합 V(G)와 간선 집합 E(G)의 부분 집합으로 이루어진그래프

그래프 G1의 부분 그래프들

그래프 G1

Page 14: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 14

그래프 관련 용어 (terminology) (1)

인접 정점(adjacent vertex) 하나의 정점에서 간선에 의해 직접 연결된 정점 G1에서 정점 0의 인접 정점: 정점 1, 정점 2, 정점 3

무방향 그래프의 차수(degree) 하나의 정점에 연결된 다른 정점의 수 G1에서 정점 0의 차수: 3 무방향 그래프의 모든 차수의 합은 간선 수의 2배 G1의 차수의 합: 10 G1의 간선의 합: 5

Page 15: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 15

그래프 관련 용어 (terminology) (2)

방향 그래프의 차수(degree) 진입 차수(in-degree) : 외부에서 오는 간선의 수 진출 차수(out-degree) : 외부로 향하는 간선의 수 G3에서 정점 1의 차수: 내차수 1, 외차수 2 방향 그래프의 모든 진입(진출) 차수의 합은 간선의 수 G3의 진입 차수의 합: 3 G3의 진입 차수의 합: 3 G3의 간선 합: 3

Page 16: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 16

그래프의 경로(path)

무방향 그래프의 정점 s (start) 로부터 정점 e (end) 까지의 경로 정점의 나열 s, v1, v2, ..., vk, e 나열된 정점들 간에 반드시 간선 (s, v1), (v1, v2), ... , (vk, e) 존재

방향 그래프의 정점 s로부터 정점 e까지의 경로 정점의 나열 s, v1, v2, ..., vk, e 나열된 정점들 간에 반드시 간선 <s, v1>, <v1, v2>, ... ,<vk, e> 존재

경로의 길이(length) 경로를 구성하는데 사용된 간선의 수

단순 경로(simple path) 경로 중에서 반복되는 간선이 없는 경로

사이클(cycle) 단순 경로의 시작 정점과 종료 정점이 동일한 경로

Page 17: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 17

그래프의 경로(path)

G1의 0, 1, 2, 3은 경로지만 0, 1, 3, 2는 경로 아님 G1의 1, 0, 2, 3은 단순경로이지만 1, 0, 2, 0은 단순경로 아님 G1의 0, 1, 2, 0과 G3의 0, 1, 0은 사이클

Page 18: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 18

그래프의 연결정도

연결 그래프(connected graph) 무방향 그래프 G에 있는 모든 정점쌍 (vertices pair)에 대하여 항상 경로

존재 G2는 비연결 그래프임

트리(tree) 그래프의 특수한 형태로서 사이클을 가지지 않는 연결 그래프 트리의 예

Page 19: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 19

그래프의 연결정도

완전 그래프(complete graph) 모든 정점이 연결되어 있는 그래프 n개의 정점을 가진 무방향 완전그래프의 간선의 수: n×(n-1)/2 n=4, 간선의 수 = (4×3)/2 = 6

Page 20: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 20

그래프 Abstract Data Type (ADT)

∙객체: 정점의 집합과 간선의 집합∙연산: ▪ create_graph() ::= 그래프를 생성한다.▪ init(g) ::= 그래프 g를 초기화한다.▪ insert_vertex(g,v) ::= 그래프 g에 정점 v를 삽입한다.▪ insert_edge(g,u,v) ::= 그래프 g에 간선 (u,v)를 삽입한다. ▪ delete_vertex(g,v) ::= 그래프 g의 정점 v를 삭제한다.▪ delete_edge(g,u,v) ::= 그래프 g의 간선 (u,v)를 삭제한다. ▪ is_empty(g) ::= 그래프 g가 공백 상태인지 확인한다. ▪ adjacent(v) ::= 정점 v에 인접한 정점들의 리스트를 반환한다. ▪ destroy_graph(g) ::= 그래프 g를 제거한다.

그래프에 정점을 추가하려면 insert_vertex 연산 사용 그래프에 간선을 추가하려면 insert_edge 연산 사용

Page 21: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 21

그래프 표현 방법 (1) – 인접 행렬

인접행렬 (adjacent matrix) 방법if(간선 (i, j)가 그래프에 존재) adjMtrx[i][j] = 1, 그렇지 않으면 adjMtrx[i][j] = 0.

인접 행렬의 대각선 성분은 모두 0(자체 간선 불허)무방향 그래프의 인접 행렬은 대칭

Page 22: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 22

그래프 표현 방법(2) – 인접 리스트

인접리스트 (adjacency list) 방법 각 정점에 인접한 정점들을 연결리스트로 표현

Page 23: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 23

그래프의 C 프로그램/* Graph.h (1) */#ifndef GRAPH_H#define GRAPH_H

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <limits>

#define MAX_NAME_LENGTH 10#define PLUS_INF INT_MAX/2enum VertexStatus {UNEXPLORED, VRTX_NOT_VISITED, VRTX_VISITED,

VRTX_NOT_SELECTED, VRTX_SELECTED};enum EdgeStatus {EDGE_UNEXPLORED, DISCOVERY, BACK, CROSS,

EDGE_NOT_FOUND, EDGE_VISITED};enum BFS_PROCSS_STATUS {NOT_SELECTED, SELECTED};enum DFS_DONE {NOT_DONE, DONE};

Page 24: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 24

/* Graph.h (2) */

typedef struct Vertex{

int ID;char vname[MAX_NAME_LENGTH];VertexStatus vtxStatus;Vertex(int id, char name[]);

} Vertex;

typedef struct VertexListNode{

Vertex *pV;VertexListNode *pNext;VertexListNode *pPrev;

} VertexListNode;

typedef struct VertexList{

VertexListNode *pFirst;VertexListNode *pLast;int num_vertices;

} VertexList;

/* Graph.h (3) */

typedef struct Edge{

Vertex *pV1;Vertex *pV2;int dist;EdgeStatus edgeStatus;Edge(Vertex *pV1, Vertex *pV2, int dist);

} Edge;

typedef struct EdgeListNode{

Edge *pE;EdgeListNode *pNext;EdgeListNode *pPrev;

} EdgeListNode;

typedef struct EdgeList{

EdgeListNode *pFirst;EdgeListNode *pLast;int num_edges;

} EdgeList;

Page 25: ch12 - Graph, Graph Algorithms-150528elearning.kocw.net/KOCW/document/2015/yeungnam/kimyoungt... · 2016. 9. 9. · ch12 - 2 Prof. Young-Tak Kim Outline 그래프(Graph) 그래프의응용예

Advanced Networking Tech. Lab.Yeungnam University (yuANTL)

Programming LanguageProf. Young-Tak Kimch12 - 25

/* Graph.h (4) */

typedef struct Graph{

Vertex **vrtxPtrArr; // vertex arrayEdgeList *adjLstArr; // adjacency list arrayint num_vertices;int **ppDistMtrx;Graph(int num_nodes);

} Graph;

void insertVertex(Graph *pGrp, Vertex *pVtrx);void insertEdge(Graph *pGrp, Edge *pEdge);void incidentEdges(Graph *pGrp, Vertex *pVrtx, EdgeList *pEdges);void printVrtx(Vertex *pV);void printEdge(Edge *pE);void printEdges(EdgeList el);void printGraph(Graph *pGrp);void printList(VertexList *pVTL);void printListReverse(VertexList *pVTL);void initList(VertexList *pVTL);void printDistMtrx(int **distMtrx, int num_nodes);void printDist(int num_nodes, int *dist, int round);void listPushBack(VertexList *pVTL, Vertex *pV);void listPopBack(VertexList *pVTL);void listPushBack(EdgeList *pEL, Edge *pE);void listInsertInOrder(EdgeList *pEL, Edge *pE);

#endif