SNA 이론 · 단계별 학습 차례

단원 1-3Matrix Cubed: Walks vs Paths & Triangles

A³, 걷기 vs 경로, 삼각 순환

SNA 이론 · 단계별 학습STAGED+ 스터디

1. 오늘의 질문 (Today's Question)

단원 1-2에서 (A2)[i,j](A^2)[i,j]"ii에서 jj로 가는 2단계 경로의 개수"라고 읽었다. 자연스러운 다음 질문은 이것이다:

(A3)[i,j](A^3)[i,j]는 "3단계 경로의 개수"인가?

아니다. 오늘 단원의 목적은 이 "아니다"를 정확히 이해하는 것이다. A2A^2까지는 우연히 맞았고, A3A^3부터 어긋난다. 어디서 어긋나는지, 왜 어긋나는지, 그럼 A3A^3의 값은 정확히 무엇을 세는지를 손으로 확인한다.

네트워크는 단원 1-1·1-2와 같은 학생 5명의 지명 데이터를 계속 쓴다. 지명 7건:

M1→M2 M1→M3 M1→M5 M2→M3 M3→M1 M3→M4 M5→M1

5명 방향 네트워크
양방향 화살표(M1↔M3, M1↔M5)는 상호 지명 — 오늘의 함정이 바로 여기서 나온다
A=M1M2M3M4M5M101101M200100M310010M400000M510000A2=M1M2M3M4M5M120110M210010M301101M400000M501101 A=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & 1 & 0 & 1\\ M_2 & 0 & 0 & 1 & 0 & 0\\ M_3 & 1 & 0 & 0 & 1 & 0\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & 1 & 0 & 0 & 0 & 0 \end{array} \qquad A^2=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 2 & 0 & 1 & 1 & 0\\ M_2 & 1 & 0 & 0 & 1 & 0\\ M_3 & 0 & 1 & 1 & 0 & 1\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & 0 & 1 & 1 & 0 & 1 \end{array}

A2A^2은 단원 1-2 §7에서 손으로 다 구해 놓은 것이므로 오늘은 그대로 가져다 쓴다.

2. 걷기·경로·순환의 정의 (Walk, Path, Cycle: Definitions)

어긋남을 이해하려면 먼저 세 가지를 구별하는 말이 필요하다. 지금까지 뭉뚱그려 "경로"라고 불렀던 것을 쪼갠다.

정의. 지명 화살표를 따라 이어 붙인 학생들의 나열 v0v1vkv_0 \to v_1 \to \cdots \to v_k (모든 tt에 대해 A[vt1,vt]=1A[v_{t-1},v_t]=1)를 길이 kk걷기(walk)라 한다. 길이 = 걸음 수(화살표 수)이고, 지나는 학생 수는 k+1k+1이다.

  • 걷기(walk) — 같은 학생을 몇 번이든 다시 지나도 된다. 아무 제약 없음.
  • 트레일(trail) — 같은 화살표를 두 번 쓰지 않는다. (학생은 다시 지날 수 있다)
  • 경로(path) — 같은 학생을 두 번 지나지 않는다. 가장 엄격하다.
  • 순환(cycle) — 출발점과 도착점만 같고(v0=vkv_0=v_k), 그 외에는 재방문이 없다. 길이 3인 순환을 삼각 순환(3-cycle)이라 한다.

우리 네트워크에서 실제로 존재하는 3걸음 걷기 몇 개를 이 자로 재 보면:

걷기지나는 학생재방문분류
M1→M2→M3→M4M1, M2, M3, M4없음경로 (path)
M1→M2→M3→M1M1, M2, M3, M1출발점=도착점만순환 (3-cycle)
M1→M3→M1→M3M1, M3, M1, M3M1·M3 각각 두 번걷기일 뿐
M1→M5→M1→M3M1, M5, M1, M3M1 두 번걷기일 뿐

세 번째·네 번째를 "M1에서 M3으로 가는 3단계 경로"라고 부르면 틀린다. M1을 다시 밟았으니 제자리로 돌아왔다 다시 출발한 것이지, 새로운 사람을 셋 거쳐 간 것이 아니다. 교실 언어로 말하면 "친구의 친구의 친구"가 아니라 "내 친구 → 나 → 내 친구"일 뿐이다.

정리 (오늘의 핵심).

(Ak)[i,j]  =  i에서 j로 가는 길이 k의 걷기(walk)의 개수 (A^k)[i,j] \;=\; i \text{에서 } j \text{로 가는 길이 } k \text{의 } \textbf{걷기(walk)의 개수}

경로가 아니라 걷기다. k=1,2k=1,2에서는 걷기와 경로가 (거의) 일치해서 차이가 안 보였을 뿐이다.

3. 손으로 A3A^3 만들기 (Building A3A^3 by Hand)

3-1. 먼저 보통 숫자로 — 세제곱은 곱셈을 한 번 더 (Ordinary Numbers First)

새 규칙은 없다. 단원 1-2 §3의 "왼쪽 행렬의 행을 가로로, 오른쪽 행렬의 열을 세로로 읽어 짝끼리 곱해 더한다"를 한 번 더 하는 것이 전부다. 익숙한 숫자로 확인하자.

B=(1234)B2=B×B=(7101522) B=\begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \qquad\Rightarrow\qquad B^2 = B\times B = \begin{pmatrix} 7 & 10 \\ 15 & 22 \end{pmatrix}

(B2B^2의 첫 칸: 11+23=71\cdot1+2\cdot3=7.) 이제 B3=B2×BB^3 = B^2 \times B이므로 B2B^2의 행BB의 열을 짝지으면 된다:

B3=(7101522)×(1234)(B3)[1,1]=71+103=37 B^3= \begin{pmatrix} \color{#2563eb}{7} & \color{#2563eb}{10} \\ 15 & 22 \end{pmatrix} \times \begin{pmatrix} \color{#d97706}{1} & 2 \\ \color{#d97706}{3} & 4 \end{pmatrix} \qquad (B^3)[1,1]=\textcolor{#2563eb}{7}\cdot\textcolor{#d97706}{1}+\textcolor{#2563eb}{10}\cdot\textcolor{#d97706}{3}=\mathbf{37}

같은 식으로 네 칸을 다 채우면:

B2B^2의 행 (가로)BB의 열 (세로)짝끼리 곱의 합
[1,1][1,1](7,10)(7,\,10)(1,3)(1,\,3)71+1037\cdot1+10\cdot337
[1,2][1,2](7,10)(7,\,10)(2,4)(2,\,4)72+1047\cdot2+10\cdot454
[2,1][2,1](15,22)(15,\,22)(1,3)(1,\,3)151+22315\cdot1+22\cdot381
[2,2][2,2](15,22)(15,\,22)(2,4)(2,\,4)152+22415\cdot2+22\cdot4118
B3=(375481118) B^3=\begin{pmatrix} 37 & 54 \\ 81 & 118 \end{pmatrix}

3-2. A3=A2×AA^3 = A^2 \times A — 무엇을 곱하는가 (What Gets Multiplied)

A3A^3도 똑같다. 왼쪽에 A2A^2, 오른쪽에 AA를 놓는다:

(A3)[i,j]  =  k=15(A2)[i,k]A[k,j] (A^3)[i,j] \;=\; \sum_{k=1}^{5} (A^2)[i,k]\cdot A[k,j]

단원 1-2의 식과 모양은 같지만 kk의 정체가 다르다. 이 차이가 오늘 계산의 전부다:

왼쪽 조각kk의 정체오른쪽 조각합계 걸음
(A2)[i,j](A^2)[i,j]A[i,k]A[i,k] = 1걸음1걸음 뒤 도착지A[k,j]A[k,j] = 1걸음1+1 = 2
(A3)[i,j](A^3)[i,j](A2)[i,k](A^2)[i,k] = 2걸음2걸음 뒤 도착지A[k,j]A[k,j] = 1걸음2+1 = 3

즉 "ii에서 두 걸음 걸어 kk에 도착한 걷기의 수" × "kk에서 jj로 가는 마지막 한 걸음"이다. 그리고 여기서 이미 함정의 씨앗이 보인다 — 이어 붙일 때 "앞의 두 걸음에서 이미 jj를 지났는지" 아무도 확인하지 않는다.

4. (A3)[3,3](A^3)[3,3] 완전 전개 — 삼각 순환 (Full Expansion: a Triangle)

먼저 잘 작동하는 경우부터. M3에서 출발해 3걸음 뒤 M3으로 돌아오는 걷기를 센다. 왼쪽 A2A^2에서 M3의 행, 오른쪽 AA에서 M3의 열을 꺼낸다:

A2M1M2M3M4M5M120110M210010M301101M400000M501101  ×  AM1M2M3M4M5M101101M200100M310010M400000M510000 \begin{array}{c|ccccc} A^2 & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 2 & 0 & 1 & 1 & 0\\ M_2 & 1 & 0 & 0 & 1 & 0\\ M_3 & \color{#2563eb}{0} & \color{#2563eb}{1} & \color{#2563eb}{1} & \color{#2563eb}{0} & \color{#2563eb}{1}\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & 0 & 1 & 1 & 0 & 1 \end{array} \;\times\; \begin{array}{c|ccccc} A & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & \color{#d97706}{1} & 0 & 1\\ M_2 & 0 & 0 & \color{#d97706}{1} & 0 & 0\\ M_3 & 1 & 0 & \color{#d97706}{0} & 1 & 0\\ M_4 & 0 & 0 & \color{#d97706}{0} & 0 & 0\\ M_5 & 1 & 0 & \color{#d97706}{0} & 0 & 0 \end{array} (A2)[3,]=(0,  1,  1,  0,  1),A[,3]=(1,  1,  0,  0,  0) (A^2)[3,\,]=(\,\textcolor{#2563eb}{0},\;\textcolor{#2563eb}{1},\;\textcolor{#2563eb}{1},\;\textcolor{#2563eb}{0},\;\textcolor{#2563eb}{1}\,), \qquad A[\,,3]=(\,\textcolor{#d97706}{1},\;\textcolor{#d97706}{1},\;\textcolor{#d97706}{0},\;\textcolor{#d97706}{0},\;\textcolor{#d97706}{0}\,)

다섯 항을 하나도 빼지 않고 전개한다:

kk(A2)[3,k](A^2)[3,k]
M3→…→kk 2걸음
A[k,3]A[k,3]
kk→M3 1걸음
왜 그 값인가
1010M1→M3은 있지만, 2걸음으로 M1에 갈 수 없다(M3→M1은 1걸음)
21112걸음 M3→M1→M2 + 1걸음 M2→M3 → 연결됨
31002걸음으로 M3에 돌아오긴 하지만(M3→M1→M3) M3→M3 자기 지명이 없다
40002걸음으로 M4에 못 가고, M4→M3도 없다
51002걸음으로 M5까지는 간다(M3→M1→M5) 그러나 M5→M3이 없다
1
(A3)[3,3]=01+11+10+00+10=1 (A^3)[3,3] = \textcolor{#2563eb}{0}\cdot\textcolor{#d97706}{1} + \textcolor{#2563eb}{1}\cdot\textcolor{#d97706}{1} + \textcolor{#2563eb}{1}\cdot\textcolor{#d97706}{0} + \textcolor{#2563eb}{0}\cdot\textcolor{#d97706}{0} + \textcolor{#2563eb}{1}\cdot\textcolor{#d97706}{0} = \mathbf{1}

경로 복원. 살아남은 항 k=2k=2를 두 조각으로 되짚는다. (A2)[3,2]=1(A^2)[3,2]=1은 단원 1-2 §7에서 M3→M1→M2였고, 여기에 A[2,3]=1A[2,3]=1M2→M3을 이어 붙이면:

M3M1M2(A2)[3,2]=1    M3A[2,3]=1 \underbrace{M_3 \to M_1 \to M_2}_{(A^2)[3,2]=1} \;\to\; \underbrace{M_3}_{A[2,3]=1}

3걸음 걷기 M3→M1→M2→M3 하나. 세 학생이 모두 다르고 출발점으로만 돌아왔으니 진짜 삼각 순환이다. 단원 1-2 §13-2에서 구한 M1→M2→M3→M1같은 삼각형을 출발점만 바꿔 본 것이다 — §8에서 이 중복이 왜 3이 되는지 다룬다.

5. (A3)[1,3]=2(A^3)[1,3]=2 — 함정 (The Trap: 2 Walks, 0 Paths)

이번엔 어긋나는 자리다. M1에서 M3으로 가는 3걸음을 센다. 왼쪽 A2A^2M1 행, 오른쪽 AAM3 열:

A2M1M2M3M4M5M120110M210010M301101M400000M501101  ×  AM1M2M3M4M5M101101M200100M310010M400000M510000 \begin{array}{c|ccccc} A^2 & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & \color{#2563eb}{2} & \color{#2563eb}{0} & \color{#2563eb}{1} & \color{#2563eb}{1} & \color{#2563eb}{0}\\ M_2 & 1 & 0 & 0 & 1 & 0\\ M_3 & 0 & 1 & 1 & 0 & 1\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & 0 & 1 & 1 & 0 & 1 \end{array} \;\times\; \begin{array}{c|ccccc} A & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & \color{#d97706}{1} & 0 & 1\\ M_2 & 0 & 0 & \color{#d97706}{1} & 0 & 0\\ M_3 & 1 & 0 & \color{#d97706}{0} & 1 & 0\\ M_4 & 0 & 0 & \color{#d97706}{0} & 0 & 0\\ M_5 & 1 & 0 & \color{#d97706}{0} & 0 & 0 \end{array}
kk(A2)[1,k](A^2)[1,k]
M1→…→kk 2걸음
A[k,3]A[k,3]
kk→M3 1걸음
왜 그 값인가
12122걸음으로 M1에 돌아오는 길이 2개, 거기서 M1→M3 → 여기서 2가 나온다
2010M2→M3은 있지만 2걸음으로 M2에 도달할 수 없다(M2를 지명한 사람은 M1뿐)
31002걸음으로 M3까지는 간다(M1→M2→M3) 그러나 M3→M3이 없다
4100M4에 도달해도 M4는 아무도 지명하지 않는다
50002걸음으로 M5에 못 가고, M5→M3도 없다
2
(A3)[1,3]=21+01+10+10+00=2 (A^3)[1,3] = \textcolor{#2563eb}{2}\cdot\textcolor{#d97706}{1} + \textcolor{#2563eb}{0}\cdot\textcolor{#d97706}{1} + \textcolor{#2563eb}{1}\cdot\textcolor{#d97706}{0} + \textcolor{#2563eb}{1}\cdot\textcolor{#d97706}{0} + \textcolor{#2563eb}{0}\cdot\textcolor{#d97706}{0} = \mathbf{2}

걷기 복원. 문제는 k=1k=1 항의 2다. (A2)[1,1]=2(A^2)[1,1]=2는 단원 1-2 §4에서 "M1이 맺은 상호 지명 2건", 즉 2걸음으로 제자리로 돌아오는 걷기 M1→M3→M1M1→M5→M1이었다. 각각에 마지막 걸음 M1→M3을 이어 붙이면:

2걸음 조각 ((A2)[1,1]=2(A^2)[1,1]=2)+ 마지막 걸음완성된 3걸음 걷기재방문판정
M1→M3→M1M1→M3M1→M3→M1→M3M1·M3 각 두 번경로 아님
M1→M5→M1M1→M3M1→M5→M1→M3M1 두 번경로 아님

(A3)[1,3]=2(A^3)[1,3]=2의 정확한 뜻: "3걸음 걷기가 2개"다. "3단계 경로가 2개"는 틀렸다 — 3단계 경로는 0개다.

직접 확인해 보면 M1에서 서로 다른 두 사람을 거쳐 M3에 닿는 길은 없다. M1이 지명한 사람은 M2, M3, M5인데 — M2는 M3만 지명하므로 2걸음이면 이미 도착(3걸음 못 채움), M3은 목적지 자신, M5는 M1만 지명하므로 되돌아온다. 그래서 0개. 그런데도 행렬은 2를 내놓는다.

6. A3A^3 전체와 19개 걷기 전수 분류 (All 19 Walks Classified)

A3=M1M2M3M4M5M112212M201101M320110M400000M520110i,j(A3)[i,j]=19 A^3=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & \mathbf{1} & \mathbf{2} & \mathbf{2} & \mathbf{1} & \mathbf{2}\\ M_2 & 0 & \mathbf{1} & \mathbf{1} & 0 & \mathbf{1}\\ M_3 & \mathbf{2} & 0 & \mathbf{1} & \mathbf{1} & 0\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & \mathbf{2} & 0 & \mathbf{1} & \mathbf{1} & 0 \end{array} \qquad \sum_{i,j}(A^3)[i,j] = 19

모든 원소의 값이 어떤 걷기들인지 전부 적으면 이렇다. 색으로 분류했다 — 초록 = 진짜 경로, 보라 = 삼각 순환, 빨강 = 재방문 걷기.

원소3걸음 걷기 목록분류
[1,1][1,1]1M1→M2→M3→M1삼각 순환
[1,2][1,2]2M1→M3→M1→M2 M1→M5→M1→M2둘 다 M1 재방문
[1,3][1,3]2M1→M3→M1→M3 M1→M5→M1→M3§5의 함정
[1,4][1,4]1M1→M2→M3→M4경로
[1,5][1,5]2M1→M3→M1→M5 M1→M5→M1→M5둘 다 M1 재방문
[2,2][2,2]1M2→M3→M1→M2삼각 순환
[2,3][2,3]1M2→M3→M1→M3M3 재방문
[2,5][2,5]1M2→M3→M1→M5경로
[3,1][3,1]2M3→M1→M3→M1 M3→M1→M5→M1둘 다 M1 재방문
[3,3][3,3]1M3→M1→M2→M3삼각 순환 (§4)
[3,4][3,4]1→ 연습문제 2에서 직접 구한다
[5,1][5,1]2M5→M1→M3→M1 M5→M1→M5→M1둘 다 M1 재방문
[5,3][5,3]1→ 연습문제 1에서 직접 구한다
[5,4][5,4]1M5→M1→M3→M4경로

연습문제로 남긴 두 칸을 빼고 세면 17개 걷기 중 진짜 경로는 3개, 삼각 순환 3개, 재방문 걷기가 11개다. 즉 A3A^3의 값 대부분은 "왔다 갔다 한 것"이다.

M4의 행이 전부 0인 이유는 단원 1-2와 같다 — M4는 아무도 지명하지 않아 어떤 걷기의 출발점도 될 수 없다. 반면 A3A^3M4 열(1,0,1,0,1)(1,0,1,0,1)로 0이 아니다. "남들은 M4에 도달할 수 있지만 M4는 아무 데도 갈 수 없다" — 방향 네트워크에서 행과 열을 반드시 따로 읽어야 하는 이유다.

7. 왜 행렬 곱은 경로를 못 세는가 (Why Matrix Powers Cannot Count Paths)

이유는 §3-2의 식 하나에 다 들어 있다:

(A3)[i,j]=k(A2)[i,k]2걸음 걷기의 개수A[k,j]마지막 한 걸음 (A^3)[i,j] = \sum_{k} \underbrace{(A^2)[i,k]}_{\text{2걸음 걷기의 } \textbf{개수}} \cdot \underbrace{A[k,j]}_{\text{마지막 한 걸음}}

왼쪽 조각은 개수(숫자)일 뿐, "누구를 거쳐 왔는지"를 기억하지 않는다. (A2)[1,1]=2(A^2)[1,1]=2는 "2걸음으로 제자리에 돌아오는 길이 둘"이라는 숫자 2이고, 그 길이 M3을 지났는지 M5를 지났는지는 이미 잊혀졌다. 그러니 마지막 걸음 M1→M3을 붙일 때 "아까 M3 지났잖아"라고 걸러낼 방법이 없다. 행렬 곱셈에는 방문 기록(메모리)이 없다.

7-1. 나쁜 항은 행렬의 어느 칸에서 오는가 (Locating the Bad Term in the Matrix)

말로만 하면 와닿지 않으니 행렬을 직접 놓고 확인한다. §5의 (A3)[1,3]=2(A^3)[1,3]=2를 다시 본다. 왼쪽 A2A^2M1 행과 오른쪽 AAM3 열을 곱한다:

A2M1M2M3M4M5M120110M210010M301101M400000M501101  ×  AM1M2M3M4M5M101101M200100M310010M400000M510000 \begin{array}{c|ccccc} A^2 & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & \color{#2563eb}{2} & \color{#2563eb}{0} & \color{#2563eb}{1} & \color{#2563eb}{1} & \color{#2563eb}{0}\\ M_2 & 1 & 0 & 0 & 1 & 0\\ M_3 & 0 & 1 & 1 & 0 & 1\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & 0 & 1 & 1 & 0 & 1 \end{array} \;\times\; \begin{array}{c|ccccc} A & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & \color{#d97706}{1} & 0 & 1\\ M_2 & 0 & 0 & \color{#d97706}{1} & 0 & 0\\ M_3 & 1 & 0 & \color{#d97706}{0} & 1 & 0\\ M_4 & 0 & 0 & \color{#d97706}{0} & 0 & 0\\ M_5 & 1 & 0 & \color{#d97706}{0} & 0 & 0 \end{array}
kk(A2)[1,k](A^2)[1,k]A[k,3]A[k,3]이 항이 만드는 걷기
1212M1로 되돌아오는 2걸음 2개 + M1→M3
20102걸음으로 M2에 도달할 수 없다
3100M3까지는 가지만 M3→M3(자기 지명)이 없다
4100M4까지는 가지만 M4→M3이 없다
50002걸음으로 M5에 못 가고, M5→M3도 없다
2

살아남은 항은 k=1k=1 하나뿐이고, 그 항의 왼쪽 값 (A2)[1,1]=2(A^2)[1,1]=2는 행 번호와 열 번호가 같은 대각선 칸이다. 대각선 = 출발점으로 되돌아온 걷기. 즉 이 예에서 헛걸음 2개는 정확히 A2A^2의 대각선을 타고 들어왔다. 그렇다면 그 대각선의 정체가 무엇인지부터 밝혀야 한다.

7-2. A2A^2의 대각선 = 상호 지명 수 (The Diagonal of A2A^2 Counts Mutual Nominations)

(A2)[1,1](A^2)[1,1]을 정의대로 다섯 항 전부 전개한다(0인 항도 생략하지 않는다):

(A2)[1,1]=kA[1,k]A[k,1]=00k=1+10k=2+11k=3+00k=4+11k=5=2 (A^2)[1,1] = \sum_{k} A[1,k]\,A[k,1] = \underbrace{0\cdot 0}_{k=1} + \underbrace{1\cdot 0}_{k=2} + \underbrace{1\cdot 1}_{k=3} + \underbrace{0\cdot 0}_{k=4} + \underbrace{1\cdot 1}_{k=5} = \mathbf{2}

A[1,k]A[k,1]A[1,k]\,A[k,1]이 1이 되려면 M1→kkkk→M1이 동시에 있어야 한다. 곧 상호 지명이다. 살아남은 k=3,5k=3,\,5가 바로 M1의 상호 지명 상대다. 이 곱을 행렬 전체에 대해 한 번에 하려면 AA와 그 전치 ATA^{\mathsf T}를 같은 자리끼리 곱하면(아다마르 곱 \odot) 된다:

M=AAT=M1M2M3M4M5M100101M200000M310000M400000M510000행 합  =  (2,0,1,0,1) M = A \odot A^{\mathsf T} = \begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 0 & \color{#dc2626}{1} & 0 & \color{#dc2626}{1}\\ M_2 & 0 & 0 & 0 & 0 & 0\\ M_3 & \color{#dc2626}{1} & 0 & 0 & 0 & 0\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & \color{#dc2626}{1} & 0 & 0 & 0 & 0 \end{array} \qquad \text{행 합} \;=\; (2,\,0,\,1,\,0,\,1)

이 행 합을 mim_i("ii의 상호 지명 친구 수")라 부르자. A2A^2의 대각선과 나란히 놓으면 완전히 같다:

M1M2M3M4M5
MM의 행 합 mim_i20101
(A2)[i,i](A^2)[i,i]20101

(A2)[i,i]=mi(A^2)[i,i] = m_i = ii의 상호 지명 수. M4는 아무도 지명하지 않으니 0, M2는 M3을 지명했지만 M3이 되받지 않았으니 0이다. 이 사실은 단원 1-2 §4에서 이미 봤던 것을 행렬 식으로 다시 쓴 것뿐이다.

7-3. 그럼 왜 A2A^2까지는 맞았나 (Why A2A^2 Was Safe)

정정. 이 노트의 이전 판에는 "길이 2 걷기 ikji\to k\to j에서 재방문이 생기려면 k=ik=i 또는 k=jk=j여야 한다"고만 적혀 있었다. 이 문장은 iji\neq j를 전제로 할 때만 참이다. i=ji=j이면 kk가 무엇이든 출발점을 다시 밟으므로 애초에 경로가 아니다 — 그리고 방금 본 대로 diag(A2)=(2,0,1,0,1)\operatorname{diag}(A^2)=(2,0,1,0,1)은 0이 아니다. 즉 2걸음 걷기 중에도 경로가 아닌 것이 실제로 존재한다. 전제를 앞에 명시하도록 아래와 같이 고쳐 쓴다.

A2A^2를 대각선과 나머지로 갈라 놓고 보면 사정이 한눈에 보인다:

A2=M1M2M3M4M5M120110M210010M301101M400000M501101대각선 합=4    전부 경로 아님나머지 합=8    전부 경로 A^2 = \begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & \color{#dc2626}{2} & 0 & \color{#059669}{1} & \color{#059669}{1} & 0\\ M_2 & \color{#059669}{1} & \color{#dc2626}{0} & 0 & \color{#059669}{1} & 0\\ M_3 & 0 & \color{#059669}{1} & \color{#dc2626}{1} & 0 & \color{#059669}{1}\\ M_4 & 0 & 0 & 0 & \color{#dc2626}{0} & 0\\ M_5 & 0 & \color{#059669}{1} & \color{#059669}{1} & 0 & \color{#dc2626}{1} \end{array} \qquad \begin{aligned} &\textcolor{#dc2626}{\text{대각선 합}} = 4 \;\rightarrow\; \text{전부 경로 아님}\\ &\textcolor{#059669}{\text{나머지 합}} = 8 \;\rightarrow\; \text{전부 경로} \end{aligned}

대각선의 4개는 M1→M3→M1, M1→M5→M1, M3→M1→M3, M5→M1→M5 — 모두 상호 지명을 왕복한 것이다(§7-2). 그리고 iji\neq j인 칸 8개는 하나도 빠짐없이 경로다. 왜 그런가:

ikji\to k\to j에서
어느 둘이 같은가
걷기 모양필요한 조건가능한가
k=ik=iiiji\to i\to jA[i,i]=1A[i,i]=1✗ 자기 지명 없음
k=jk=jijji\to j\to jA[j,j]=1A[j,j]=1✗ 자기 지명 없음
i=ji=jikii\to k\to iA[i,k]=A[k,i]=1A[i,k]=A[k,i]=1 (상호 지명)○ 가능 — 대각선 4개가 그것

정확한 진술. iji\neq j라면 2걸음 걷기는 항상 경로다. 자기 지명이 없다는 약속 A[i,i]=0A[i,i]=0k=ik=ik=jk=j를 동시에 막기 때문이다. 따라서 2걸음 경로 행렬은 A2A^2에서 대각선만 0으로 지운 것과 같다: P2=A2diag(A2)P_2 = A^2 - \operatorname{diag}(A^2) — 8개.

자기 지명 금지가 정말 방패였는지 확인해 보자. M3이 자기 자신을 지명했다고 가정하고 A[3,3]=1A[3,3]=1 한 칸만 바꿔 본다:

A=M1M2M3M4M5M101101M200100M310110M400000M510000(A2)[1,3]=1원래    2 A' = \begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & 1 & 0 & 1\\ M_2 & 0 & 0 & 1 & 0 & 0\\ M_3 & 1 & 0 & \color{#dc2626}{\mathbf{1}} & 1 & 0\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & 1 & 0 & 0 & 0 & 0 \end{array} \qquad\Longrightarrow\qquad (A'^2)[1,3] = \underbrace{1}_{\text{원래}} \;\to\; \mathbf{2}
2걸음 걷기어디서 왔나판정
M1→M2→M3A[1,2]A[2,3]=11A[1,2]\,A[2,3]=1\cdot1경로
M1→M3→M3A[1,3]A[3,3]=11A[1,3]\,A'[3,3]=1\cdot1경로 아님 (M3 재방문)

i=1j=3i=1\neq j=3인데도 경로가 아닌 걷기가 끼어들었다. 즉 A2A^2가 안전했던 것은 운이 아니라 diag(A)=0\operatorname{diag}(A)=0이라는 구조 덕분이었다.

7-4. 길이 3에서는 무엇이 뚫리는가 (When Length 3 Breaks)

3걸음 걷기 iabji\to a\to b\to j에는 학생이 네 명 등장한다. 재방문이란 이 넷 중 어느 둘이 같다는 뜻이므로, 가능한 짝 (42)=6\binom{4}{2}=6가지를 하나도 빠뜨리지 않고 따져야 한다:

어느 둘이 같은가걷기 모양필요한 조건가능한가
a=ia=iiibji\to i\to b\to jA[i,i]=1A[i,i]=1✗ 자기 지명
a=ba=biaaji\to a\to a\to jA[a,a]=1A[a,a]=1✗ 자기 지명
b=jb=jiajji\to a\to j\to jA[j,j]=1A[j,j]=1✗ 자기 지명
i=ji=jiabii\to a\to b\to i (닫힌 걷기)지금은 iji\neq j로 가정 → §8에서 따로
a=ja=jijbji\to j\to b\to jA[j,b]=A[b,j]=1A[j,b]=A[b,j]=1jjbb가 상호 지명○ 가능
b=ib=iiaiji\to a\to i\to jA[i,a]=A[a,i]=1A[i,a]=A[a,i]=1iiaa가 상호 지명○ 가능

살아남은 두 형태를 우리 예제의 실제 걷기로 확인한다(§6의 19개 목록에서 그대로 가져온 것):

형태실제 걷기끼어든 상호 지명A2A^2 어디를 거쳤나
b=ib=iM1→M5→M1→M3M1↔M5(A2)[1,1](A^2)[1,1] 대각선
a=ja=jM2→M3→M1→M3M3↔M1(A2)[2,1](A^2)[2,1] 비대각선
둘 다M1→M3→M1→M3M1↔M3(A2)[1,1](A^2)[1,1] 대각선

두 형태는 겹칠 수 있다. M1→M3→M1→M3a=3=ja=3=j이면서 동시에 b=1=ib=1=i다. 뒤에서 셀 때 이 겹침을 한 번 빼 주어야 한다. 또 a=ja=j형은 (A2)(A^2)대각선이 아닌 칸을 통해서도 들어오므로 "헛걸음은 대각선에서만 온다"고 일반화하면 안 된다 — §7-1의 [1,3][1,3]은 그렇게 보였을 뿐이다.

결론. iji\neq j일 때 3걸음 걷기가 경로가 아니게 되는 것은 오직 상호 지명이 끼어들 때다. 그리고 i=ji=j(대각선)일 때는 위 표에서 a=i,  a=b,  b=ja=i,\;a=b,\;b=j가 모두 막히므로 세 학생이 서로 다를 수밖에 없다 → 3걸음 닫힌 걷기는 항상 진짜 삼각 순환이다(§4에서 본 그대로).

7-5. 헛걸음을 행렬만으로 세는 공식 (Counting Bad Walks with Matrices Alone)

§7-4의 두 형태를 그대로 개수로 옮기면 된다. iji\neq j일 때:

형태몇 개인가이유
b=ib=i: iaiji\to a\to i\to jmiA[i,j]m_i \cdot A[i,j]aaii의 상호 지명 상대 아무나(mim_i가지), 마지막 걸음 iji\to j가 있어야 함
a=ja=j: ijbji\to j\to b\to jA[i,j]mjA[i,j] \cdot m_j첫 걸음 iji\to j가 있어야 하고, bbjj의 상호 지명 상대 아무나(mjm_j가지)
겹침: ijiji\to j\to i\to jA[i,j]A[j,i]A[i,j]\,A[j,i]iijj가 서로 상호 지명일 때만 1개, 위에서 두 번 세였으므로 빼 준다
헛걸음(i,j)  =  A[i,j](mi+mjA[j,i]),mi=(A2)[i,i] \text{헛걸음}(i,j) \;=\; A[i,j]\,\bigl(\,m_i + m_j - A[j,i]\,\bigr), \qquad m_i = (A^2)[i,i]

여기서 m=(2,0,1,0,1)m=(2,0,1,0,1)이다(§7-2). 이제 §6에서 분류했던 칸들을 이 공식으로 다시 세어 본다. 손으로 하나씩 걷기를 복원하지 않아도 행렬 세 개(AA, diag(A2)\operatorname{diag}(A^2), A3A^3)만으로 답이 나온다:

iji\to jA[i,j]A[i,j]mim_imjm_jA[j,i]A[j,i]헛걸음(A3)[i,j](A^3)[i,j]진짜 경로
M1→M21200220
M1→M31211220
M1→M40200011
M1→M51211220
M2→M31010110
M2→M50010011
M3→M11121220
M5→M11121220
M5→M40100011
M3→M4연습문제 2 — 공식으로 먼저 예측하고, 걷기를 복원해 맞춰 볼 것
M5→M3연습문제 1 — 같은 방식으로
위 9칸 합계11143

읽는 법. A[i,j]=0A[i,j]=0인 줄(M1→M4, M2→M5, M5→M4)은 헛걸음이 0이다 — 두 형태 모두 "ii에서 jj로 가는 직접 지명"을 요구하는데 그것이 없기 때문이다. 반대로 A[i,j]=1A[i,j]=1인 줄은 헛걸음 수가 (A3)[i,j](A^3)[i,j]정확히 같아서 진짜 경로가 0개다. §6에서 손으로 확인했던 "직접 친구 사이일수록 3걸음 걷기가 다 헛것"이라는 관찰이 공식 한 줄로 설명된다.

교실 데이터에서 특히 중요한 이유. "같이 놀고 싶은 친구" 설문은 상호 지명이 아주 많다(서로 친한 게 정상이므로). 즉 mim_i가 크다. 공식 A[i,j](mi+mjA[j,i])A[i,j](m_i+m_j-A[j,i])에서 보듯 헛걸음은 mim_i비례해서 늘어난다. 그래서 학급 친구관계 행렬에서 A3A^3을 "친구의 친구의 친구 수"로 읽으면 실제보다 크게 부풀려진 값을 보게 된다. 우리 예제만 해도 연습문제로 남긴 두 칸을 빼고 세어 17개 중 11개(약 65%)가 헛걸음이었다. 3단계 이상 관계를 정확히 세려면 행렬 거듭제곱이 아니라 경로 탐색 알고리즘(§9의 all_simple_paths())을 써야 한다.

8. 삼각 순환 세기 — tr(A3)/3\operatorname{tr}(A^3)/3 (Counting 3-Cycles)

A3A^3의 대각선만 뽑으면:

diag(A3)=(1,  1,  1,  0,  0)tr(A3)=i(A3)[i,i]=1+1+1+0+0=3 \operatorname{diag}(A^3) = (\,1,\;1,\;1,\;0,\;0\,) \qquad \operatorname{tr}(A^3) = \sum_i (A^3)[i,i] = 1+1+1+0+0 = 3

값이 1인 학생은 M1, M2, M3 — 그리고 삼각 순환에 참여하는 학생이 정확히 이 셋이다. M4, M5는 0이니 어떤 삼각 순환에도 들어 있지 않다. 그런데 삼각 순환은 1개인데 합은 3이다. 같은 고리가 세 번 세어졌기 때문이다:

어느 대각선에서세어진 걷기실체
(A3)[1,1](A^3)[1,1]M1→M2→M3→M1 같은 삼각형
출발점만 다름
(A3)[2,2](A^3)[2,2]M2→M3→M1→M2
(A3)[3,3](A^3)[3,3]M3→M1→M2→M3
방향 삼각 순환의 수  =  tr(A3)3  =  33  =  1 \text{방향 삼각 순환의 수} \;=\; \frac{\operatorname{tr}(A^3)}{3} \;=\; \frac{3}{3} \;=\; \mathbf{1}\text{개}

3으로 나누는 이유: 삼각형에는 출발점이 될 수 있는 학생이 3명이므로 같은 고리가 세 번 세어진다. 단원 1-2 §8에서 상호 지명 쌍을 tr(A2)/2\operatorname{tr}(A^2)/2로 셌던 것과 같은 논리이고, 나누는 수만 2에서 3으로 바뀐다.

무방향이면 6으로 나눈다 (Undirected: Divide by 6)

지명 방향을 무시하고 "둘 중 한 명이라도 지명했으면 친구"로 보면 대칭 행렬 SS(S[i,j]=S[j,i]S[i,j]=S[j,i])가 된다:

S=M1M2M3M4M5M101101M210100M311010M400100M510000tr(S3)=666=1 S=\begin{array}{c|ccccc} & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & 1 & 0 & 1\\ M_2 & 1 & 0 & 1 & 0 & 0\\ M_3 & 1 & 1 & 0 & 1 & 0\\ M_4 & 0 & 0 & 1 & 0 & 0\\ M_5 & 1 & 0 & 0 & 0 & 0 \end{array} \qquad \operatorname{tr}(S^3) = 6 \qquad \frac{6}{6} = \mathbf{1}\text{개}

이번엔 6으로 나눈다. 무방향 삼각형 하나는 출발점 3가지 × 도는 방향 2가지 = 6번 세어지기 때문이다(M1→M2→M3→M1과 M1→M3→M2→M1이 같은 삼각형). 삼각형은 {M1,M2,M3}\{M_1,M_2,M_3\} 하나다.

주의. igraph의 count_triangles()·triangles()방향을 무시하고 센다. 방향 삼각 순환(일방 지명이 도는 고리)을 세고 싶으면 tr(A3)/3\operatorname{tr}(A^3)/3을 직접 계산하거나 삼자관계 조사(triad census)를 써야 한다. 두 질문은 다른 질문이다 — "세 명이 서로 아는가"(무방향 삼각형)와 "지명이 한 방향으로 도는가"(방향 순환).

9. R 검증 (Verification in R)

A <- matrix(c(0,1,1,0,1,
              0,0,1,0,0,
              1,0,0,1,0,
              0,0,0,0,0,
              1,0,0,0,0), 5, 5, byrow = TRUE)
dimnames(A) <- list(paste0("M",1:5), paste0("M",1:5))

A2 <- A %*% A
A3 <- A2 %*% A
A3
#    M1 M2 M3 M4 M5
#  M1  1  2  2  1  2
#  M2  0  1  1  0  1
#  M3  2  0  1  1  0
#  M4  0  0  0  0  0
#  M5  2  0  1  1  0

sum(A3)                    # 19  ← 3걸음 걷기 총 개수
sum(A2[3,] * A[,3])        # 1   ← §4
sum(A2[1,] * A[,3])        # 2   ← §5
A2[1,] * A[,3]             # 2 0 0 0 0  (k=1 항이 2를 만든다)

M <- A * t(A)              # 상호 지명 행렬 (아다마르 곱) ← §7-2
rowSums(M)                 # 2 0 1 0 1  ← m_i
diag(A2)                   # 2 0 1 0 1  ← 정확히 같다
all(rowSums(M) == diag(A2))            # TRUE

m <- diag(A2)                          # ← §7-5 헛걸음 공식
bad <- A * (outer(m, m, "+") - t(A)); diag(bad) <- 0
bad
#    M1 M2 M3 M4 M5
#  M1  0  2  2  0  2
#  M2  0  0  1  0  0
#  M3  2  0  0  1  0
#  M4  0  0  0  0  0
#  M5  2  0  0  0  0

A3 - bad                   # 대각선 밖 = 3걸음 '진짜 경로' 수 (대각선은 삼각 순환 그대로)
#    M1 M2 M3 M4 M5
#  M1  1  0  0  1  0
#  M2  0  1  0  0  1
#  M3  0  0  1  0  0
#  M4  0  0  0  0  0
#  M5  0  0  1  1  0   ← 연습문제를 푼 뒤 [3,4]와 [5,3] 칸을 맞춰 볼 것

diag(A3)                   # 1 1 1 0 0
sum(diag(A3)) / 3          # 1   ← 방향 삼각 순환 1개

S <- pmax(A, t(A))                     # 대칭화(방향 무시)
sum(diag(S %*% S %*% S)) / 6           # 1   ← 무방향 삼각형 1개

여기까지는 걷기의 개수일 뿐이다. 진짜 경로를 보려면 igraph의 경로 탐색을 쓴다. (A3)[1,3]=2(A^3)[1,3]=2가 경로가 아니라는 §5의 주장이 이것으로 확인된다:

library(igraph)
g <- graph_from_adjacency_matrix(A, mode = "directed")

all_simple_paths(g, from = "M1", to = "M3")
# M1→M2→M3   (2걸음)
# M1→M3      (1걸음)
# ← 3걸음 단순경로는 하나도 없다. A3[1,3]=2 는 전부 재방문 걷기였다.

all_simple_paths(g, from = "M5", to = "M3")
# M5→M1→M2→M3  (3걸음)  ← 연습문제 1의 답과 비교해 볼 것
# M5→M1→M3     (2걸음)

triangles(g)               # M1 M3 M2  ← 방향 무시한 삼각형
count_triangles(g)         # 1 1 1 0 0 ← 학생별 참여 삼각형 수

all_simple_paths()는 이름 그대로 단순경로(simple path), 즉 재방문 없는 경로만 찾는다. 행렬 거듭제곱과 결과가 다른 이유가 여기에 있다.

10. 교실 해석 (Classroom Interpretation)

① "친구의 친구의 친구"를 A3A^3으로 세면 안 된다. 학급 친구관계에는 상호 지명이 많고, 상호 지명이 하나라도 끼면 A3A^3은 "내 친구 → 나 → 내 친구" 같은 헛걸음을 함께 센다. 우리 예제에서도 65%가 헛걸음이었다. 3단계 관계를 보고할 일이 있으면 all_simple_paths()로 세야 한다.

② 방향 삼각 순환의 의미 — 돌아오는 소문. M1→M2, M2→M3, M3→M1은 세 지명이 모두 일방(짝사랑)인데 고리가 닫힌다. 상호 지명이 하나도 없어도 정보는 순환한다. M1이 M2에게 흘린 말이 M2→M3→M1을 돌아 자기에게 돌아온다 — "누가 퍼뜨렸는지 모르겠는데 결국 내 귀에 들어온 말"의 구조다. 상호 지명만 세는 diag(A2)\operatorname{diag}(A^2)로는 이 고리가 보이지 않는다.

③ 무방향 삼각형의 의미 — 안정된 3인 무리. 세 명이 서로 다 아는 삼각형은 관계가 닫혀 있어 잘 깨지지 않는다. 둘만의 관계는 한쪽이 멀어지면 끝나지만, 삼각형에서는 나머지 한 명이 둘을 다시 잇는다. 모둠 편성에서 삼각형을 통째로 한 조에 넣으면 안정적이지만 새 관계는 잘 생기지 않고, 쪼개 놓으면 각 조에 이미 아는 사람이 한 명씩 생긴다. 이 판단의 근거가 삼각형 목록이다. (친구의 친구가 친구가 되는 경향 = 전이성(transitivity)은 3단계에서 다룬다.)

④ M4를 어떻게 읽을 것인가. A3A^3의 M4 은 전부 0이고 M4 (1,0,1,0,1)(1,0,1,0,1)이다. M4는 지명을 받기만 하고 아무도 지명하지 않은 학생이다. "아무도 지명받지 못한 고립 학생"과는 다른 상황이다 — 설문에 성실히 답하지 않았거나, 관계를 밝히기를 꺼렸거나, 실제로 특정 친구를 고르지 못했을 수 있다. 숫자만으로 결론 내릴 수 없고 담임이 확인해야 하는 지점이다. 어느 쪽이든 M4는 어떤 정보 확산의 출발점도 될 수 없다는 것이 행이 0이라는 뜻이다.

⑤ 그래도 A3A^3이 쓸모없는 것은 아니다. 대각선(diag(A3)\operatorname{diag}(A^3))은 언제나 정확하다 — 삼각 순환은 걷기와 경로가 일치하기 때문이다. "우리 반에 결속된 3인 고리가 몇 개인가"는 tr(A3)/3\operatorname{tr}(A^3)/3 한 줄로 답할 수 있다.

11. 연습문제 (Exercises)

문제 1. (A3)[5,3](A^3)[5,3]을 §4·§5처럼 다섯 항 전부 전개하시오 ((A2)[5,]=(0,1,1,0,1)(A^2)[5,\,]=(0,1,1,0,1), A[,3]=(1,1,0,0,0)A[\,,3]=(1,1,0,0,0)). 살아남은 항의 걷기를 M5→?→?→M3 형태로 복원하고, 그것이 진짜 경로인지 재방문 걷기인지 판정할 것.
R 확인: sum(A2[5,] * A[,3])

문제 2. (A3)[3,4](A^3)[3,4]를 같은 방식으로 전개하시오 ((A2)[3,]=(0,1,1,0,1)(A^2)[3,\,]=(0,1,1,0,1), A[,4]=(0,0,1,0,0)A[\,,4]=(0,0,1,0,0)). 걷기를 복원해 경로인지 판정하고, 경로가 아니라면 어느 상호 지명 때문인지 §7-4의 표에서 어느 형태(a=ja=j인가 b=ib=i인가)에 해당하는지까지 밝힐 것.

두 문제의 (A2)(A^2) 행이 같은데도 결과가 갈린다는 점에 주의. 먼저 스스로 풀고 §12 해설과 맞춰 볼 것.

12. 연습문제 해설과 답 (Solutions)

12-1. 문제 1 — (A3)[5,3](A^3)[5,3] (A Genuine 3-Step Path)

무엇을 곱하는가. 왼쪽 A2A^2M5 행, 오른쪽 AAM3 열:

A2M1M2M3M4M5M120110M210010M301101M400000M501101  ×  AM1M2M3M4M5M101101M200100M310010M400000M510000 \begin{array}{c|ccccc} A^2 & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 2 & 0 & 1 & 1 & 0\\ M_2 & 1 & 0 & 0 & 1 & 0\\ M_3 & 0 & 1 & 1 & 0 & 1\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & \color{#2563eb}{0} & \color{#2563eb}{1} & \color{#2563eb}{1} & \color{#2563eb}{0} & \color{#2563eb}{1} \end{array} \;\times\; \begin{array}{c|ccccc} A & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & \color{#d97706}{1} & 0 & 1\\ M_2 & 0 & 0 & \color{#d97706}{1} & 0 & 0\\ M_3 & 1 & 0 & \color{#d97706}{0} & 1 & 0\\ M_4 & 0 & 0 & \color{#d97706}{0} & 0 & 0\\ M_5 & 1 & 0 & \color{#d97706}{0} & 0 & 0 \end{array}
kk(A2)[5,k](A^2)[5,k]
M5→…→kk 2걸음
A[k,3]A[k,3]
kk→M3 1걸음
왜 그 값인가
1010M1→M3은 있지만, 2걸음으로 M1에 갈 수 없다(M5→M1은 1걸음)
21112걸음 M5→M1→M2 + 1걸음 M2→M3 → 연결됨
31002걸음으로 M3까지는 간다(M5→M1→M3) 그러나 M3→M3이 없다
40002걸음으로 M4에 못 가고, M4→M3도 없다
51002걸음으로 제자리 M5에 돌아오지만(M5→M1→M5) M5→M3이 없다
1
(A3)[5,3]=01+11+10+00+10=1 (A^3)[5,3] = \textcolor{#2563eb}{0}\cdot\textcolor{#d97706}{1} + \textcolor{#2563eb}{1}\cdot\textcolor{#d97706}{1} + \textcolor{#2563eb}{1}\cdot\textcolor{#d97706}{0} + \textcolor{#2563eb}{0}\cdot\textcolor{#d97706}{0} + \textcolor{#2563eb}{1}\cdot\textcolor{#d97706}{0} = \mathbf{1}

걷기 복원. 살아남은 항 k=2k=2: (A2)[5,2]=1(A^2)[5,2]=1은 단원 1-2 §7에서 M5→M1→M2였고, 마지막 걸음 A[2,3]=1A[2,3]=1M2→M3이다.

M5M1M2(A2)[5,2]=1    M3A[2,3]=1 \underbrace{M_5 \to M_1 \to M_2}_{(A^2)[5,2]=1} \;\to\; \underbrace{M_3}_{A[2,3]=1}

답: (A3)[5,3]=1(A^3)[5,3]=1, 걷기는 M5→M1→M2→M3 하나.

판정: 진짜 경로다. M5, M1, M2, M3 네 학생이 모두 다르고 재방문이 없다. §9의 all_simple_paths(g, from="M5", to="M3")가 이 경로를 그대로 찾아낸 것과 일치한다.

왜 §5와 갈렸는가. (A3)[1,3](A^3)[1,3]에서 함정을 만든 것은 k=1k=1 항, 즉 "제자리로 돌아오는 2걸음"이 목적지 M3의 지명자와 겹친 것이었다. 여기서는 제자리로 돌아오는 항(k=5k=5, M5→M1→M5)이 있긴 하지만 M5→M3 지명이 없어서 A[5,3]=0A[5,3]=0에 막혀 죽는다. 살아남은 길은 새 사람만 밟는 k=2k=2 뿐이었다.

교실 해석. M5는 M3을 직접 지명하지 않았고(A[5,3]=0A[5,3]=0), 2걸음으로도 이어지고(M5→M1→M3, 단원 1-2 연습문제 1), 3걸음 경로로도 이어진다(M5→M1→M2→M3). M5에서 M3으로 가는 서로 다른 두 개의 실제 통로가 있다는 뜻이다. 둘 다 M1을 거친다는 점이 중요하다 — M1이 빠지면 두 통로가 동시에 끊긴다.

12-2. 문제 2 — (A3)[3,4](A^3)[3,4] (A Walk That Is Not a Path)

왼쪽 A2A^2M3 행, 오른쪽 AAM4 열:

A2M1M2M3M4M5M120110M210010M301101M400000M501101  ×  AM1M2M3M4M5M101101M200100M310010M400000M510000 \begin{array}{c|ccccc} A^2 & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 2 & 0 & 1 & 1 & 0\\ M_2 & 1 & 0 & 0 & 1 & 0\\ M_3 & \color{#2563eb}{0} & \color{#2563eb}{1} & \color{#2563eb}{1} & \color{#2563eb}{0} & \color{#2563eb}{1}\\ M_4 & 0 & 0 & 0 & 0 & 0\\ M_5 & 0 & 1 & 1 & 0 & 1 \end{array} \;\times\; \begin{array}{c|ccccc} A & M_1 & M_2 & M_3 & M_4 & M_5\\ \hline M_1 & 0 & 1 & 1 & \color{#d97706}{0} & 1\\ M_2 & 0 & 0 & 1 & \color{#d97706}{0} & 0\\ M_3 & 1 & 0 & 0 & \color{#d97706}{1} & 0\\ M_4 & 0 & 0 & 0 & \color{#d97706}{0} & 0\\ M_5 & 1 & 0 & 0 & \color{#d97706}{0} & 0 \end{array}

A[,4]A[\,,4]에 1이 단 하나(M3)뿐이라는 점을 먼저 눈여겨보자. M4를 지명한 사람이 M3 한 명이므로, M4로 가는 마지막 걸음은 반드시 M3→M4다.

kk(A2)[3,k](A^2)[3,k]
M3→…→kk 2걸음
A[k,4]A[k,4]
kk→M4 1걸음
왜 그 값인가
10002걸음으로 M1에 못 가고, M1→M4 지명도 없다
21002걸음으로 M2에 가지만(M3→M1→M2) M2→M4가 없다
31112걸음 M3→M1→M3 + 1걸음 M3→M4 → 연결됨
40002걸음으로 M4에 못 가고, M4→M4 자기 지명도 없다
51002걸음으로 M5에 가지만(M3→M1→M5) M5→M4가 없다
1
(A3)[3,4]=00+10+11+00+10=1 (A^3)[3,4] = \textcolor{#2563eb}{0}\cdot\textcolor{#d97706}{0} + \textcolor{#2563eb}{1}\cdot\textcolor{#d97706}{0} + \textcolor{#2563eb}{1}\cdot\textcolor{#d97706}{1} + \textcolor{#2563eb}{0}\cdot\textcolor{#d97706}{0} + \textcolor{#2563eb}{1}\cdot\textcolor{#d97706}{0} = \mathbf{1}

걷기 복원. 살아남은 항이 k=3k=3이라는 것이 이미 경고 신호다 — 출발점도 M3, 2걸음 뒤 도착지도 M3이다. (A2)[3,3]=1(A^2)[3,3]=1은 단원 1-2 §8에서 "M3이 맺은 상호 지명 1건", 즉 M3→M1→M3이었다:

M3M1M3(A2)[3,3]=1    M4A[3,4]=1 \underbrace{M_3 \to M_1 \to M_3}_{(A^2)[3,3]=1} \;\to\; \underbrace{M_4}_{A[3,4]=1}

답: (A3)[3,4]=1(A^3)[3,4]=1, 걷기는 M3→M1→M3→M4 하나.

판정: 경로가 아니다. M3을 두 번 지난다. M3에서 서로 다른 두 사람을 거쳐 M4에 닿는 3걸음 경로는 0개다 — M4의 유일한 지명자가 M3 자신이므로, M4에 들어가려면 반드시 M3으로 돌아와야 하고 그 순간 재방문이 확정된다.

어느 상호 지명 때문인가: M1↔M3. §7-4 표의 형태로는 b=ib=i 유형이다 — i=M3i=M3, a=M1a=M1, b=M3=ib=M3=iiaiji\to a\to i\to j 모양이고, 성립 조건이 바로 "iiaa가 상호 지명"이었다.

두 문제를 나란히 놓으면. (A2)(A^2)에서 꺼낸 행은 두 문제가 완전히 같았다 ((A2)[5,](A^2)[5,\,](A2)[3,](A^2)[3,\,]이 모두 (0,1,1,0,1)(0,1,1,0,1)). 결과가 갈린 것은 오른쪽 열이 어느 항을 살렸는가 때문이다:

문제살아남은 kk그 항의 2걸음 조각재방문판정
1: (A3)[5,3](A^3)[5,3]k=2k=2M5→M1→M2 — 새 사람만없음경로
2: (A3)[3,4](A^3)[3,4]k=3k=3M3→M1→M3제자리로 복귀M3 두 번걷기만

손으로 판정하는 요령. 살아남은 항의 kk출발점 ii와 같거나, 도착점 jj와 같으면 그 항은 재방문 걷기다. k=ik=i면 "제자리로 돌아왔다 다시 출발", k=jk=j면 "목적지를 밟았다 나갔다 다시 들어옴"이다. 문제 2는 k=3=ik=3=i였고, §5의 함정은 k=1=ik=1=i였다. 전개 표에서 kk 열만 봐도 의심할 수 있다.

sum(A2[5,] * A[,3])     # 1  ← 문제 1
A2[5,] * A[,3]          # 0 1 0 0 0  (k=2 항만 살아남음)

sum(A2[3,] * A[,4])     # 1  ← 문제 2
A2[3,] * A[,4]          # 0 0 1 0 0  (k=3 항 = 출발점과 같다 → 재방문 신호)

# 경로만 세어 교차 검증
length(all_simple_paths(g, from="M5", to="M3"))   # 2개 (2걸음·3걸음)
length(all_simple_paths(g, from="M3", to="M4"))   # 1개 (M3→M4, 1걸음뿐)

이제 §6 표의 빈칸이 채워졌다. 3걸음 걷기 19개 중 진짜 경로는 4개([1,4][1,4], [2,5][2,5], [5,3][5,3], [5,4][5,4]), 삼각 순환 3개(같은 삼각형 1개를 세 번 센 것), 나머지 12개가 재방문 걷기다.

다음 단원 — 1-4: 연결정도(degree) — 행합·열합 공식과 평균 연결정도. 행렬을 곱하는 대신 더하는 지표로 넘어간다. AkA^k에서 잠깐 봤던 "M4의 행이 전부 0"이 연결정도 언어로는 외향 연결정도 0이라는 한 마디가 된다. · 이 문서: notes/03_단원1-3_A3_걷기vs경로_삼각순환.html