단원 1-6Geodesic Distance from Matrix Powers
측지거리 — 거듭제곱에서 최단거리 읽어내기
- 오늘의 질문 (Today's Question)
- 측지거리의 정의 (Definition of Geodesic Distance)
- 왜 "처음 등장하는 "는 정확한가 (Why the First Hit Is Exact)
- 손 계산 ① (Reading One Cell)
- 손 계산 ② 거리행렬 전체 채우기 (Filling the Whole Matrix)
- 거리는 대칭이 아니다 (Distance Is Not Symmetric)
- 지름과 평균거리 (Diameter & Mean Distance)
- R 검증 (Verification in R)
- 교실 해석 (Classroom Interpretation)
- 연습문제 (Exercises)
- 연습문제 해설과 답 (Solutions)
1. 오늘의 질문 (Today's Question)
단원 1-3에서 의 값은 걷기의 개수일 뿐 경로가 아니라는 것을 배웠다. 값 자체는 부풀려져 있다. 그런데 이렇게 물으면 얘기가 달라진다:
답: 를 차례로 보며 칸에 0이 아닌 값이 처음 나타나는 를 찾으면 된다. 개수는 부정확하지만 "처음 등장하는 시점"은 정확하다. 왜 그런지가 오늘의 핵심이다.
단원 1-3에서 이미 구해 둔 세 행렬을 그대로 쓴다. 만 새로 필요하다:
2. 측지거리의 정의 (Definition of Geodesic Distance)
정의. 에서 까지의 측지거리(geodesic distance) 는 에서 로 가는 가장 짧은 경로의 길이다. 행렬로는:
그런 가 하나도 없으면 (도달 불가)로 쓴다. 관례상 이다. "측지"(geodesic)는 지구 위 두 점을 잇는 최단선을 뜻하는 말에서 왔고, 네트워크에서는 최단 경로를 가리킨다.
의 범위는 까지만 보면 된다. 경로는 같은 사람을 두 번 지나지 않으므로 5명 네트워크에서 가장 긴 경로도 학생 5명을 지나는 4걸음이다. 즉 까지 봐서 0이면 그 뒤는 볼 필요 없이 다. 그래서 오늘 까지만 계산했다.
3. 왜 "처음 등장하는 "는 정확한가 (Why the First Hit Is Exact)
단원 1-3의 결론은 "는 걷기를 센다"였다. 걷기는 경로보다 많으니 처럼 실제 경로가 0개인데도 값이 2일 수 있었다. 그런데도 최단거리를 읽는 데는 문제가 없다. 근거는 다음 한 줄이다:
정리. 어떤 걷기가 최단이라면 그것은 반드시 경로다 (같은 사람을 두 번 지나지 않는다).
왜 그런가. 만약 최단 걷기가 같은 학생 를 두 번 지난다고 하자. 그러면 그 걷기는 모양이다. 가운데 에서 로 돌아오는 부분은 잘라내도 여전히 에서 로 가는 걷기다. 잘라낸 쪽이 더 짧으므로, 원래 걷기가 최단이었다는 가정에 모순이다. 따라서 최단 걷기에는 재방문이 없다. ∎
구체적으로 확인해 보자. 단원 1-3에서 본 M1→M3의 재방문 걷기들:
| 걷기 | 길이 | 잘라낼 수 있는 부분 | 남는 것 |
|---|---|---|---|
| M1→M3→M1→M3 | 3 | M1→M3→M1 (M1로 되돌아온 고리) | M1→M3 길이 1 |
| M1→M5→M1→M3 | 3 | M1→M5→M1 | M1→M3 길이 1 |
두 걷기 모두 길이 1로 줄어든다. 그래서 이고, 에서 나온 값 2는 최단거리 판정에 아무 영향을 주지 않는다. 부풀려진 걷기는 항상 더 짧은 진짜 경로의 "늘어난 버전"이므로, 최초 등장 시점을 앞당길 수는 없다. 그래서 의 값은 못 믿어도 0인지 0이 아닌지는 믿을 수 있다.
4. 손 계산 ① (Reading One Cell)
M2에서 M5로 가는 최단거리를 구한다. 네 행렬의 칸을 가 커지는 순서로 확인한다:
| 뜻 | 판정 | ||
|---|---|---|---|
| 1 | 0 | M2가 M5를 직접 지명하지 않았다 | 계속 |
| 2 | 0 | 2걸음으로 M5에 닿는 길이 없다 | 계속 |
| 3 | 1 | 3걸음 걷기가 1개 있다 | 여기서 멈춤 → |
| 4 | 0 | (4걸음 걷기는 없지만 무관) | 볼 필요 없음 |
경로 복원. 에서 값이 1이므로 걷기는 하나뿐이다. 단원 1-3 §6의 전수 목록에서 에 해당하는 걷기는 M2→M3→M1→M5였고, 세 걸음 모두 새 사람을 밟는 경로였다. §3의 정리가 말한 대로다 — 최단 걷기는 경로다.
에서 값이 0으로 돌아간 것에 주의. 이다. "거리가 3인데 4걸음으로는 갈 수 없다"는 게 이상하게 들리지만 정상이다 — 는 정확히 걸음인 걷기만 센다. 3걸음 경로를 4걸음으로 늘리려면 중간에 왕복할 상호 지명이 필요한데, 이 경로(M2→M3→M1→M5) 위에는 M2·M3 사이에 왕복할 상호 지명이 없다. 의 0은 "거리가 보다 멀다"가 아니라 "정확히 걸음짜리 걷기가 없다"는 뜻이다. 그래서 반드시 를 작은 쪽부터 확인해야 한다.
5. 손 계산 ② 거리행렬 전체 채우기 (Filling the Whole Matrix)
같은 절차를 20개 칸(대각선 제외)에 모두 적용한다. 표에는 각 칸에서 처음 1이 나온 를 적는다.
| 칸 | 최단 경로 | |||||
|---|---|---|---|---|---|---|
| 1 | 0 | 2 | 1 | 1 | M1→M2 | |
| 1 | 1 | 2 | 3 | 1 | M1→M3 | |
| 0 | 1 | 1 | 2 | 2 | M1→M3→M4 | |
| 1 | 0 | 2 | 1 | 1 | M1→M5 | |
| 0 | 1 | 0 | 2 | 2 | M2→M3→M1 | |
| 1 | 0 | 1 | 1 | 1 | M2→M3 | |
| 0 | 1 | 0 | 1 | 2 | M2→M3→M4 | |
| 0 | 0 | 1 | 0 | 3 | M2→M3→M1→M5 | |
| 1 | 0 | 2 | 1 | 1 | M3→M1 | |
| 0 | 1 | 0 | 2 | 2 | M3→M1→M2 | |
| 1 | 0 | 1 | 1 | 1 | M3→M4 | |
| 0 | 1 | 0 | 2 | 2 | M3→M1→M5 | |
| 0 | 0 | 0 | 0 | ∞ | 없음 — M4는 나가는 화살표가 없다 | |
| 1 | 0 | 2 | 1 | 1 | M5→M1 | |
| 0 | 1 | 0 | 2 | 2 | M5→M1→M2 | |
| 0 | 1 | 1 | 2 | 2 | M5→M1→M3 | |
| 0 | 0 | 1 | 1 | 3 | M5→M1→M3→M4 |
정리하면 거리행렬 는:
6. 거리는 대칭이 아니다 (Distance Is Not Symmetric)
방향 네트워크에서 와 는 다를 수 있다. 에서 짝을 찾아보면:
| 쌍 | 읽기 | ||
|---|---|---|---|
| M1, M2 | 1 M1→M2 | 2 M2→M3→M1 | M1의 말은 M2에게 바로, M2의 말은 M1에게 두 단계 걸려 |
| M2, M5 | 3 | 2 M5→M1→M2 | 방향에 따라 1단계 차이 |
| M3, M4 | 1 M3→M4 | ∞ | M3의 말은 M4에게 닿지만, M4의 말은 아무에게도 못 닿는다 |
| M1, M3 | 1 | 1 | 상호 지명이므로 양방향 1 (대칭) |
대칭이 되는 조건. 무방향 네트워크(또는 모든 지명이 상호인 경우)에서는 가 항상 성립하고 는 대칭행렬이 된다. 방향 데이터를 다룰 때는 의 위쪽 삼각과 아래쪽 삼각이 다른 정보임을 잊지 말아야 한다. "둘이 얼마나 가까운가"라는 질문 자체가 방향 네트워크에서는 두 개로 갈라진다.
7. 지름과 평균거리 (Diameter & Mean Distance)
거리행렬을 하나의 숫자로 요약하는 두 방법이 있다. 둘 다 를 어떻게 처리하는가가 관건이다.
지름 (Diameter)
에서 를 뺀 가장 큰 값을 찾는다. 3이 두 개 있다 (, ) → 지름 = 3. "도달 가능한 두 학생 사이라도 최대 3단계면 소식이 전해진다"는 뜻이다.
평균 측지거리 (Mean Geodesic Distance)
는 평균에 넣을 수 없으므로 도달 가능한 순서쌍만 평균한다. 에서 대각선(0)과 4칸을 빼면 남는 칸은 개다. 값별로 개수를 세어 더한다:
| 거리 | 해당 칸 | 개수 | 기여 |
|---|---|---|---|
| 1 | [1,2] [1,3] [1,5] [2,3] [3,1] [3,4] [5,1] | 7 | |
| 2 | [1,4] [2,1] [2,4] [3,2] [3,5] [5,2] [5,3] | 7 | |
| 3 | [2,5] [5,4] | 2 | |
| ∞ | [4,1] [4,2] [4,3] [4,5] | 4 | 제외 |
| 합 | 16 | 27 | |
를 뺐다는 사실을 반드시 함께 보고해야 한다.
"평균 1.69단계"만 말하면 네트워크가 촘촘하게 들리지만,
실제로는 순서쌍 20개 중 4개(20%)는 아예 도달 불가다.
도달 불가 비율을 함께 적는 것이 정직한 요약이다. igraph의 mean_distance()도
기본값 unconnected = TRUE에서 도달 불가 쌍을 제외하고 평균한다.
8. R 검증 (Verification in R)
library(igraph)
g <- graph_from_adjacency_matrix(A, mode = "directed")
distances(g, mode = "out")
# M1 M2 M3 M4 M5
# M1 0 1 1 2 1
# M2 2 0 1 2 3
# M3 1 2 0 1 2
# M4 Inf Inf Inf 0 Inf ← M4에서 나갈 수 없다
# M5 1 2 2 3 0
diameter(g) # 3
mean_distance(g) # 1.6875 ← Inf 제외한 16쌍의 평균
# mode 인자 주의: "out"은 나가는 방향(내가 남에게), "in"은 들어오는 방향
distances(g, mode = "in")["M4", ] # M4로 들어오는 거리: 2 2 1 0 3
§2의 정의를 그대로 코드로 옮겨 손 계산과 맞춰 볼 수도 있다:
# A^k에서 처음 0이 아닌 k 찾기 — 정의를 직접 구현
D <- matrix(Inf, 5, 5, dimnames = dimnames(A))
diag(D) <- 0
P <- diag(5)
for (k in 1:4) {
P <- P %*% A # P = A^k
D[D == Inf & P > 0] <- k # 아직 안 채워진 칸만 채운다
}
D # distances(g, mode="out")와 동일
# sna 패키지
library(sna)
geodist(A)$gdist # 위 distances(g,"out")와 동일 (도달 불가는 Inf)
geodist(A)$counts # 최단 경로가 몇 개인지 — 단원 2-3(매개 중심성)의 재료
sna::geodist()의 inf.replace 인자에 주의.
기본값은 inf.replace = Inf이므로 도달 불가가 그대로 로 남는다(위 출력).
그런데 이 인자에 유한한 값을 주면(옛 교재에서 inf.replace = 5처럼 노드 수를 넣는 관행이 있었다)
도달 불가 쌍이 "거리 5"로 바뀌어 평균거리를 왜곡한다 — 무한을 유한한 값으로 낮추므로 과소평가다.
평균을 내기 전에 행렬 안에 어떤 값이 들어 있는지 반드시 확인할 것.
9. 교실 해석 (Classroom Interpretation)
① 측지거리는 "소식이 도는 단계 수"다. 은 M2가 아는 이야기가 M5에게 닿으려면 최소 세 사람의 입을 거쳐야 한다는 뜻이다. 학급 공지·소문 확산 속도를 가늠할 때 쓰는 값이며, 지름 3은 "최악의 경우에도 3단계"라는 상한이다.
② 평균거리보다 도달 불가 쌍이 더 중요하다. 우리 반의 평균거리는 1.69로 짧지만, M4는 아무에게도 말을 전할 수 없는 위치다(의 M4 행이 전부 ). "평균적으로 가깝다"는 요약이 개별 학생의 고립을 가린다. 거리행렬을 볼 때는 평균보다 가 있는 행·열을 먼저 찾아야 한다.
③ 행과 열을 구별해 읽어야 한다. M4의 행은 전부 이지만 열은 로 모두 유한하다. "M4에게 소식을 전하는 것은 가능하지만 M4의 소식은 퍼지지 않는다." 교사가 M4에게 전달하는 것은 잘 되지만 M4의 어려움이 또래를 통해 드러나기는 어려운 구조다 — 담임이 직접 확인해야 하는 이유다.
④ 거리 1과 2는 질이 다르다. 은 직접 친구, 는 "친구의 친구"다. 정보 전달에서 한 단계마다 왜곡·누락이 생기므로 는 의 절반이 아니라 훨씬 약한 연결로 보는 것이 안전하다. 다만 사회학에서는 의 약한 연결이 새로운 정보를 가져오는 통로(약한 연결의 강함)라는 관점도 있다.
⑤ 다음 단계 예고. 오늘 만든 거리행렬 는 그대로 근접 중심성(closeness centrality)의 재료가 된다 — 한 학생의 행을 다 더해 역수를 취하면 "이 학생이 모두에게 얼마나 빨리 닿는가"가 된다. 그런데 가 하나라도 있으면 합이 가 되어 버리는 문제가 생긴다. → 단원 2-2
10. 연습문제 (Exercises)
문제 1. 를 §4처럼 구하시오.
① 의 칸 값을 차례로 적고 ② 처음 0이 아닌 를 판정하고
③ 그 최단 경로를 M5→?→?→M4 형태로 쓰고, 그것이 경로인지(재방문이 없는지) 확인하시오.
문제 2. 의 M4 행은 전부 인데 M4 열은 전부 유한하다. ① 이 비대칭이 의 어떤 특징에서 나오는지 단원 1-4의 용어(외향/내향 연결정도)로 설명하시오. ② 만약 M4가 M3을 지명한다면( 추가) M4 행의 4개는 각각 어떤 값이 되는가? 의 M3 행을 이용해 하나하나 계산하시오. (힌트: M4에서 출발하는 모든 길은 이제 반드시 M3을 먼저 거친다.)
먼저 스스로 풀고 §11 해설과 맞춰 볼 것.
11. 연습문제 해설과 답 (Solutions)
11-1. 문제 1 — (One More Cell)
① 세 행렬의 칸. §1의 행렬들에서 5행 4열만 뽑아 온다:
| 뜻 | 판정 | ||
|---|---|---|---|
| 1 | 0 | M5는 M4를 직접 지명하지 않았다 (M5의 지명은 M1 하나뿐) | 계속 |
| 2 | 0 | 2걸음으로 M4에 못 닿는다 — M5→M1까지 간 뒤 M1→M4 지명이 없다 | 계속 |
| 3 | 1 | 3걸음 걷기 1개 |
② 판정. 처음 0이 아닌 값이 에서 나왔으므로
③ 경로 복원. M4를 지명한 사람은 M3 한 명뿐이므로 마지막 걸음은 반드시 M3→M4다. 그렇다면 앞의 2걸음은 M5에서 M3까지 가는 길이어야 하고, 이 그것이다 — M5→M1→M3(단원 1-2 연습문제 1). 이어 붙이면:
답 , 최단 경로는 M5→M1→M3→M4 하나.
경로인가: M5, M1, M3, M4 네 학생이 모두 다르므로 재방문 없는 경로다 ✓. §3의 정리가 보장한 대로다 — 최단이면 경로다. (M5에서 M4로 가는 경로는 하나 더 있다 — M5→M1→M2→M3→M4, 길이 4. 경로가 여러 개일 때 가장 짧은 것만 측지거리가 된다는 점을 확인해 둘 것.)
참고로 이 값 3은 §7에서 본 이 네트워크의 지름이기도 하다 (과 함께 가장 먼 쌍).
11-2. 문제 2 — 비대칭의 원인과 회복 (Why M4's Row Is All Infinite)
① 원인. 단원 1-4에서 구한 값을 그대로 쓴다:
| M4의 값 | 수치 | 거리행렬에서의 결과 |
|---|---|---|
| 0 | 나가는 화살표가 없다 → 어떤 에서도 → 행이 전부 | |
| 1 | M3이 지명했다 → M3에 닿을 수 있는 학생은 모두 M4에도 닿는다 → 열이 유한 |
답 ① 외향 연결정도가 0이기 때문이다. 행합이 0이면 의 그 행도 영원히 0이므로 (단원 1-4 §3의 경고) M4에서 출발하는 걷기가 아예 없다. 반대로 내향 연결정도가 1이라 들어오는 통로는 살아 있다. 이런 정점을 그래프 이론에서 싱크(sink, 흡수점)라 부른다 — 들어오기만 하고 나가지 않는다.
② 을 추가하면. 힌트대로, M4에서 나가는 유일한 지명이 M3이므로 M4에서 어디로 가든 첫 걸음은 M3이고 그 뒤는 M3에서 가는 길과 똑같다. 따라서 각 목적지 에 대해
의 M3 행 를 가져와 하나씩 더한다:
| 목적지 | 실제 경로 | ||
|---|---|---|---|
| M1 | 1 | 2 | M4→M3→M1 |
| M2 | 2 | 3 | M4→M3→M1→M2 |
| M3 | 0 | 1 | M4→M3 (첫 걸음이 곧 도착) |
| M5 | 2 | 3 | M4→M3→M1→M5 |
답 ② M4 행의 네 개가 각각 , , , 으로 바뀐다. 즉 새 M4 행은 이다.
부수 효과: 도달 불가 쌍이 4개에서 0개로 사라지므로 이제 모든 순서쌍이 연결된다 (강하게 연결된 네트워크 — 단원 1-7). 지름은 3으로 그대로이고, 평균거리는 20쌍 전체를 평균해 로 커진다. 멀지만 연결된 쌍이 새로 생기면 평균거리가 올라갈 수 있다는 점을 확인해 둘 것 — 연결이 늘었으니 평균거리가 줄 것이라고 착각하기 쉽다.
# 문제 1
A2 <- A %*% A; A3 <- A2 %*% A
c(A[5,4], A2[5,4], A3[5,4]) # 0 0 1 → d = 3
all_simple_paths(g, from="M5", to="M4")
# [[1]] M5 M1 M2 M3 M4 ← 길이 4
# [[2]] M5 M1 M3 M4 ← 길이 3 = 최단 경로
# 문제 2
Ax <- A; Ax[4,3] <- 1
gx <- graph_from_adjacency_matrix(Ax, mode="directed")
distances(gx, mode="out")["M4", ] # M1 M2 M3 M4 M5 → 2 3 1 0 3 ✓
mean_distance(gx) # 1.8 ← 1.6875에서 늘어났다
diameter(gx) # 3 ← 그대로
is_connected(gx, mode = "strong") # TRUE ← 모든 쌍이 서로 도달 가능
다음 단원 — 1-7: 도달가능성 행렬과 강한/약한 컴포넌트.
오늘 로 표시한 칸들을 0/1로만 요약하면 도달가능성 행렬이 되고,
거기서 "서로 오갈 수 있는 학생 집단"이 드러난다.
· 이 문서: notes/06_단원1-6_측지거리_Ak에서_최단거리.html