mir.pe (일반/어두운 화면)
최근 수정 시각 : 2024-03-03 21:25:45

인접행렬


이산수학
Discrete Mathematics
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px; word-break: keep-all"
이론
<colbgcolor=#3CC> 기본 대상 수학기초론( 수리논리학 · 집합론) · 수열 · 조합 · 알고리즘 · 확률
다루는 대상과 주요 토픽
수열 등차수열( 뛰어 세기) · 등비수열 · 계차수열 · 조화수열 · 귀납적 정의( 점화식) · 급수 · 규칙과 대응 · 규칙 찾기 · 피보나치 수열 · 읽고 말하기 수열 · 생성함수
조합 경우의 수( 공식) · 순열( 완전순열 · 염주순열) · 치환 · 분할( 분할수) · 최단거리 · 제1종 스털링 수 · 제2종 스털링 수 · 카탈랑 수 · 벨 수 · 라흐 수 · 포함·배제의 원리 · 더블 카운팅 · 조합론
그래프 수형도(트리) · 인접행렬 · 마방진 · 마법진 · 한붓그리기( 해밀턴 회로) · 쾨니히스베르크 다리 건너기 문제
기타 P-NP 문제미해결 · 4색정리 · 이항정리( 파스칼의 삼각형) · 이산 푸리에 변환 · 비둘기 집의 원리 · 상트페테르부르크의 역설 · 투표의 역설 · 에르고딕 가설미해결 · 콜라츠 추측미해결 · 시행착오 ( 예상과 확인) · 불 논리 · 브라에스 역설
관련 문서 논리학 관련 정보 · 수학 관련 정보 · 컴퓨터 관련 정보 · 틀:수학기초론 · 틀:통계학 · 틀:이론 컴퓨터 과학 }}}}}}}}}



1. 개요2. 표현 방법3. 성질4. 경로의 개수
4.1. 예시
5. 특수한 인접행렬6. 관련 문서

1. 개요

, adjacency matrix

그래프에서 각 정점(vertex)의 연결 관계, 즉 간선(edge)의 존재 여부를 행렬로 표현한 것이다. 그래프에서 정점이 [math(n)]개일 때, 각 정점을 행과 열로 하는 [math(n)]차 정사각행렬이다.

2. 표현 방법

정점이 n개인 그래프의 각 정점에 대해 순서대로 [math(1, 2, ..., n)]으로 번호를 매길 때, 이 그래프에 대한 인접행렬을 [math(A)]라고 하면 다음과 같은 규칙을 따른다. (단, [math(a, b=1, 2, ..., n)]) 파일:인접행렬_그래프.png
예를 들어 위 그림에서 정점 A, B, C, D, E를 각각 숫자 1, 2, 3, 4, 5로 번호를 매기면 (가)는 무방향 그래프이므로 인접행렬은 다음과 같이 대칭행렬이다.
[math(A_{가}=\begin{pmatrix}0 & 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0 & 1 \\ 0 & 0 & 0 & 1 & 0\end{pmatrix})]
(나)는 방향 그래프이고, 그 인접행렬은 다음과 같다.
[math(A_{나}=\begin{pmatrix}0 & 1 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0\end{pmatrix})]
(다)는 무방향 간선이 존재하는 방향 그래프이고, 그 인접행렬은 다음과 같다.
[math(A_{다}=\begin{pmatrix}0 & 1 & 0 & 1 & 0 \\ 0 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0\end{pmatrix})]
(가), (나), (다) 모두 자기 자신으로 이동하는 간선은 존재하지 않으므로 주대각선상의 성분의 값은 항상 0이 된다.

3. 성질

4. 경로의 개수

인접행렬을 이용하여 정점의 개수가 [math(v)]개인 그래프의 어떤 정점 [math(a)]에서 다른 정점 [math(b)]로 이동하는 경로의 개수를 구할 수 있다. 인접행렬 [math(A)]에 대하여 [math(A^n)]은 어떤 정점에서 다른 정점으로 [math(n)] step을 거쳐서 이동하는 경로의 수를 나타낸다. 즉, [math(A^n_{ab})]는 그래프의 정점 [math(a)]에서 정점 [math(b)]로 [math(n)] step을 거쳐 이동하는 가능한 경로의 수이다. 증명은 수학적 귀납법을 사용하면 다음과 같다.
더 간단히 말해보자.
[math((A(n))_{ab})]를 [math(a)]에서 [math(b)]까지 [math(n)]번 이동해 도달하는 경로의 수라고 하자.
[math((A(n+m))_{ab})]는 모든 [math(k)]에 대하여 [math(a)]에서 시작, [math(n)]번 이동해 [math(k)]에 경유하고 다시 [math(m)]번 이동해 [math(b)]에 도달하는 경로수의 합이다. [math(k)]를 경유하는 경로수는 [math(a)]에서 [math(k)]로 [math(n)]번 이동한 경로수와 [math(k)]에서 [math(b)]로 [math(m)]번 이동하는 경로수의 곱이다. 따라서 [math(A(n+m)_{ab} = \displaystyle \sum_{k} (A(n))_{ak}(A(m))_{kb})]이다. 행렬곱에 의해 즉, [math(A(n+m)=A(n)A(m))]이다.
내부 자연수를 쪼개 각 행렬의 곱으로 표현할 수 있으므로 [math(1)]로 모두 쪼개어 [math(A(n)=A(1)^n)]이다. [math(A(1)=A)]로 인접행렬이므로, [math(A(n)=A^n)]이다. 즉, 증명되었다.

