단원 3-4Community Detection Algorithms
커뮤니티 탐지 알고리즘
- 지난 시간 연습문제 확인 (Checking Last Session)
- 오늘의 질문: 4140개는 세어 봤지만 (Why We Need Algorithms)
- 두 가지 방향 — 자를 것인가, 붙일 것인가 (Divisive vs Agglomerative)
- 간선 매개 중심성 — 손 계산 (Edge Betweenness by Hand)
- Girvan–Newman: 위에서 자르며 내려가기 (The Girvan–Newman Algorithm)
- 병합 이득 공식 (The Merge-Gain Formula)
- fast greedy: 아래에서 붙이며 올라가기 (Fast Greedy / CNM)
- 두 길이 지나간 자리 (The Two Trajectories)
- Louvain ① 국소 이동 (Louvain: Local Moving)
- Louvain ② 집계 (Louvain: Aggregation)
- Louvain은 왜 돌릴 때마다 다른가 (Why Louvain Is Unstable)
- walktrap: 걸어서 재는 거리 (Walktrap: Random-Walk Distance)
- R로 검증 (Verification in R)
- 가라테: 정답이 있는 시험 (Karate: A Test with a Known Answer)
- 가 높다고 진실에 가까운 것은 아니다 (Higher Q Is Not Closer to the Truth)
- 해상도 한계 (The Resolution Limit)
- 어떤 알고리즘을 쓸 것인가 (Choosing an Algorithm)
- 연습문제 (Exercises)
- 해설과 답 (Solutions)
1. 지난 시간 연습문제 확인 (Checking Last Session's Exercises)
단원 3-3에서 낸 두 문제의 답을 먼저 맞춰 보자.
문제 1 — 3분할에서도 두 항이 같을까? (Last Session's Exercise 1 — Does It Hold for Three Groups?)
분할 에 대해:
| 모둠 | 항의 값 | ||||
|---|---|---|---|---|---|
| 3 | 11 | 144/576 | 121/576 | 23/576 | |
| 1 | 6 | 48/576 | 36/576 | 12/576 | |
| 3 | 7 | 144/576 | 49/576 | 95/576 | |
| 합계 | 130/576 = 0.2257 | ||||
세 항이 23, 12, 95로 전부 다르다. 모둠이 둘일 때는 이 성립해서 두 항이 언제나 같아졌지만, 셋이 되면 이므로 그 증명이 무너진다. 오늘 §10에서 이 가 Louvain 알고리즘이 실제로 도중에 만들어 내는 분할이라는 것을 보게 된다.
문제 2 — 아령 그래프에서 다리를 끊으면 (Last Session's Exercise 2 — Cutting the Bridge of a Barbell)
아령 그래프 (삼각형 A와 B를 A1–B1 하나로 이은 6명 7간선):
| 상황 | ||||
|---|---|---|---|---|
| 다리가 있을 때 A|B로 나눔 | 7 | 3, 3 | 7, 7 | |
| 다리 A1–B1을 끊고 A|B | 6 | 3, 3 | 6, 6 |
손실 은 전부 항에서 나왔다 ( 항은 다리가 있든 없든 로 똑같다). 다리를 놓은 A1이 에게는 벌점이었다는 뜻이다.
2. 오늘의 질문: 4140개는 세어 봤지만 (Why We Need Algorithms)
단원 3-3에서 우리는 8명짜리 망 의 모든 분할 4140개를 전수 조사해서 의 최댓값이 임을 확인했다. 8명은 그렇게 할 수 있었다. 그러면 34명인 가라테 클럽은?
| 사람 수 | 가능한 분할의 수 (벨 수 ) |
|---|---|
| 5 | 52 |
| 8 | 4,140 ← 단원 3-3에서 전수 조사한 것 |
| 15 | 1,382,958,545 |
| 34 |
개는 1초에 10억 개씩 세어도 우주 나이보다 오래 걸린다. “두 모둠으로만 나눈다”고 제한을 걸어도 가지다.
그런데 다행인 점이 하나 있다. 학급은 작다.
30명 규모라면 정수계획법으로 진짜 최댓값을 구하는 cluster_optimal()이 실제로 돌아간다
(§14에서 가라테 34명에 대해 실행해 볼 것이다). 즉 교사에게는
“최적을 알고 있는 상태에서 휴리스틱을 채점할 수 있는” 드문 상황이 주어진다.
3. 두 가지 방향 — 자를 것인가, 붙일 것인가 (Divisive vs Agglomerative)
커뮤니티를 찾는 방법은 크게 두 갈래다.
| 분리형 (divisive) | 병합형 (agglomerative) | |
|---|---|---|
| 출발점 | 전원이 한 모둠 | 전원이 혼자 |
| 하는 일 | 모둠 사이를 잇는 간선을 끊는다 | 붙일수록 이득인 둘을 합친다 |
| 보는 것 | “어느 간선이 다리인가” | “어느 둘이 뜻밖에 가까운가” |
| 대표 | Girvan–Newman | fast greedy, Louvain |
| 를 쓰는가 | 자를 때는 안 쓴다 (마지막에 고를 때만) | 매 단계 로 결정 |
두 방향은 정반대의 실수를 한다. 분리형은 다리를 잘 찾지만 다리가 여러 개면 헤매고, 병합형은 촘촘한 덩어리를 잘 찾지만 한 번 붙인 것을 되돌리지 못한다. 오늘은 같은 망 에 두 방향을 다 손으로 돌려서 그 차이를 눈으로 본다.
4. 간선 매개 중심성 — 손 계산 (Edge Betweenness by Hand)
단원 2-3에서 정점의 매개 중심성을 배웠다. 여기서는 대상이 간선이 된다.
= 에서 로 가는 최단경로의 개수,
= 그중 간선 를 지나는 것의 개수.
즉 “모든 쌍이 서로에게 갈 때, 이 간선을 몇 번이나 밟고 지나가는가”.
갈림길이 있으면 공평하게 나눠 준다.
망 (8명, 12간선)로 계산한다. 정점 쌍은 개. 28쌍을 하나도 빼지 않고 전부 적는다.
| 쌍 | 거리 | 최단경로 전부 | 각 경로가 밟는 간선 | |
|---|---|---|---|---|
| (S1,S2) | 2 | 3 | S1-S3-S2 S1-S4-S2 S1-S5-S2 | 각 경로에 씩 |
| (S1,S3) | 1 | 1 | S1-S3 | S1-S3에 1 |
| (S1,S4) | 1 | 1 | S1-S4 | S1-S4에 1 |
| (S1,S5) | 1 | 1 | S1-S5 | S1-S5에 1 |
| (S1,S6) | 2 | 1 | S1-S5-S6 | S1-S5, S5-S6에 1씩 |
| (S1,S7) | 3 | 1 | S1-S5-S6-S7 | S1-S5, S5-S6, S6-S7에 1씩 |
| (S1,S8) | 3 | 1 | S1-S5-S6-S8 | S1-S5, S5-S6, S6-S8에 1씩 |
| (S2,S3) | 1 | 1 | S2-S3 | S2-S3에 1 |
| (S2,S4) | 1 | 1 | S2-S4 | S2-S4에 1 |
| (S2,S5) | 1 | 1 | S2-S5 | S2-S5에 1 |
| (S2,S6) | 2 | 1 | S2-S5-S6 | S2-S5, S5-S6 |
| (S2,S7) | 3 | 1 | S2-S5-S6-S7 | S2-S5, S5-S6, S6-S7 |
| (S2,S8) | 3 | 1 | S2-S5-S6-S8 | S2-S5, S5-S6, S6-S8 |
| (S3,S4) | 2 | 3 | S3-S1-S4 S3-S2-S4 S3-S5-S4 | 각 경로에 씩 |
| (S3,S5) | 1 | 1 | S3-S5 | S3-S5에 1 |
| (S3,S6) | 2 | 1 | S3-S5-S6 | S3-S5, S5-S6 |
| (S3,S7) | 3 | 1 | S3-S5-S6-S7 | S3-S5, S5-S6, S6-S7 |
| (S3,S8) | 3 | 1 | S3-S5-S6-S8 | S3-S5, S5-S6, S6-S8 |
| (S4,S5) | 1 | 1 | S4-S5 | S4-S5에 1 |
| (S4,S6) | 2 | 1 | S4-S5-S6 | S4-S5, S5-S6 |
| (S4,S7) | 3 | 1 | S4-S5-S6-S7 | S4-S5, S5-S6, S6-S7 |
| (S4,S8) | 3 | 1 | S4-S5-S6-S8 | S4-S5, S5-S6, S6-S8 |
| (S5,S6) | 1 | 1 | S5-S6 | S5-S6에 1 |
| (S5,S7) | 2 | 1 | S5-S6-S7 | S5-S6, S6-S7 |
| (S5,S8) | 2 | 1 | S5-S6-S8 | S5-S6, S6-S8 |
| (S6,S7) | 1 | 1 | S6-S7 | S6-S7에 1 |
| (S6,S8) | 1 | 1 | S6-S8 | S6-S8에 1 |
| (S7,S8) | 1 | 1 | S7-S8 | S7-S8에 1 (S7-S6-S8은 길이 2라 최단이 아님) |
간선별로 모아 보기 (Collecting by Edge)
| 간선 | 이 간선을 밟는 쌍과 몫 | |
|---|---|---|
| S1–S3 | (S1,S3) 1 + (S1,S2) + (S3,S4) | 5/3 ≈ 1.67 |
| S1–S4 | (S1,S4) 1 + (S1,S2) + (S3,S4) | 5/3 |
| S1–S5 | (S1,S5) 1 + (S1,S2) + (S1,S6) 1 + (S1,S7) 1 + (S1,S8) 1 | 13/3 ≈ 4.33 |
| S2–S3 | (S2,S3) 1 + (S1,S2) + (S3,S4) | 5/3 |
| S2–S4 | (S2,S4) 1 + (S1,S2) + (S3,S4) | 5/3 |
| S2–S5 | (S2,S5) 1 + (S1,S2) + (S2,S6) 1 + (S2,S7) 1 + (S2,S8) 1 | 13/3 |
| S3–S5 | (S3,S5) 1 + (S3,S4) + (S3,S6) 1 + (S3,S7) 1 + (S3,S8) 1 | 13/3 |
| S4–S5 | (S4,S5) 1 + (S3,S4) + (S4,S6) 1 + (S4,S7) 1 + (S4,S8) 1 | 13/3 |
| S5–S6 | 의 5명 × 의 3명 = 15쌍이 전부 이 간선을 지난다 | 15 |
| S6–S7 | S7로 가는 쌍 6개: (S1,S7)(S2,S7)(S3,S7)(S4,S7)(S5,S7)(S6,S7) | 6 |
| S6–S8 | S8로 가는 쌍 6개 | 6 |
| S7–S8 | (S7,S8) 하나뿐 | 1 |
쌍 는 최단경로를 따라 간선을 정확히 번 밟는다(갈림길이 있어도 몫을 나눠 가지므로 합은 같다). 따라서 .
| 거리 | 쌍의 수 | 기여 |
|---|---|---|
| 1 | 12 | 12 |
| 2 | 8 | 16 |
| 3 | 8 | 24 |
| 거리 총합 | 52 | |
값이 말해 주는 것 (What the Values Tell Us)
- S5–S6 = 15: 이 간선을 끊으면 15쌍이 서로에게 못 간다. 이 망의 유일한 다리다.
- S7–S8 = 1: 삼각형 안쪽이라 “지나갈 일”이 없다. S7과 S8이 서로 갈 때뿐. 가까운 사이일수록 매개가 낮다는 것이 핵심 — 매개가 높은 간선은 친한 사이가 아니라 연결 담당이다.
- 13/3 vs 5/3: 같은 오각형 간선인데 S5에 붙은 것(13/3)이 붙지 않은 것(5/3)보다 2.6배 높다. S5가 바깥으로 나가는 유일한 문이라서, S1~S4가 밖으로 나갈 때 반드시 S5를 거치기 때문이다.
5. Girvan–Newman: 위에서 자르며 내려가기 (The Girvan–Newman Algorithm)
- 모든 간선의 매개 중심성을 계산한다.
- 가장 높은 간선 하나를 제거한다.
- 남은 망에서 매개를 다시 계산한다. ← 이 재계산이 핵심
- 간선이 다 없어질 때까지 1~3을 반복하고, 도중에 생긴 분할들 중 가 가장 큰 것을 답으로 고른다.
에 그대로 돌려 보자. 동점이면 번호가 작은 간선을 먼저 제거한다.
| 단계 | 제거 간선 | 그때의 매개 | 덩어리 | 분할 | |
|---|---|---|---|---|---|
| 1 | S5–S6 | 15 | 2 | {S1,S2,S3,S4,S5} | {S6,S7,S8} | 190/576 |
| 2 | S1–S3 | 5/3 | 2 | (변화 없음) | 190/576 |
| 3 | S1–S5 | 5/2 | 2 | (변화 없음) | 190/576 |
| 4 | S1–S4 | 4 | 3 | {S1} | {S2,S3,S4,S5} | {S6,S7,S8} | 130/576 |
| 5 | S2–S3 | 3/2 | 3 | (변화 없음) | 130/576 |
| 6 | S3–S5 | 3 | 4 | {S1} | {S2,S4,S5} | {S3} | {S6,S7,S8} | 100/576 |
| 7 | S2–S4 | 1 | 4 | (변화 없음) | 100/576 |
| 8 | S2–S5 | 2 | 5 | {S1} | {S2} | {S3} | {S4,S5} | {S6,S7,S8} | 52/576 |
| 9 | S4–S5 | 1 | 6 | {S1}|{S2}|{S3}|{S4}|{S5}|{S6,S7,S8} | 34/576 |
| 10 | S6–S7 | 1 | 6 | (변화 없음) | 34/576 |
| 11 | S6–S8 | 2 | 7 | {S1}…{S6} | {S7,S8} | −38/576 |
| 12 | S7–S8 | 1 | 8 | 전원 혼자 | −78/576 |
단계 1에서 이미 끝났다 (The Split Is Already Done at Step 1)
의 최댓값 이 첫 번째 간선을 자르자마자 나왔고, 그 뒤로는 계속 내려가기만 한다. 에서 GN은 사실상 “다리를 한 번 짚는 것”만으로 답을 냈다. 이것이 분리형의 장점이다 — 다리가 뚜렷하면 한 방에 찾는다.
6. 병합 이득 공식 (The Merge-Gain Formula)
이제 반대 방향, 병합형으로 간다. 병합형은 매 단계 “이 둘을 합치면 가 얼마나 오르나”를 물어야 한다. 단원 3-3의 모둠별 공식에서 바로 유도된다.
는 이므로 전부 576분의 정수로 떨어진다:
이 공식이 모듈러리티 행렬과 같은 것임을 확인하기 (The Formula Is the Modularity Matrix Again)
둘 다 혼자인 두 사람 를 합칠 때는 이므로
단원 3-3의 표에서 대각선 밖 최댓값을 찾아보면:
| 쌍 | (576분의) | |||
|---|---|---|---|---|
| S7,S8 | 24 | 2×2 = 4 | +20 | 40 |
| S6,S7 / S6,S8 | 24 | 3×2 = 6 | +18 | 36 |
| S1,S3 / S1,S4 / S2,S3 / S2,S4 | 24 | 3×3 = 9 | +15 | 30 |
| S1,S5 / S2,S5 / S3,S5 / S4,S5 / S5,S6 | 24 | 3×5 = 15 | +9 | 18 |
| S1,S2 / S3,S4 / S1,S6 … | 0 | 9 | −9 | −18 |
| S5,S7 / S5,S8 | 0 | 5×2 = 10 | −10 | −20 |
| S1,S7 / S1,S8 / … | 0 | 3×2 = 6 | −6 | −12 |
7. fast greedy: 아래에서 붙이며 올라가기 (Fast Greedy / CNM)
- 전원을 혼자 두고 시작한다 ().
- 모든 모둠 쌍에 대해 를 계산하고, 가장 큰 하나를 합친다.
- 의 최댓값이 음수가 되면 멈춘다.
손으로 끝까지 돌린다. 매 단계 후보를 전부 적는다 (같은 값이 여러 개면 하나만 대표로 적고 동점임을 밝힌다).
반복 1 — 전원이 혼자 (Iteration 1 — Everyone a Singleton)
후보는 쌍. 위 §6의 표가 그대로 이 단계의 계산이다. 간선이 있는 12쌍은 양수, 없는 16쌍은 전부 음수.
| 후보 | |||||
|---|---|---|---|---|---|
| {S7}+{S8} | 1 | 2 | 2 | 48 − 8 | +40/576 |
| {S6}+{S7}, {S6}+{S8} | 1 | 3 | 2 | 48 − 12 | +36/576 |
| {S1}+{S3} 등 4쌍 | 1 | 3 | 3 | 48 − 18 | +30/576 |
| {S1}+{S5} 등 5쌍 | 1 | 3 | 5 | 48 − 30 | +18/576 |
| 간선 없는 16쌍 | 0 | — | 음수 | −8 … −20 | |
→ {S7,S8} 병합.
반복 2 — {S7,S8}이 생겼다 (Iteration 2 — {S7,S8} Is Born)
| 후보 | 계산 | ||||
|---|---|---|---|---|---|
| {S6}+{S7,S8} | 2 | 3 | 4 | 96 − 24 | +72/576 |
| {S1}+{S3} 등 | 1 | 3 | 3 | 48 − 18 | +30/576 |
| {S1}+{S5} 등 | 1 | 3 | 5 | 48 − 30 | +18/576 |
| {S1}+{S7,S8} | 0 | 3 | 4 | 0 − 24 | −24/576 |
| {S5}+{S7,S8} | 0 | 5 | 4 | 0 − 40 | −40/576 |
S6은 {S7,S8}과 두 개의 간선을 갖는다(S6–S7, S6–S8). 가 되면서 이득이 두 배로 뛰었다. → {S6,S7,S8} 병합.
반복 3~6 — 오각형 쪽이 뭉친다 (Iterations 3–6 — the Pentagon Side Gathers)
| 반복 | 최선의 병합 | 병합 후 분할 | ||||
|---|---|---|---|---|---|---|
| 3 | {S1}+{S3} (동점 4개) | 1 | 3, 3 | +30 | {S1,S3}|{S2}|{S4}|{S5}|{S6,S7,S8} | 64/576 |
| 4 | {S1,S3}+{S5} | 2 | 6, 5 | +36 | {S1,S3,S5}|{S2}|{S4}|{S6,S7,S8} | 100/576 |
| 5 | {S1,S3,S5}+{S2} (동점 3개) | 2 | 11, 3 | +30 | {S1,S2,S3,S5}|{S4}|{S6,S7,S8} | 130/576 |
| 6 | {S1,S2,S3,S5}+{S4} | 3 | 14, 3 | +60 | {S1,S2,S3,S4,S5}|{S6,S7,S8} | 190/576 |
| 7 | {S1..S5}+{S6,S7,S8} | 1 | 17, 7 | 48 − 238 = −190 | 전원 한 모둠 | 0 |
반복 7의 가 음수이므로 여기서 멈춘다. 최종 답은 — GN과 같은 답, 그리고 단원 3-3에서 전수 조사로 확인한 진짜 최적이다.
① 이득의 합: ✓
② 마지막 병합의 이득이 이고 — 단원 3-3에서 증명한 “전원 한 모둠이면 는 언제나 정확히 0”과 일치한다 ✓
8. 두 길이 지나간 자리 (The Two Trajectories)
GN은 8모둠 쪽에서 2모둠 쪽으로 내려왔고, fast greedy는 8모둠에서 올라갔다. 같은 “모둠 수”에서 두 알고리즘이 만든 분할의 를 나란히 놓아 본다.
| 모둠 수 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| GN (자르며 내려옴) | −78 | −38 | 34 | 52 | 100 | 130 | 190 | 0 |
| fast greedy (붙이며 올라감) | −78 | −38 | 34 | 64 | 100 | 130 | 190 | 0 |
(단위: /576)
여덟 지점 중 일곱 곳에서 값이 같고, 5모둠에서만 갈린다:
| 알고리즘 | 5모둠일 때의 분할 | |
|---|---|---|
| GN | {S1} | {S2} | {S3} | {S4,S5} | {S6,S7,S8} | 52/576 |
| fast greedy | {S1,S3} | {S2} | {S4} | {S5} | {S6,S7,S8} | 64/576 |
GN이 오각형을 “S4–S5만 남기고 다 끊은” 모양으로 만든 반면, fast greedy는 “S1–S3만 붙인” 모양을 만들었다. 방향이 반대이니 당연히 다른 중간 상태다. 중간 과정이 다른데 최종 답은 같다 — 구조가 뚜렷한 망에서는 길이 달라도 도착지가 같다. §14에서 구조가 뚜렷하지 않으면 어떻게 되는지 볼 것이다.
9. Louvain ① 국소 이동 (Louvain: Local Moving)
Louvain(Blondel 외, 2008)은 현재 가장 널리 쓰이는 방법이다. 두 단계를 번갈아 반복한다.
2단계 (집계). 각 모둠을 정점 하나로 압축하고 1단계를 다시 한다.
정점 를 모둠 에 넣을 때의 이득은 §6 공식에서 (= 에서 로 가는 간선 수), , 로 놓은 것이다:
순서를 S1→S8로 두고 손으로 돌린다. 동점이면 번호가 작은 모둠을 택한다.
순회 1 (Sweep 1)
| 정점 | 후보 모둠과 (576분의) | 결정 |
|---|---|---|
| S1 () | {S3}: | {S4}: | {S5}: | 혼자: 0 | {S3}로 이동 (S3·S4 동점) |
| S2 () | {S1,S3}: | {S4}: | {S5}: | {S4}로 이동 |
| S3 | {S1}: | {S2,S4}: | {S5}: | {S1}에 그대로 |
| S4 | {S1,S3}: | {S2}: | {S5}: | {S2}에 그대로 |
| S5 () | {S1,S3}: | {S2,S4}: | {S6}: | {S1,S3}으로 이동 |
| S6 () | {S1,S3,S5}: −18 | {S7}: | {S8}: | {S7}로 이동 |
| S7 () | {S6}: | {S8}: +40 | {S8}로 이동 |
| S8 | {S6}: | {S7}: | {S7}에 그대로 |
순회 2 (Sweep 2)
| 정점 | 후보 모둠과 | 결정 |
|---|---|---|
| S1 | {S3,S5}: | {S2,S4}: | 그대로 |
| S2 | {S1,S3,S5}: | {S4}: | 동점 → 그대로 |
| S3 | {S1,S5}: | {S2,S4}: | 그대로 |
| S4 | {S1,S3,S5}: | {S2}: | 동점 → 그대로 |
| S5 | {S1,S3}: | {S2,S4}: | {S6}: | 그대로 |
| S6 | {S1,S3,S5}: | {S7,S8}: +72 | {S7,S8}로 이동 |
| S7 | {S6,S8}: | 그대로 |
| S8 | {S6,S7}: | 그대로 |
순회 3에서는 아무도 움직이지 않는다 → 1단계 종료.
최적 에 못 미친다. 그리고 이 분할은 §1에서 답을 맞춘 지난 시간의 바로 그것이다. 한 명씩만 물어보는 국소 이동은 여기서 막힌다.
왜 막혔는가 — 순회 2의 동점을 보라 (Why It Stalls — the Tie in Sweep 2)
S2에게 “{S1,S3,S5}로 옮길래?”라고 물으면 이득이 , 지금 있는 {S4}에 남는 것도 이다. 혼자 옮겨서는 아무 이득이 없다. S4도 마찬가지다. 그런데 S2와 S4가 함께 옮기면 이야기가 달라진다. 그것이 2단계다.
10. Louvain ② 집계 (Louvain: Aggregation)
1단계 결과의 각 모둠을 정점 하나로 압축한다. 모둠 안의 간선은 그 정점의 자기 고리가 되고, 모둠 사이의 간선은 가중치가 된다.
| 초정점 | 원래 모둠 | 내부 간선 (자기 고리) | |
|---|---|---|---|
| A | {S1,S3,S5} | S1–S3, S1–S5, S3–S5 → 3 | 3+3+5 = 11 |
| B | {S2,S4} | S2–S4 → 1 | 3+3 = 6 |
| C | {S6,S7,S8} | S6–S7, S6–S8, S7–S8 → 3 | 3+2+2 = 7 |
| 초정점 사이 | 원래 간선 | |
|---|---|---|
| A–B | S1–S4, S2–S3, S2–S5, S4–S5 | 4 |
| A–C | S5–S6 | 1 |
| B–C | 없음 | 0 |
검산: 내부 , 사이 , 합 12 = ✓ 합 ✓
초정점 3개로 다시 병합 이득 계산 (Merge Gains on the Three Super-Nodes)
| 후보 | |||||
|---|---|---|---|---|---|
| A+B | 4 | 11 | 6 | 192 − 132 | +60/576 |
| A+C | 1 | 11 | 7 | 48 − 154 | −106/576 |
| B+C | 0 | 6 | 7 | 0 − 84 | −84/576 |
A와 B를 합친다 → . 최적 도달. 다시 집계해도 더 합칠 것이 없으므로(A∪B와 C를 합치면 ) 여기서 끝난다.
11. Louvain은 왜 돌릴 때마다 다른가 (Why Louvain Is Unstable)
단원 3-3에서 “Louvain은 실행할 때마다 답이 달라진다”고만 하고 넘어갔다. 이제 이유를 정확히 짚을 수 있다.
S1에게 물었을 때 {S3}도 , {S4}도 으로 완전히 동점이었다. 어느 쪽을 고르느냐는 순전히 정점을 훑는 순서가 정한다. 그리고 Louvain은 그 순서를 무작위로 섞는다.
실제로 순서만 바꿔서 1단계를 200번 돌려 봤다.
| 1단계가 낸 분할 | 횟수 / 200 | |
|---|---|---|
| {S1,S2,S3,S4,S5} | {S6,S7,S8} | 190/576 | 57 (28.5%) |
| {S1,S3,S5} | {S2,S4} | {S6,S7,S8} | 130/576 | 70 |
| {S1,S4,S5} | {S2,S3} | {S6,S7,S8} | 130/576 | 69 |
| {S1,S4} | {S2,S3,S5} | {S6,S7,S8} | 130/576 | 4 |
- S1→S8 순서(§9에서 손으로 돌린 것)는 에서 끝났다.
- S8→S1 순서로 돌리면 1단계에서 바로 이 나온다.
- 즉 순서만으로 답이 갈린다. 1단계만 놓고 보면 최적에 닿는 것은 28.5%뿐.
cluster_louvain(gW)를 20개의 서로 다른 seed로 돌려도 전부 이었다.1단계는 흔들리지만, 2단계가 받쳐 준다.
12. walktrap: 걸어서 재는 거리 (Walktrap: Random-Walk Distance)
지금까지의 방법은 전부 나 매개를 봤다. walktrap(Pons & Latapy, 2005)은 전혀 다른 발상이다.
한 걸음 전이행렬 (The One-Step Transition Matrix)
— 에 서 있을 때 다음 걸음에 로 갈 확률. 의 차수는 이므로 각 행을 자기 차수로 나눈다.
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | |
|---|---|---|---|---|---|---|---|---|
| S1 | 0 | 0 | 1/3 | 1/3 | 1/3 | 0 | 0 | 0 |
| S2 | 0 | 0 | 1/3 | 1/3 | 1/3 | 0 | 0 | 0 |
| S5 | 1/5 | 1/5 | 1/5 | 1/5 | 0 | 1/5 | 0 | 0 |
| S7 | 0 | 0 | 0 | 0 | 0 | 1/2 | 0 | 1/2 |
두 걸음 — 손으로 의 한 행 구하기 (Two Steps — One Row of P² by Hand)
. S1의 이웃은 S3, S4, S5뿐이므로 세 항만 살아남는다.
| 목적지 | S1→S3→ | S1→S4→ | S1→S5→ | 합 |
|---|---|---|---|---|
| S1 | 13/45 | |||
| S2 | 13/45 | |||
| S3 | 0 (S3–S3 없음) | 0 (S4–S3 없음) | 3/45 | |
| S4 | 0 | 0 | 3/45 | |
| S5 | 0 | 10/45 | ||
| S6 | 0 | 0 | 3/45 | |
| S7 | 0 | 0 | 0 | 0 |
| S8 | 0 | 0 | 0 | 0 |
| 합계 (확률이므로 1이어야 한다) | 45/45 = 1 ✓ | |||
같은 식으로 S7행도 구해 둔다(S7의 이웃은 S6, S8):
| S1~S4 | S5 | S6 | S7 | S8 | |
|---|---|---|---|---|---|
| 0 | |||||
| 0 |
(: S7→S6→S7 와 S7→S8→S7 의 합 .)
walktrap의 거리 (The Walktrap Distance)
손으로 을 구해 본다. 위 표에서 두 행은 S7·S8 칸에서만 다르다.
| 차 | |||||
|---|---|---|---|---|---|
| S1~S6 | 같음 | 0 | — | 0 | |
| S7 | 5/12 | 2/12 | 2 | ||
| S8 | 2/12 | 5/12 | 2 | ||
| 합 | |||||
거리를 다 재고 나면 (After Every Distance Is Measured)
| 쌍 | 직접 이웃? | 읽는 법 | |
|---|---|---|---|
| S1, S2 | 0.000 | 아니오 | 이웃이 로 완전히 같다 → 걸음 분포도 완전히 같다 |
| S1, S5 | 0.166 | 예 | 가장 가까운 “실제” 쌍 |
| S6, S7 | 0.224 | 예 | 삼각형 안 |
| S7, S8 | 0.250 | 예 | 위에서 손으로 구한 값 |
| S1, S3 | 0.257 | 예 | 이웃인데 S1–S5보다 멀다 |
| S5, S6 | 0.302 | 예 | 다리 — 이웃이지만 갈 곳이 서로 딴판 |
| S1, S7 | 0.414 | 아니오 | 가장 먼 쌍 |
S1과 S2는 서로 이어져 있지도 않은데 거리가 정확히 0이다 — 갈 수 있는 곳이 똑같기 때문이다. 반대로 S1과 S3은 직접 이어져 있는데도 S1–S5보다 멀다.
이 “이웃이 같으면 같은 자리”라는 발상은 다음 단원 3-5(구조적 등위성)의 핵심이 된다.
walktrap은 이 거리로 가까운 모둠부터 병합(Ward 방식)한 뒤, 그 과정에서 가 가장 높은 지점을 고른다. 에서는 어느 걸음 수로 해도 답이 으로 같았다.
13. R로 검증 (Verification in R)
library(igraph)
nm <- paste0("S",1:8)
W <- matrix(0,8,8,dimnames=list(nm,nm))
el <- rbind(c(1,3),c(1,4),c(1,5),c(2,3),c(2,4),c(2,5),c(3,5),c(4,5),
c(5,6),c(6,7),c(6,8),c(7,8))
for(i in 1:nrow(el)){ W[el[i,1],el[i,2]] <- 1; W[el[i,2],el[i,1]] <- 1 }
gW <- graph_from_adjacency_matrix(W, mode="undirected")
## (1) 간선 매개 — §4
edge_betweenness(gW)
# S1-S3 S1-S4 S1-S5 S2-S3 S2-S4 S2-S5 S3-S5 S4-S5 S5-S6 S6-S7 S6-S8 S7-S8
# 1.667 1.667 4.333 1.667 1.667 4.333 4.333 4.333 15.000 6.000 6.000 1.000
sum(edge_betweenness(gW)); sum(distances(gW))/2 # 검산
# [1] 52
# [1] 52
## (2) 병합 이득 공식 — §6
dQ <- function(A,B,g=gW){ d <- degree(g)
(48*sum(W[A,B]) - 2*sum(d[A])*sum(d[B])) / 576 }
dQ(7,8)*576 # [1] 40 <- 첫 병합
dQ(6,c(7,8))*576 # [1] 72
## (3) 알고리즘 8개 — W에서는 전원 일치
show <- function(cl) c(Q576=round(modularity(gW,membership(cl))*576),
k=length(unique(membership(cl))))
sapply(list(GN=cluster_edge_betweenness(gW), FG=cluster_fast_greedy(gW),
LV=cluster_louvain(gW), WT=cluster_walktrap(gW),
LE=cluster_leading_eigen(gW), LP=cluster_label_prop(gW),
IM=cluster_infomap(gW), OPT=cluster_optimal(gW)), show)
# GN FG LV WT LE LP IM OPT
# Q576 190 190 190 190 190 190 190 190
# k 2 2 2 2 2 2 2 2
## (4) walktrap 거리 — §12
P <- W / degree(gW); P2 <- P %*% P
sqrt(sum((P2[7,]-P2[8,])^2 / degree(gW))) # [1] 0.25
sqrt(sum((P2[1,]-P2[2,])^2 / degree(gW))) # [1] 0 <- S1과 S2는 완전히 같은 자리
14. 가라테: 정답이 있는 시험 (Karate: A Test with a Known Answer)
가라테 클럽은 실제로 어떻게 갈라졌는지가 기록된 드문 자료다. Mr. Hi 편 16명 / John A. 편 18명. 알고리즘들에게 채점표를 줄 수 있다.
| 방법 | 모둠 수 | 크기 | 파벌 경계를 넘은 학생 | 무작위성 | |
|---|---|---|---|---|---|
| 실제 파벌 (정답) | 0.3715 | 2 | 18-16 | — | — |
cluster_optimal (정수계획) | 0.4198 | 4 | 12-11-6-5 | 없음 | 없음 |
cluster_louvain (seed 4) | 0.4198 | 4 | 12-11-6-5 | 없음 | 있음 |
cluster_infomap | 0.4020 | 3 | 17-12-5 | 10번 | 있음 |
cluster_label_prop (seed 1) | 0.4020 | 3 | 17-12-5 | 10번 | 있음 |
cluster_edge_betweenness (GN) | 0.4013 | 5 | 12-10-6-5-1 | 3번 | 없음 |
cluster_leading_eigen | 0.3934 | 4 | 12-9-7-6 | 없음 | 없음 |
cluster_fast_greedy | 0.3807 | 3 | 17-9-8 | 10번 | 없음 |
cluster_walktrap | 0.3532 | 5 | 9-9-7-5-4 | 3번, 14번 | 없음 |
읽을 것 다섯 가지 (Five Things to Read Off)
- Louvain(seed 4)이 정수계획법의 진짜 최댓값과 완전히 같은 분할을 찾았다. 명단까지 한 사람도 안 틀렸다. 다만 100번 중 30번만 그랬다(§11).
- fast greedy는 에 갇혔다. 최적보다 0.039 낮다. §7에서 예고한 “되돌리지 못하는 탐욕”이 34명 규모에서 실제로 손해를 냈다.
- GN은 1명짜리 모둠을 만들었다 — 10번 학생. 매개가 높은 간선을 계속 끊다 보면 다리 역할만 하는 학생이 홀로 남는다. 분리형의 전형적인 부작용이다.
- walktrap이 기준으로는 꼴찌(0.3532)다. 를 목적함수로 쓰지 않으니 당연하다 — walktrap은 “걸음이 갇히는가”를 보지 “가 오르는가”를 보지 않는다.
- 세 방법(optimal, Louvain, leading eigen)은 파벌 경계를 한 명도 넘지 않았다. 이들은 정답을 어긴 것이 아니라 더 잘게 쪼갠 것이다.
갈린 학생 세 명 (The Three Students Who Get Split)
| 학생 | 실제 파벌 | 차수 | 이웃 | Mr.Hi / John A. |
|---|---|---|---|---|
| 3번 | Mr. Hi | 10 | 1,2,4,8,9,10,14,28,29,33 | 5 / 5 |
| 10번 | John A. | 2 | 3, 34 | 1 / 1 |
| 14번 | Mr. Hi | 5 | 1,2,3,4,34 | 4 / 1 |
3번과 10번은 친구가 정확히 반반이다. 어느 알고리즘도 이들을 자신 있게 배치할 수 없는 것이 당연하다. 알고리즘이 갈리는 지점 = 실제로 경계에 서 있는 사람이다.
15. 가 높다고 진실에 가까운 것은 아니다 (Higher Q Is Not Closer to the Truth)
위 표를 순서로 다시 보면 이상한 일이 벌어진다.
| 분할 | |
|---|---|
optimal / Louvain의 4모둠 | 0.4198 |
| infomap의 3모둠 | 0.4020 |
| fast greedy의 3모둠 | 0.3807 |
| 실제로 일어난 분열 (2모둠) | 0.3715 |
왜 그런가 — 세 가지를 구분하자 (Why — Three Things to Keep Apart)
| 물음 | 답하는 것 | 가라테에서 |
|---|---|---|
| 이 망은 어떻게 나뉘는가? | 최대화 | 4모둠 (0.4198) |
| 이 망은 둘로 나뉜다면 어떻게? | 2모둠 제한 | 파벌 분할에 가깝다 |
| 이 사람들은 실제로 어떻게 갈라졌는가? | 역사적 사실 | 2모둠 (0.3715) |
최대화는 첫 번째 물음에만 답한다. 그리고 중요한 것은,
optimal이 낸 4모둠이 실제 파벌을 어긴 것이 아니라 세분한 것이라는 점이다:
| 모둠 | 명단 | 실제 파벌 |
|---|---|---|
| C1 (11명) | 1,2,3,4,8,12,13,14,18,20,22 | 전원 Mr. Hi |
| C2 (5명) | 5,6,7,11,17 | 전원 Mr. Hi |
| C3 (12명) | 9,10,15,16,19,21,23,27,30,31,33,34 | 전원 John A. |
| C4 (6명) | 24,25,26,28,29,32 | 전원 John A. |
C1∪C2 = Mr. Hi 파벌 전체, C3∪C4 = John A. 파벌 전체다. 알고리즘은 틀린 것이 아니라 더 자세히 본 것이다. 단원 3-3에서 확인한 C2 = {5,6,7,11,17}(바깥 이웃이 1번 한 사람뿐인 다섯 명)이 여기서 다시 나온다.
16. 해상도 한계 (The Resolution Limit)
에는 더 근본적인 한계가 있다. 작은 모둠은 아예 보이지 않는다. 손으로 증명할 수 있는 깔끔한 예가 있다.
삼각형 개를 고리로 이은 그래프 (A Ring of n Triangles)
삼각형 개를 만들고, 각 삼각형에서 하나씩 뽑아 다음 삼각형과 간선 하나로 잇는다. 누가 봐도 모둠은 개다.
| 양 | 값 | 이유 |
|---|---|---|
| 삼각형마다 내부 3개 + 고리 1개 | ||
| 3 | 삼각형 하나의 내부 간선 | |
| 8 | 내부 기여 + 고리 간선 2개(들어오고 나가는 것) = 8 |
삼각형 각각을 모둠으로 둘 때:
이웃한 두 삼각형을 한 모둠으로 묶으면 이 되므로
| 값 | 판정 | ||
|---|---|---|---|
| 4 | −0.0625 | 합치면 손해 (정상) | |
| 6 | −0.0139 | 합치면 손해 (정상) | |
| 8 | 정확히 0 | 경계 | |
| 9 | +1/324 | 합치는 쪽이 이득! | |
| 12 | +1/144 | 합치는 쪽이 이득! |
기준 (The Rule of Thumb)
Fortunato & Barthélemy(2007)의 경험칙: 인 모둠은 가 잘 못 본다. 우리 예에서 확인해 보자. 이고 이므로
손으로 구한 경계 과 정확히 일치한다.
알고리즘을 바꿔도 소용없다 (Changing the Algorithm Does Not Help)
| 방법 | 모둠 수 | 맞혔나 | |
|---|---|---|---|
cluster_optimal | 6 | 0.7083 | 아니오 |
cluster_louvain | 6 | 0.7083 | 아니오 |
cluster_fast_greedy | 6 | 0.7083 | 아니오 |
cluster_walktrap | 7 | 0.7014 | 아니오 |
cluster_edge_betweenness | 8 | 0.6944 | 아니오 |
cluster_infomap | 12 | 0.6667 | 예 |
cluster_optimal은 진짜 최댓값을 찾았는데도 답이 6개다 —
알고리즘의 잘못이 아니라 라는 자 자체의 한계이기 때문이다.
유일하게 맞힌 infomap은 더 좋은 최적화기라서가 아니라
대신 다른 목적함수(정보 압축 길이)를 쓰기 때문이다.
17. 어떤 알고리즘을 쓸 것인가 (Choosing an Algorithm)
| 함수 | 방식 | 속도 | 무작위성 | 쓸 자리 |
|---|---|---|---|---|
cluster_optimal | 정수계획 완전탐색 | 지수 시간 | 없음 | 학급 규모(~30명)면 이것을 쓰라. 진짜 최댓값을 준다 |
cluster_louvain | 국소 이동 + 집계 | 매우 빠름 | 있음 | 큰 망의 표준. 여러 번 돌려 최고를 쓸 것 |
cluster_edge_betweenness | 매개 높은 간선 제거 | 느림 | 없음 | 다리를 짚어 준다 — 분할보다 “끊어지면 위험한 관계”를 찾을 때 |
cluster_fast_greedy | 탐욕 병합 | 빠름 | 없음 | 큰 모둠으로 쏠리는 경향. 요즘은 Louvain에 밀림 |
cluster_walktrap | 걸음 거리 + Ward | 보통 | 없음 | 잘게 나눔. “자리가 비슷한 사람”을 보고 싶을 때 |
cluster_infomap | 정보 압축 | 보통 | 있음 | 해상도 한계가 다르다 — 작은 모둠을 볼 때 대안 |
cluster_leading_eigen | 의 최대 고유벡터 | 보통 | 없음 | 단원 2-4의 고유벡터가 여기서 다시 나온다 |
실무 지침 다섯 가지 (Five Practical Guidelines)
cluster_optimal을 쓰라.
30명이면 몇 초 안에 끝난다. 휴리스틱의 불확실성을 아예 없앨 수 있는 드문 상황이다.
18. 연습문제 (Exercises)
지난 시간의 아령 그래프 : 삼각형 A(A1,A2,A3)와 삼각형 B(B1,B2,B3)를 간선 A1–B1 하나로 이은 6명 7간선. 차수는 , .
- 7개 간선의 매개 중심성을 전부 손으로 구하라. (15개 쌍을 모두 적고, 각 쌍의 최단경로가 어느 간선을 지나는지 표시할 것)
- 총합이 모든 쌍의 거리 합과 같은지 검산하라.
- GN이 첫 번째로 제거하는 간선은? 그때 는?
- 두 번째로 제거되는 간선은 무엇이고, 그 뒤 는 올라가는가 내려가는가?
§19 해설 — 먼저 풀고 맞춰 볼 것.
같은 . , 이므로 이다.
- 전원이 혼자인 상태에서 15개 쌍 전부의 를 구하라 (간선 있는 7쌍 + 없는 8쌍).
- 가장 큰 이득을 주는 병합은? 다리 A1–B1이 아닌 이유를 공식으로 설명하라.
- 끝까지 병합을 진행하고 매 단계의 를 적어라. 최적값 에 도달하는가?
- GN(문제 1)과 fast greedy는 같은 답에 도달했다. 그런데 다리 A1–B1을 다루는 방식은 어떻게 달랐는가?
§19 해설 — 먼저 풀고 맞춰 볼 것.
19. 해설과 답 (Solutions)
문제 1 해설 — 아령 그래프의 간선 매개 (Solution 1 — Edge Betweenness on the Barbell)
(1) 15개 쌍을 전부 전개한다. 에서 A쪽 3명과 B쪽 3명은 반드시 A1–B1을 지난다.
| 쌍 | 거리 | 최단경로 | 지나는 간선 | |
|---|---|---|---|---|
| (A1,A2) | 1 | 1 | A1-A2 | A1–A2 |
| (A1,A3) | 1 | 1 | A1-A3 | A1–A3 |
| (A2,A3) | 1 | 1 | A2-A3 | A2–A3 |
| (B1,B2) | 1 | 1 | B1-B2 | B1–B2 |
| (B1,B3) | 1 | 1 | B1-B3 | B1–B3 |
| (B2,B3) | 1 | 1 | B2-B3 | B2–B3 |
| (A1,B1) | 1 | 1 | A1-B1 | A1–B1 |
| (A1,B2) | 2 | 1 | A1-B1-B2 | A1–B1, B1–B2 |
| (A1,B3) | 2 | 1 | A1-B1-B3 | A1–B1, B1–B3 |
| (A2,B1) | 2 | 1 | A2-A1-B1 | A1–A2, A1–B1 |
| (A3,B1) | 2 | 1 | A3-A1-B1 | A1–A3, A1–B1 |
| (A2,B2) | 3 | 1 | A2-A1-B1-B2 | A1–A2, A1–B1, B1–B2 |
| (A2,B3) | 3 | 1 | A2-A1-B1-B3 | A1–A2, A1–B1, B1–B3 |
| (A3,B2) | 3 | 1 | A3-A1-B1-B2 | A1–A3, A1–B1, B1–B2 |
| (A3,B3) | 3 | 1 | A3-A1-B1-B3 | A1–A3, A1–B1, B1–B3 |
갈림길이 하나도 없다(모든 ) — 아령에는 우회로가 없으므로 분수가 안 나온다. 간선별로 모으면:
| 간선 | 이 간선을 밟는 쌍 | |
|---|---|---|
| A1–B1 | (A1,B1)(A1,B2)(A1,B3)(A2,B1)(A2,B2)(A2,B3)(A3,B1)(A3,B2)(A3,B3) — A쪽 3명 × B쪽 3명 | 9 |
| A1–A2 | (A1,A2)(A2,B1)(A2,B2)(A2,B3) | 4 |
| A1–A3 | (A1,A3)(A3,B1)(A3,B2)(A3,B3) | 4 |
| B1–B2 | (B1,B2)(A1,B2)(A2,B2)(A3,B2) | 4 |
| B1–B3 | (B1,B3)(A1,B3)(A2,B3)(A3,B3) | 4 |
| A2–A3 | (A2,A3) 하나뿐 | 1 |
| B2–B3 | (B2,B3) 하나뿐 | 1 |
(2) 검산. 간선 매개 총합 .
| 거리 | 쌍 | 수 | 기여 |
|---|---|---|---|
| 1 | A·B 내부 6쌍 + (A1,B1) | 7 | 7 |
| 2 | (A1,B2)(A1,B3)(A2,B1)(A3,B1) | 4 | 8 |
| 3 | (A2,B2)(A2,B3)(A3,B2)(A3,B3) | 4 | 12 |
| 거리 총합 | 27 | ||
(3) 첫 제거. 최댓값은 A1–B1의 9. 끊는 순간 두 삼각형으로 갈라진다.
| 모둠 | 항 | ||||
|---|---|---|---|---|---|
| A | 3 | 7 | 3/7 = 84/196 | 49/196 | 35/196 |
| B | 3 | 7 | 84/196 | 49/196 | 35/196 |
| 70/196 = 5/14 ≈ 0.3571 | |||||
두 항이 35로 같은 것은 단원 3-3에서 증명한 두 모둠 항등식 그대로다 (, ).
(4) 두 번째 제거. A1–B1이 사라진 뒤 매개를 다시 계산하면 남은 것은 삼각형 두 개뿐이고, 삼각형 안에서는 모든 간선의 매개가 1로 똑같다 (각 간선은 자기 양 끝 쌍에만 쓰인다). 그러므로 어느 하나가 임의로 제거된다. 그러면 삼각형 하나가 경로 3개짜리로 바뀌지만 덩어리 수는 그대로 2개이므로 는 원본망 기준으로 여전히 다. 세 번째 제거에서 비로소 한 명이 떨어져 나가고 가 내려간다.
문제 2 해설 — 아령 그래프의 fast greedy (Solution 2 — Fast Greedy on the Barbell)
(1) 15쌍 전부. , 차수는 A1=3, A2=2, A3=2, B1=3, B2=2, B3=2.
| 쌍 | (196분의) | 왜 그 값인가 | |||
|---|---|---|---|---|---|
| A2–A3 | 1 | 28 | 2·2·2 = 8 | +20 | 둘 다 차수 2 — 우연히 이어질 이유가 가장 적다 |
| B2–B3 | 1 | 28 | 8 | +20 | 위와 대칭 |
| A1–A2 | 1 | 28 | 2·3·2 = 12 | +16 | 한쪽이 차수 3 |
| A1–A3 | 1 | 28 | 12 | +16 | 〃 |
| B1–B2 | 1 | 28 | 12 | +16 | 〃 |
| B1–B3 | 1 | 28 | 12 | +16 | 〃 |
| A1–B1 | 1 | 28 | 2·3·3 = 18 | +10 | 양쪽 다 차수 3 — 가장 “그럴 만한” 간선이라 이득이 가장 작다 |
| A1–B2 | 0 | 0 | 2·3·2 = 12 | −12 | 간선 없음 |
| A1–B3 | 0 | 0 | 12 | −12 | 간선 없음 |
| A2–B1 | 0 | 0 | 12 | −12 | 간선 없음 |
| A3–B1 | 0 | 0 | 12 | −12 | 간선 없음 |
| A2–B2 | 0 | 0 | 2·2·2 = 8 | −8 | 간선 없음 |
| A2–B3 | 0 | 0 | 8 | −8 | 간선 없음 |
| A3–B2 | 0 | 0 | 8 | −8 | 간선 없음 |
| A3–B3 | 0 | 0 | 8 | −8 | 간선 없음 |
쌍의 수 검산: 간선 있는 7쌍 + 없는 8쌍 = 15 = ✓
(2) 첫 병합은 A2–A3 (또는 B2–B3), . 다리 A1–B1은 으로 꼴찌다. 같은 “간선 1개”인데도 값이 갈리는 이유는 공식의 때문이다. 차수가 3·3인 A1–B1은 영 모형에서도 개쯤 기대되는 반면, 차수 2·2인 A2–A3는 개만 기대된다. 있으리라 기대되지 않았는데 있는 간선일수록 증거가 세다.
(3) 끝까지. 시작값은 .
| 반복 | 최선의 병합 | 계산 | (196분의) | |||
|---|---|---|---|---|---|---|
| 0 | — (전원 혼자) | — | — | — | — | −34 |
| 1 | {A2}+{A3} | 1 | 2, 2 | 28 − 8 | +20 | −14 |
| 2 | {A1}+{A2,A3} | 2 | 3, 4 | 56 − 24 | +32 | 18 |
| 3 | {B2}+{B3} | 1 | 2, 2 | 28 − 8 | +20 | 38 |
| 4 | {B1}+{B2,B3} | 2 | 3, 4 | 56 − 24 | +32 | 70 |
| 5 | {A}+{B} | 1 | 7, 7 | 28 − 98 | −70 | 0 → 중단 |
반복 2에서 인 이유: A1은 A2와 A3 둘 다와 이어져 있다. 반복 5의 가 음수이므로 멈춘다.
검산: ✓ 그리고 — 전원 한 모둠이면 ✓
(4) 두 알고리즘의 다리 처리.
| Girvan–Newman | fast greedy | |
|---|---|---|
| 다리를 언제 보나 | 맨 처음 (매개 9, 1위) | 맨 마지막 ( +10, 꼴찌) |
| 다리에 하는 일 | 끊는다 | 아무것도 안 한다 |
| 분할이 생기는 방식 | 다리를 잘라서 | 다리를 안 붙여서 |
| 단계 수 | 1번 | 4번 |
오늘 §12에서 이상한 것을 봤다. S1과 S2는 서로 이어져 있지도 않은데 walktrap 거리가 정확히 0이었다. 이웃 목록이 로 완전히 같기 때문이다.
지금까지 우리가 찾은 “모둠”은 전부 서로 붙어 있는 사람들이었다. 그런데 붙어 있지 않아도 같은 자리에 있는 사람들이 있다 — 학급에서 서로 말은 안 하지만 똑같은 아이들에게 지명받는 두 학생처럼. 다음 시간에는 인접행렬의 행이 얼마나 닮았는가를 재서 이런 “자리”를 찾는 법을 손으로 계산한다.