알고리즘 7 주차
DESCRIPTION
알고리즘 7 주차. 10.11.03. 그래프 추상 데이터 타입 (1). 그래프의 정의 G = (V, E) : 그래프 G 는 2 개의 집합 V 와 E 로 구성 V : 공백이 아닌 노드 또는 정점 (vertex) 의 유한집합 V 만 표현 : V(G) 로 표기 E : 상이한 두 정점을 잇는 간선 (edge) 의 유한집합 E 만 표현 : E(G) 로 표기 무방향 그래프 (undirected graph) 간선을 표현하는 두 정점의 쌍에 순서가 없는 그래프 - PowerPoint PPT PresentationTRANSCRIPT
알고리즘 7 주차
10.11.03
그래프 추상 데이터 타입 (1)• 그래프의 정의
– G = (V, E) : 그래프 G 는 2 개의 집합 V 와 E 로 구성– V : 공백이 아닌 노드 또는 정점 (vertex) 의 유한집합
• V 만 표현 : V(G) 로 표기– E : 상이한 두 정점을 잇는 간선 (edge) 의 유한집합
• E 만 표현 : E(G) 로 표기
• 무방향 그래프 (undirected graph)– 간선을 표현하는 두 정점의 쌍에 순서가 없는 그래프– (v0, v1) = (v1, v0)
• 방향 그래프 (directed graph)– 유방향 그래프 또는 다이그래프 (digraph)– 간선을 표현하는 두 정점의 쌍에 순서가 있는 그래프– vj → vk 를 < vj, vk > 로 표현 (vj 는 꼬리 (tail), vk 는 머리
(head))– < vj, vk > ≠ < vk, vj >
그래프 추상 데이터 타입 (2)
V(G1)={0, 1, 2, 3} E(G1)={(0, 1), (0, 3), (1, 2), (1, 3), (2, 3)}
V(G2)={0, 1, 2} E(G2)={<0, 1>, <1, 0>, <1, 2>}
V(G3)={0, 1, 2, 3, 4} E(G3)={(0, 1), (1, 2), (3, 4)}
그래프 예와 각 그래프의 정점 집합과 간선 집합
0
1
3
2
0
1
2
0
1
3
4
2
G1 G2 G3
그래프 표현• 그래프 표현 방법–인접 행렬 (adjacency matrix)–인접 리스트 (adjacency list)–인접 다중 리스트 (adjacency multilist)
• 그래프에 수행시키려는 연산과 적용하려는 응용에 따라 선택
인접 행렬 (1)• 인접 행렬 (adjacency matrix)
– n≥1 개의 정점을 가지는 그래프 G = (V, E) 에 대해 크기가 nⅹn인 2 차원 배열 a[n, n]
– 부속 행렬 (incidence matrix) 이라고도 함– 인접 행렬로 표현하는데 필요한 공간 : n2 비트
• 무방향 그래프 : 행렬의 상위 삼각이나 하위 삼각만 저장한다면 거의 반 정도의 공간을 절약
– 인접 행렬의 정보• 무방향 그래프 : 행 i 의 합은 정점 i 의 차수• 방향 그래프 : 행 i 의 합은 정점 i 의 진출 차수 , 열 i 의 합은
정점 i 의 진입 차수
E(G)j)(i, 0,
E(G)j)(i, 1, j]a[i,
인접 행렬 (2)
0
1
3
2
0
1
2
0
1
3
4
2
G1 G2 G3
0 1 0 11 0 1 10 1 0 11 1 1 0
[0] [1] [2] [3]
[0][1][2][3]
a[4, 4]
0 1 01 0 10 0 0
[0] [1] [2]
[0][1][2]
a[3, 3]
0 1 0 0 01 0 1 0 00 1 0 0 00 0 0 0 10 0 0 1 0
[0] [1] [2] [3]
[0][1][2][3]
a[5, 5]
[4]
[4]
그래프 G1, G2, G3 에 대한 인접 행렬 표현
인접 리스트 (1)
• 인접 리스트 (adjacency list)– n 개의 정점 각각에 대한 인접한 정점들을 리스트로 만듦– 인접 리스트의 구현
• 연결 리스트• 순차 표현
• 연결 리스트로 구현한 인접 리스트– 각각의 정점의 리스트 : 헤더 노드와 vertex 필드 , link
필드로 구성된 리스트 노드로 이루어짐– n 개의 정점과 e 개의 간선을 가진 그래프에서
• 무방향 그래프는 n 개의 헤더 노드와 2e 개의 리스트 노드 필요• 방향 그래프는 n 개의 헤더 노드와 e 개의 리스트 노드 필요
인접 리스트 (2)0
1
3
2
0
1
2
G1
G2
header vertexlink[0]
[1]
[2]
[3]
3 null
3 null
1
0 2
1 3 null
0 1 2 null
null
header
[0]
[1]
[2]
1 null
0 2 null
(a) G1 에 대한 인접 리스트
(b) G2 에 대한 인접 리스트
프로젝트 작성은 이렇게 ..
반복되는 공지• 과제는 당일의 실습 파일입니다 .
– 이 말은 항상 과제가 있다는 것입니다 .– 가끔 그 주의 실습 내용 이외의 것을 해오라 할 땐 수업 끝날 때 꼭 얘기 해드립니다 . 물론 이런
상황은 별로 없을 것이라 생각합니다만 .. 갈 때 잘 들어주세요 .
• 과제는 e-campus 에 제출하며 기간은 그 주 실습 날부터 다음주 실습 날까지 입니다 .– 가끔 바로 과제 제출 게시판을 열지 못하는 경우가 있지만 , 반드시 실습 전에는 개설합니다 . 혹시
안 열려있다면 다음주 실습 날까지 간간히 확인해 보세요 .
– 혹시 못 내셨다면 늦게라도 [email protected]에 제출하세요 .
– 메일로 낸다면 제목 및 파일의 형식은 해당주차 _ 학번 _ 이름을 꼭 지켜주세요 . ( Ex) 7 주차_20025176_ 박제훈 ) 주차는 해당 주차의 ppt 제목에 있습니다 .
– 보통 당일의 실습 내용은 과제 제출기간이 종료된 시점에서 2 주안에 http://testspace.egloos.com에 제가 짠 소스를 올립니다 . 못해서 제출을 못한 분은 그 소스를 참조하셔서 제출하세요 . 단 , 복사 - 붙여 넣기는 되도록이면 하지 않았으면 좋겠습니다 . 본인에게 전혀 도움이 되지 않는 코딩 방법입니다 .