무방향 그래프인 경우 인접행렬이 대칭행렬이므로 몇 제곱을 하든지 여전히 대칭행렬이다. 따라서 무방향 그래프에서 [math(A^n_{ab})], 즉 정점 [math(a)]에서 [math(b)]로 [math(n)] step 만에 이동하는 경로의 수는 [math(A^n_{ba})], 즉 정점 [math(b)]에서 [math(a)]로 [math(n)] step 만에 이동하는 경로의 수와 같음을 알 수 있다.

인접행렬 [math(A)]에 대해서 [math(A^2)]의 주대각선의 성분은 각 정점에서 출발하여 그 정점으로 2 step 만에 돌아오는 경우의 수를 의미하므로, 무방향 그래프에서는 해당 정점과 직접 연결된 다른 정점의 개수, 즉 간선의 개수를 나타내고, 방향 그래프에서는 해당 정점과 쌍방 직접 연결된 다른 정점의 개수를 나타낸다.

sparse graph가 아닌 경우, 즉 각 정점들이 어느 정도 이상 연결되어 있는 경우 [math(A^n)]에서 [math(n)]이 커질수록 각 성분의 값, 즉 특정 정점에서 다른 정점으로 [math(n)] step 만에 이동하는 경로의 수도 늘어나는 추세를 보인다. 각 정점들 간에 상당수 연결되어 있는 경우에는 기하급수적으로 늘어나는 추세를 보인다. sparse한 무방향 그래프이거나, 방향 그래프이더라도 일부 정점들이 cycle 형태로 연결된 그래프의 경우에는 같은 이동 경로를 무한히 반복할 수 있기 때문에 [math(n)]의 값이 커져도 각 성분의 값이 0으로 수렴하지 않지만, cycle이 없는 방향 그래프의 경우 그래프 내에서 정점의 개수 이상의 횟수로 이동하는 것이 불가능하므로 [math(n)]이 커지면 각 성분의 값이 0으로 수렴하며, 정점의 수 이상으로 커지면 반드시 영행렬이 된다. 정확히는 순서대로 이동할 수 있는 정점의 chain의 최대 길이가 [math(l)]인 경우, [math(A^{l-1})]까지는 영행렬이 아니며 [math(A^l)]부터 영행렬이다.

4.1. 예시

예를 들어 위 그림의 그래프 (가)의 인접행렬 [math(A_{가})]의 제곱은 다음과 같다.
[math(A_{가}^2=\begin{pmatrix}0 & 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 1 & 1 & 0 & 0 & 1 \\ 0 & 0 & 0 & 1 & 0\end{pmatrix}^2=\begin{pmatrix}2 & 1 & 1 & 1 & 1 \\ 1 & 3 & 0 & 1 & 1 \\ 1 & 0 & 1 & 1 & 0 \\ 1 & 1 & 1 & 3 & 0 \\ 1 & 1 & 0 & 0 & 1\end{pmatrix})]
여기서 정점 C→정점 D로 2 step 만에 이동하는 경로의 수는 [math({A_{가}^2}_{34})] 성분과 같으므로 1개이다. 실제로 구해 보면 C→B→D의 1개밖에 존재하지 않는다. 주대각선을 보면 정점 A에서 자기 자신으로 2 step만에 이동하는 경로의 수는 [math({A_{가}^2}_{11}=2)]로, A와 이웃한 정점(B, D)의 개수와 같다. 실제로 경로를 찾아보면 A→B→A, A→D→A의 2가지뿐이다.

한편 이때 [math(A_{가})]의 세제곱은 다음과 같다.
[math(A_{가}^3=\begin{pmatrix}2 & 4 & 1 & 4 & 1 \\ 4 & 2 & 3 & 5 & 1 \\ 1 & 3 & 0 & 1 & 1 \\ 4 & 5 & 1 & 2 & 3 \\ 1 & 1 & 1 & 3 & 0\end{pmatrix})]
여기서 정점 B에서 D로 3 step 만에 이동하는 경로의 수는 [math({A_{가}^3}_{24})] 성분과 같으므로 5개이다. 실제로 찾아보면 B→A→B→D, B→C→B→D, B→D→A→D, B→D→B→D, B→D→E→D로 5가지이다.

방향 그래프인 그래프 (나)의 인접행렬 [math(A_{나})]의 제곱은 다음과 같다.
[math(A_{나}^2=\begin{pmatrix}0 & 1 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0\end{pmatrix}^2=\begin{pmatrix}0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0\end{pmatrix})]
여기서 정점 A→정점 D로 2 step 만에 이동하는 경로의 수는 [math({A_{나}^2}_{14})] 성분과 같으므로 1개이다. 실제로 구해 보면 A→B→D의 1개밖에 존재하지 않는다. 주대각선의 성분은 모두 0인데, 이는 모든 각 정점에 대해서 쌍방향으로 연결된 간선이 단 하나도 없다는 것을 의미한다.

한편, 여기서 [math(A_{나}^n)]은 [math(n)]이 3 이상일 때 영행렬이 되는데, 이것은 그래프 (나)에서 어떤 정점에서 3 step을 이동하여 다른 정점으로 이동할 수 있는 방법이 전혀 없음을 의미한다.

5. 특수한 인접행렬

6. 관련 문서

분류