완화된 클리크 — n-클리크, k-플렉스, k-코어
SNA 이론 · 단계별 학습 차례

단원 3-2Relaxed Cliques: n-clique, k-plex, k-core

완화된 클리크 — n-클리크, k-플렉스, k-코어

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

1. 오늘의 질문 — 클리크는 왜 너무 엄격한가 (Today's Question: Why Cliques Are Too Strict)

지난 단원(3-1)에서 7명 네트워크 UU의 극대 클리크를 전부 찾았다. 네 개가 나왔는데, 그중 두 개가 크기 2였다 — {S3,S4}와 {S4,S5}. "세 명이 서로 다 친한 모둠"은 딱 두 개뿐이었다.

가라테 클럽에서는 더 답답했다. 극대 클리크가 36개나 나왔고 최대 크기는 5였는데, 그 크기 5짜리 두 개가 이랬다:

{1,2,3,4,8}그리고{1,2,3,4,14} \{1,2,3,4,\mathbf{8}\} \qquad\text{그리고}\qquad \{1,2,3,4,\mathbf{14}\}

네 명(1,2,3,4)이 똑같고 마지막 한 명만 다르다. 누가 봐도 {1,2,3,4,8,14} 여섯 명이 한 무리인데, 클리크는 이것을 두 개의 다른 집단으로 쪼개서 보고한다. 이유는 단 하나 — 8번과 14번 사이에 간선이 없기 때문이다.

클리크의 문제 — 간선 하나에 전부가 걸린다

크기 ss인 집단이 클리크가 되려면 (s2)\binom{s}{2}개의 쌍이 전부 1이어야 한다. s=6s=6이면 15쌍이다. 그중 한 쌍만 0이어도 탈락이다. 현실의 교우관계 자료는 조사 시점에 결석한 학생, 응답 누락, 서로 알지만 지명하지 않은 관계 때문에 0이 섞이기 마련이다. 클리크는 이 잡음을 견디지 못한다.

완화의 세 방향 (Three Directions of Relaxation)

클리크의 조건 "집단 안 모든 쌍 i,ji,j에 대해 A[i,j]=1A[i,j]=1"을 서로 다른 세 방식으로 늦출 수 있다.

#무엇을 늦추는가이름 (name)새 조건
거리 — "직접 연결"을 "가까우면 됨"으로n-클리크
n-clique
모든 쌍의 측지거리nn 이하
결석 — "전원과 연결"을 "몇 명은 몰라도 됨"으로k-플렉스
k-plex
각자 집단 안에서 k1k-1명까지 몰라도 됨
기준의 방향 — "몇 명을 빠뜨렸나"를 "몇 명을 챙겼나"로k-코어
k-core
각자 집단 안에 친구가 kk명 이상

②와 ③은 언뜻 같은 말처럼 들리지만 정반대 방향이다. ②는 "빠진 수"를 세고 ③은 "있는 수"를 센다. 집단이 커질수록 ②는 점점 엄격해지고(전체가 늘어도 허용 결석은 그대로), ③은 점점 느슨해진다(요구 친구 수는 그대로인데 후보가 늘어난다). 오늘 이 차이를 손으로 확인한다.

세 가지 모두 k=1k=1 또는 n=1n=1이면 클리크로 되돌아간다. 1-클리크 = 클리크(모든 거리 1), 1-플렉스 = 클리크(아무도 빠뜨리면 안 됨). k-코어만 조금 다르게 대응하는데, 크기 ss인 클리크는 정확히 (s1)(s-1)-코어의 조건을 만족한다 (완전그래프 KsK_s의 모든 차수가 s1s-1이므로).

2. 오늘의 네트워크 WW (Today's Network)

지난 시간의 UU는 너무 성글어서 세 완화가 서로 구별되지 않는다 (UU에서는 2-플렉스의 최대 크기가 3으로 클리크와 똑같고, 2-코어는 7명 전원이다). 오늘은 8명짜리 WW를 쓴다. 간선 12개, 무방향.

S1–S3, S1–S4, S1–S5, S2–S3, S2–S4, S2–S5, S3–S5, S4–S5,
S5–S6, S6–S7, S6–S8, S7–S8

인접행렬 WW (The Adjacency Matrix)

S1S2S3S4S5S6S7S8차수 did_i
S1001110003
S2001110003
S3110010003
S4110010003
S5111101005
S6000010113
S7000001012
S8000001102
3333532224

대각선은 전부 0(자기 자신은 세지 않는다), 행렬은 대칭이다(무방향). 차수의 합 24 = 간선 수 12의 두 배 — 단원 1-4의 악수 정리 검산이 맞는다. 밀도는

Δ=2mn(n1)=2×128×7=2456=0.4286 \Delta = \frac{2m}{n(n-1)} = \frac{2\times 12}{8\times 7} = \frac{24}{56} = 0.4286

8명 네트워크 W — 왼쪽 오각형 5명과 오른쪽 삼각형 3명
오늘의 네트워크 WW. 왼쪽 파란 오각형이 S1–S5, 오른쪽 초록 삼각형이 S6–S8, 둘을 잇는 가느다란 선 하나가 S5–S6. 오각형의 대각선 2개(S1–S2, S3–S4)만 없다.

WW를 읽는 세 부분

  • S1~S5 — 서로 빽빽하지만 두 쌍이 비어 있다(S1–S2, S3–S4). 오늘의 주인공.
  • S6 — 다리 역할. 왼쪽에는 S5 하나, 오른쪽에는 S7·S8 둘과 이어진다. 차수 3.
  • S7, S8 — S6에 매달린 작은 삼각형의 나머지 두 명. 차수 2.

3. 클리크로 먼저 보기 — 다섯 명이 네 조각으로 (Cliques First: Five People Shattered into Four)

지난 단원의 방법으로 WW를 분석해 보자. 먼저 {S1,S2,S3,S4,S5}가 클리크인가? 10개 쌍을 전부 확인한다.

#W[i,j]W[i,j]확인
1S1–S20없다 ✗ — S1의 행에서 2열이 0
2S1–S31있다 ✓
3S1–S41있다 ✓
4S1–S51있다 ✓
5S2–S31있다 ✓
6S2–S41있다 ✓
7S2–S51있다 ✓
8S3–S40없다 ✗ — S3의 행에서 4열이 0
9S3–S51있다 ✓
10S4–S51있다 ✓
810쌍 중 8쌍 — 내부 밀도 8/10=0.88/10=0.8

10쌍 중 8쌍이 있는데 클리크가 아니다. 빠진 두 쌍이 만드는 피해를 정확히 세어 보자. {S1,,S5}\{S1,\dots,S5\}에서 뽑을 수 있는 삼중항은 (53)=10\binom{5}{3}=10개다.

#삼중항세 쌍판정
1{S1,S2,S3}0 + 1 + 12S1–S2 때문에 탈락
2{S1,S2,S4}0 + 1 + 12S1–S2 때문에 탈락
3{S1,S2,S5}0 + 1 + 12S1–S2 때문에 탈락
4{S1,S3,S4}1 + 1 + 02S3–S4 때문에 탈락
5{S1,S3,S5}1 + 1 + 13삼각형 ★
6{S1,S4,S5}1 + 1 + 13삼각형 ★
7{S2,S3,S4}1 + 1 + 02S3–S4 때문에 탈락
8{S2,S3,S5}1 + 1 + 13삼각형 ★
9{S2,S4,S5}1 + 1 + 13삼각형 ★
10{S3,S4,S5}1 + 0 + 12S3–S4 때문에 탈락

여기에 오른쪽의 {S6,S7,S8}까지 더하면 WW의 삼각형은 모두 5개다. 4명짜리 클리크는 하나도 없다. 이유는 두 가지로 나뉜다 — 왼쪽에서 4명을 고르면 (42)=6\binom{4}{2}=6쌍 안에 S1–S2 아니면 S3–S4가 반드시 들어가고, 오른쪽 {S6,S7,S8}에 누구를 더하려 해도 S6과 이어진 사람은 S5뿐인데 S5–S7이 없다. 따라서 ω(W)=3\omega(W)=3이고, WW극대 클리크는 6개다:

#극대 클리크크기해석
1{S1,S3,S5}3왼쪽 조각 ①
2{S1,S4,S5}3왼쪽 조각 ②
3{S2,S3,S5}3왼쪽 조각 ③
4{S2,S4,S5}3왼쪽 조각 ④
5{S6,S7,S8}3오른쪽 삼각형
6{S5,S6}2다리 하나 — 단원 3-1에서 본 "크기 2짜리 극대 클리크"

왼쪽 다섯 명이 네 조각으로 부서졌다.

S1~S5는 10쌍 중 8쌍이 연결된 촘촘한 무리인데, 클리크 분석은 이것을 서로 겹치는 삼각형 네 개로 보고한다. 게다가 네 조각 모두 S5를 포함하니, 보고서만 봐서는 "S5를 중심으로 한 네 개의 모둠"처럼 읽힌다. 실제로는 한 덩어리인데 말이다. 이것이 완화가 필요한 이유다.

4. 완화 ① 거리를 늦춘다 — n-클리크 (Relaxation ①: Loosen the Distance — n-clique)

정의 (Definition)

n-클리크 (n-clique) — 정점 집합 SSnn-클리크라는 것은

dG(i,j)n모든 i,jS, ij d_G(i,j) \le n \quad \text{모든 } i,j \in S,\ i \ne j

를 만족한다는 뜻이다. 여기서 dGd_G전체 그래프 GG에서 잰 측지거리다(단원 1-6). n=1n=1이면 모든 쌍의 거리가 1, 즉 클리크와 같다. 보통 극대(maximal) nn-클리크를 찾는다 — 아무도 더 넣을 수 없는 것.

dGd_G의 아래첨자 GG가 핵심이다. 거리를 집단 SS 안에서 재는 것이 아니라 그래프 전체에서 잰다. 즉 iijj를 잇는 지름길이 SS 밖의 사람을 지나가도 된다. 이 한 글자 때문에 §5의 함정이 생긴다.

손 계산 ① — 측지거리를 WkW^k로 구한다 (Distances from Powers of W)

단원 1-6의 방법을 쓴다: d(i,j)d(i,j)Wk[i,j]>0W^k[i,j] > 0이 되는 가장 작은 kk다. 두 개만 손으로 해 보자.

(가) d(S1,S2)d(\text{S1},\text{S2}) — 먼저 k=1k=1: W[1,2]=0W[1,2]=0이므로 거리 1이 아니다. k=2k=2로 간다.

(W2)[1,2]=k=18W[1,k]W[k,2] (W^2)[1,2] = \sum_{k=1}^{8} W[1,k]\cdot W[k,2]

kkS1S2S3S4S5S6S7S8
W[1,k]W[1,k] (S1의 행)001110003
W[k,2]W[k,2] (S2의 열)001110003
W[1,k]W[k,2]W[1,k]W[k,2]0·0
=0
0·0
=0
1·1
=1
1·1
=1
1·1
=1
0·0
=0
0·0
=0
0·0
=0
3

(W2)[1,2]=0+0+1+1+1+0+0+0=3>0(W^2)[1,2] = 0+0+1+1+1+0+0+0 = 3 > 0이므로 d(S1,S2)=2d(\text{S1},\text{S2})=2다. 초록 세 칸이 각각 지름길 하나에 대응한다: S1→S3→S2 S1→S4→S2 S1→S5→S2. 서로 안 친한 S1과 S2 사이에 공통의 친구가 셋이나 있다.

(나) d(S1,S7)d(\text{S1},\text{S7})W[1,7]=0W[1,7]=0이니 1은 아니다. k=2k=2를 보자.

kkS1S2S3S4S5S6S7S8
W[1,k]W[1,k]001110003
W[k,7]W[k,7] (S7의 열)000001012
0·0
=0
0·0
=0
1·0
=0
1·0
=0
1·0
=0
0·1
=0
0·0
=0
0·1
=0
0

여덟 항이 전부 0이다. S1의 친구(S3, S4, S5)와 S7의 친구(S6, S8)가 한 명도 겹치지 않는다. 그래서 k=3k=3으로 간다. 이번에는 W2W^2의 1행을 먼저 구해 두자. WW의 1행이 (0,0,1,1,1,0,0,0)(0,0,1,1,1,0,0,0)이므로 (W2)[1,]=W[3,]+W[4,]+W[5,](W^2)[1,\cdot] = W[3,\cdot]+W[4,\cdot]+W[5,\cdot]다:

S1S2S3S4S5S6S7S8
W[3,]W[3,\cdot]11001000
W[4,]W[4,\cdot]11001000
W[5,]W[5,\cdot]11110100
(W2)[1,](W^2)[1,\cdot]33112100

이제 (W3)[1,7]=k(W2)[1,k]W[k,7](W^3)[1,7] = \sum_k (W^2)[1,k]\cdot W[k,7]:

kkS1S2S3S4S5S6S7S8
(W2)[1,k](W^2)[1,k]33112100
W[k,7]W[k,7]00000101
3·0
=0
3·0
=0
1·0
=0
1·0
=0
2·0
=0
1·1
=1
0·0
=0
0·1
=0
1

(W3)[1,7]=1>0(W^3)[1,7]=1 > 0d(S1,S7)=3d(\text{S1},\text{S7})=3. 유일한 초록 칸 k=6k=6이 그 경로를 알려 준다: (W2)[1,6]=1(W^2)[1,6]=1S1→S5→S6 하나뿐이고, 거기에 S6→S7을 붙이면 S1→S5→S6→S7이다.

WW의 측지거리 행렬 (The Distance Matrix)

같은 방법을 모든 쌍에 적용하면 (R 검증은 §12):

d(i,j)d(i,j)S1S2S3S4S5S6S7S8
S102111233
S220111233
S311021233
S411201233
S511110122
S622221011
S733332101
S833332110

지름은 3(빨간 칸), 평균 거리는 1.8571이다.

계산 요령 — 거리 행렬을 이진화하면 클리크 문제로 바뀐다 (Binarize and Reuse the Clique Algorithm)

핵심 아이디어 — 새 행렬 BB

B[i,j]={1(0<d(i,j)n)0(그 밖) B[i,j] = \begin{cases} 1 & (0 < d(i,j) \le n)\\ 0 & (\text{그 밖})\end{cases}

로 정의하면, GGnn-클리크 = BB의 클리크다. 정의가 "모든 쌍의 거리 ≤ nn"인데 BB에서는 그것이 "모든 쌍이 1"이 되기 때문이다. 따라서 지난 단원의 클리크 알고리즘을 그대로 재사용할 수 있다.

n=2n=2로 이진화하면 (거리 1과 2를 1로, 3을 0으로):

B[i,j]B[i,j]S1S2S3S4S5S6S7S8행합
S1011111005
S2101111005
S3110111005
S4111011005
S5111101117
S6111110117
S7000011013
S8000011103

BB의 간선 수는 40/2=2040/2 = 20개, 밀도 20/28=0.714320/28 = 0.7143. 원래 0.4286에서 크게 올랐다. 이제 BB에서 클리크를 찾는다.

왼쪽 위 6×6 블록(S1~S6)이 대각선만 빼고 전부 1이다(초록). 즉 {S1,S2,S3,S4,S5,S6}은 BB의 클리크 = WW2-클리크다. 15개 쌍을 원래 거리로 다시 확인해 보자.

S1S2S1S3S1S4S1S5S1S6S2S3S2S4S2S5
dd21112111
S2S6S3S4S3S5S3S6S4S5S4S6S5S6최대
dd22121212 ✓

15쌍 모두 2 이하 — 2-클리크가 맞다. 극대인가? S7을 넣으면 d(S1,S7)=3>2d(\text{S1},\text{S7})=3 > 2라서 실패, S8도 마찬가지다. 극대다.

BB에서 오른쪽 아래를 보면 {S5,S6,S7,S8}도 서로 전부 1이다. d(S5,S7)=d(S5,S8)=2d(\text{S5},\text{S7}) = d(\text{S5},\text{S8}) = 2, 나머지는 1. 여기에 S1을 넣으면 d(S1,S7)=3d(\text{S1},\text{S7})=3이라 실패. 이것도 극대 2-클리크다.

#극대 2-클리크크기클리크 분석과 비교
1{S1,S2,S3,S4,S5,S6}6네 조각으로 부서졌던 다섯 명이 한 덩어리로 합쳐졌다 — 게다가 S6까지 딸려 왔다
2{S5,S6,S7,S8}4오른쪽 삼각형에 S5가 붙었다

교실 읽기 — 2-클리크는 "친구의 친구"까지가 한 무리

거리 2는 "내 친구의 친구"다. 교실에서 정보나 소문이 퍼지는 실제 단위에 가깝다. S1과 S2는 서로 지명하지 않았지만 S3, S4, S5 세 명을 공유하고 있다. "같이 노는 무리"를 물어보면 이 둘은 같은 이름을 댈 가능성이 높다. 클리크가 놓친 이 관계를 2-클리크는 잡아낸다.

5. n-클리크의 함정 — 간선이 하나도 없는 2-클리크 (The n-clique Trap)

그런데 §4의 정의에 있던 아래첨자 GG가 문제를 일으킨다. 가장 작고 기억하기 좋은 반례는 6-사이클 C6C_6다. 여섯 명이 손을 잡고 둥글게 원을 만든 모양 — 간선은 C1–C2, C2–C3, C3–C4, C4–C5, C5–C6, C6–C1 여섯 개뿐이다.

6-사이클 C6에서 C1, C3, C5가 빨갛게 표시된 그림
6-사이클 C6C_6. 빨간 세 명 {C1, C3, C5}는 서로 간선이 하나도 없는데 2-클리크다.

C6C_6의 거리 행렬:

ddC1C2C3C4C5C6
C1012321
C2101232
C3210123
C4321012
C5232101
C6123210

{C1, C3, C5}의 세 쌍을 확인한다.

dd2\le 2?지름길그 지름길이 지나는 사람
C1–C32C1→C2→C3C2 — 집단 밖
C3–C52C3→C4→C5C4 — 집단 밖
C5–C12C5→C6→C1C6 — 집단 밖

세 쌍 모두 거리 2 이하 → {C1,C3,C5}는 2-클리크다. 그런데 이 세 명만 남기고 나머지를 지운 유도 부분그래프를 보면:

C1C3C5행합
C10000
C30000
C50000

간선이 0개다.

세 명은 서로 완전한 남남이고, 유도 부분그래프는 연결되어 있지도 않다 (성분 3개, 지름 \infty). 그런데도 정의상 어엿한 2-클리크다. 세 사람을 이어 주던 사람이 전부 집단 밖에 있기 때문이다. "집단"이라고 불러 놓고 정작 그 집단 안에는 아무 관계가 없다 — n-클리크의 가장 큰 약점이다.

같은 문제가 오늘의 WW에서도 약하게 나타난다. 2-클리크 {S1,…,S6}에서 S6이 집단 안에서 아는 사람은 S5 하나뿐이다. S6은 S1·S2·S3·S4 누구와도 직접 관계가 없는데, S5를 경유해 거리 2가 되므로 통과했다. "S6도 이 모둠의 일원"이라고 말하기엔 근거가 얇다.

교실 읽기 — 2-클리크로 모둠을 짜면 "모두와 두 다리 건너 아는" 학생이 들어온다. 그런데 그 다리가 전부 다른 반 학생이거나 그 모둠에 안 들어가는 학생이면, 정작 모둠 안에서 그 학생은 혼자다. 소외 학생 탐색에서 이 함정은 치명적이다 — 지표는 "소속됨"이라고 말하는데 현실은 반대일 수 있다.

6. n-클랜과 n-클럽 (n-clan and n-club)

§5의 함정을 막으려고 Mokken(1979)이 두 가지 보완 개념을 제안했다. 둘 다 "거리를 집단 안에서 다시 재라"는 요구다.

n-클랜 (n-clan)극대 nn-클리크이면서, 그 유도 부분그래프 G[S]G[S]의 지름도 nn 이하인 것:

diam(G[S])n \operatorname{diam}(G[S]) \le n

n-클럽 (n-club) — 처음부터 diam(G[S])n\operatorname{diam}(G[S]) \le n만 요구하고, 그 조건을 지키면서 더 키울 수 없는 집합. nn-클리크일 필요가 없다.

정의가 헷갈리니 무엇을 어디서 재는지 표로 못박아 두자.

개념조건거리를 재는 곳극대성
n-클리크모든 쌍 dG(i,j)nd_G(i,j)\le n전체 그래프 GGn-클리크 중 극대
n-클랜위 + diam(G[S])n\operatorname{diam}(G[S])\le n둘 다n-클리크 중 극대
n-클럽diam(G[S])n\operatorname{diam}(G[S])\le n유도 부분그래프 G[S]G[S]이 조건 아래 극대

손 계산 — {S1,…,S6}은 2-클랜인가 (Is It a 2-clan?)

S7, S8을 지우고 여섯 명만 남긴 유도 부분그래프에서 거리를 다시 잰다. 간선은 9개가 남는다(S5–S6 포함, S6–S7과 S6–S8은 잘려 나감).

dG[S]d_{G[S]}S1S2S3S4S5S6
S1021112
S2201112
S3110212
S4112012
S5111101
S6222210

최댓값이 2이므로 diam(G[S])=22\operatorname{diam}(G[S])=2 \le 22-클랜이다. §4의 전체 거리 행렬과 비교하면 여섯 명 사이의 값이 하나도 변하지 않았다. 지름길이 전부 이 여섯 명 안에 있었다는 뜻이다. 같은 계산을 {S5,S6,S7,S8}에 해도 유도 지름이 2 → 2-클랜. WW의 두 극대 2-클리크는 둘 다 2-클랜이다(§5의 함정에 걸리지 않았다).

반대로 C6C_6에서는 여덟 개의 극대 2-클리크 중

극대 2-클리크유도 간선 수연결?유도 지름2-클랜?
{C1,C2,C3}22
{C2,C3,C4}22
{C3,C4,C5}22
{C4,C5,C6}22
{C5,C6,C1}22
{C6,C1,C2}22
{C1,C3,C5}0아니오\infty아니오 ✗
{C2,C4,C6}0아니오\infty아니오 ✗

여덟 개 중 여섯 개가 2-클랜이고, 문제의 두 개가 정확히 걸러진다. n-클랜은 n-클리크의 함정을 고치는 필터다.

포함 관계 — 정의상 유도 부분그래프의 거리는 전체 그래프의 거리보다 짧아질 수 없다(경로가 줄었으니까): dG(i,j)dG[S](i,j)d_G(i,j) \le d_{G[S]}(i,j). 따라서 diam(G[S])n\operatorname{diam}(G[S])\le n이면 자동으로 모든 쌍이 dGnd_G \le n이다. 그래서 모든 nn-클랜은 nn-클리크이고, 또 모든 nn-클랜은 nn-클럽이다. 셋의 관계는 nn-클랜 \subseteq nn-클리크, nn-클랜 \subseteq nn-클럽.

7. 완화 ② 빠진 연결을 허용한다 — k-플렉스 (Relaxation ②: Allow Absences — k-plex)

n-클리크는 "거리"를 늦춰서 문제가 생겼다. 그러면 거리는 그대로 두고 빠진 간선 몇 개를 봐주는 쪽으로 가면 어떨까. Seidman & Foster(1978)의 k-플렉스다.

k-플렉스 (k-plex) — 크기 s=Ss = |S|인 집합 SSkk-플렉스라는 것은, 모든 iSi \in S에 대해

degS(i)  =  jSW[i,j]    sk \deg_S(i) \;=\; \sum_{j \in S} W[i,j] \;\ge\; s - k

를 만족한다는 뜻이다. 여기서 degS(i)\deg_S(i)집단 SS 안에서만 센 차수SS 밖의 친구는 세지 않는다.

"k1k-1명까지 몰라도 된다"로 바꿔 읽기 (Reading It as "May Miss k−1")

SS 안에서 ii가 만날 수 있는 상대는 자기 자신을 뺀 s1s-1명이다. 그중 모르는 사람 수

(s1)degS(i)    (s1)(sk)  =  k1 (s-1) - \deg_S(i) \;\le\; (s-1) - (s-k) \;=\; k-1

각자 최대 k1k-1명까지 몰라도 된다. 이 형태가 훨씬 외우기 쉽다.

kk필요 조건사람 말로비고
1degS(i)s1\deg_S(i)\ge s-1아무도 빠뜨리면 안 됨= 클리크
2degS(i)s2\deg_S(i)\ge s-2각자 한 명씩은 몰라도 됨실무에서 가장 많이 쓴다
3degS(i)s3\deg_S(i)\ge s-3각자 두 명씩 몰라도 됨ss가 작으면 너무 헐거워진다

"각자"가 중요하다. "집단 전체에서 빠진 간선이 k1k-1개"가 아니다. 모든 사람이 각자 k1k-1명까지 몰라도 된다는 뜻이므로, 빠진 간선 총수는 최대 s(k1)/2s(k-1)/2개까지 갈 수 있다. s=5,k=2s=5, k=2면 최대 5×1/2=2.55\times 1/2 = 2.5 → 2개다. 오늘 WW의 왼쪽이 정확히 이 경우다.

손 계산 — {S1,S2,S3,S4,S5}는 2-플렉스인가 (Hand Calculation)

먼저 다섯 명만 남긴 유도 인접행렬을 쓴다(§2의 WW에서 1~5행·1~5열을 잘라낸 것).

S1S2S3S4S5degS(i)\deg_S(i)
S1001113
S2001113
S3110013
S4110013
S5111104

행합을 항 하나도 빼지 않고 전개하면:

iidegS(i)=jSW[i,j]\deg_S(i) = \sum_{j\in S} W[i,j] 전개sk=52=3s-k=5-2=3 이상?모르는 사람 수
(s1)degS(i)(s-1)-\deg_S(i)
S1W[1,1]+W[1,2]+W[1,3]+W[1,4]+W[1,5]W[1,1]+W[1,2]+W[1,3]+W[1,4]+W[1,5] =0+0+1+1+1= 0+\color{#b91c1c}{0}+1+1+13✓ 3 ≥ 343=4-3=1 (S2)
S2W[2,1]+W[2,2]+W[2,3]+W[2,4]+W[2,5]W[2,1]+W[2,2]+W[2,3]+W[2,4]+W[2,5] =0+0+1+1+1= \color{#b91c1c}{0}+0+1+1+13✓ 3 ≥ 343=4-3=1 (S1)
S3W[3,1]+W[3,2]+W[3,3]+W[3,4]+W[3,5]W[3,1]+W[3,2]+W[3,3]+W[3,4]+W[3,5] =1+1+0+0+1= 1+1+0+\color{#b91c1c}{0}+13✓ 3 ≥ 343=4-3=1 (S4)
S4W[4,1]+W[4,2]+W[4,3]+W[4,4]+W[4,5]W[4,1]+W[4,2]+W[4,3]+W[4,4]+W[4,5] =1+1+0+0+1= 1+1+\color{#b91c1c}{0}+0+13✓ 3 ≥ 343=4-3=1 (S3)
S5W[5,1]+W[5,2]+W[5,3]+W[5,4]+W[5,5]W[5,1]+W[5,2]+W[5,3]+W[5,4]+W[5,5] =1+1+1+1+0= 1+1+1+1+04✓ 4 ≥ 344=4-4=0 (없음)

판정 — 다섯 명 전원이 degS3\deg_S \ge 3을 만족한다. {S1,S2,S3,S4,S5}는 2-플렉스다.

1-플렉스(=클리크)는 아니다. 1-플렉스라면 degS51=4\deg_S \ge 5-1 = 4여야 하는데 S1~S4가 3이라 실패한다. 따라서 정확히 2-플렉스다. 빠진 간선은 딱 두 개(S1–S2, S3–S4)이고, 그 둘이 서로 다른 사람들을 건드리기 때문에 아무도 두 명을 놓치지 않는다.

S5가 0명을 놓친 것도 의미가 있다. S5는 이 집단의 완전 참여자다. 2-플렉스는 이런 사람과 "한 명 놓친 사람"을 같은 집단으로 묶어 준다.

대조 — S6을 넣으면 무너진다 (Contrast: Adding S6 Breaks It)

2-클리크는 S6까지 넣어 여섯 명을 만들었다. k-플렉스는 어떨까? {S1,,S6}\{S1,\dots,S6\}의 유도 차수를 다시 센다. s=6s=6이 되었으니 2-플렉스 기준은 degS62=4\deg_S \ge 6-2 = 4다.

iidegS(i)\deg_S(i) 전개 (6개 항)4 이상?
S10+0+1+1+1+00+0+1+1+1+\color{#b91c1c}{0}3
S20+0+1+1+1+00+0+1+1+1+\color{#b91c1c}{0}3
S31+1+0+0+1+01+1+0+0+1+\color{#b91c1c}{0}3
S41+1+0+0+1+01+1+0+0+1+\color{#b91c1c}{0}3
S51+1+1+1+0+11+1+1+1+0+15
S60+0+0+0+1+0\color{#b91c1c}{0}+\color{#b91c1c}{0}+\color{#b91c1c}{0}+\color{#b91c1c}{0}+1+01✗✗

최솟값이 1(S6)이다. sk=1s-k = 1에서 k=61=5k = 6-1 = 5. {S1,,S6}\{S1,\dots,S6\}5-플렉스다 — 즉 "각자 4명까지 몰라도 됨"을 허용해야 겨우 성립한다. 6명 집단에서 4명을 몰라도 된다면 사실상 아무 조건도 아니다.

k-플렉스가 §5의 함정을 자동으로 막는 이유

k-플렉스는 거리가 아니라 집단 안의 간선을 센다. C6C_6의 {C1,C3,C5}는 유도 차수가 (0,0,0)이므로 sk=0s-k=0, k=3k=3 — 3-플렉스일 뿐이다 (3명 집단에서 2명을 몰라도 된다는 뜻이니 무의미하다). 2-플렉스로는 절대 통과하지 못한다. 바깥 사람을 빌려 올 수 없다는 점이 k-플렉스의 장점이다.

8. kk는 어디까지 봐줘도 되는가 — k<(s+2)/2k < (s+2)/2 (How Large Can k Be?)

kk를 키우면 집단은 커지지만 언젠가 "집단"이라 부를 수 없게 된다. 경계선이 어디인지 Seidman & Foster가 정확히 밝혔다.

정리 (Seidman & Foster, 1978) — 크기 sskk-플렉스 SS에 대해

k<s+22diam(G[S])2 k < \frac{s+2}{2} \quad\Longrightarrow\quad \operatorname{diam}(G[S]) \le 2

즉 이 조건을 만족하면 집단 안 임의의 두 사람은 집단 내부의 공통 친구를 통해 두 걸음 안에 이어진다. n-클랜의 성질이 공짜로 따라온다.

왜 그런가 — 비둘기집 원리로 손 증명 (Why: A Pigeonhole Argument)

SS 안에서 서로 안 친한 두 사람 i,ji, j를 잡자(친하면 거리 1이니 볼 필요가 없다). 이 둘 사이에 SS 안의 공통 친구가 반드시 있음을 보이면 된다.

단계논증근거
iiSS 안에 친구가 sks-k명 이상 있다k-플렉스의 정의
그 친구들 중에 jj는 없다i,ji,j는 서로 안 친하다고 잡았다
따라서 ii의 친구는 전부 S{i,j}S \setminus \{i,j\} 안에 있다 — sks-k명 이상①+②
jj에 대해서도 똑같이 sks-k명 이상대칭
그런데 S{i,j}S\setminus\{i,j\}에는 s2s-2밖에 없다두 명을 뺐으니까
(sk)+(sk)>s2(s-k)+(s-k) > s-2이면 겹칠 수밖에 없다비둘기집 원리

⑥의 부등식을 풀면:

2(sk)>s2    2s2k>s2    s+2>2k    k<s+22 2(s-k) > s-2 \;\Longleftrightarrow\; 2s-2k > s-2 \;\Longleftrightarrow\; s+2 > 2k \;\Longleftrightarrow\; k < \frac{s+2}{2}

겹치는 사람이 바로 iijj의 공통 친구이고, 그 사람은 SS 안에 있다. 따라서 i→공통친구→j로 두 걸음 — 유도 지름 2가 보장된다. ∎

오늘의 집단들에 적용 (Applying the Test)

집단 SSss유도 차수최소kks+22\frac{s+2}{2}k<s+22k < \frac{s+2}{2}?실제 유도 지름
{S1,S3,S5}32,2,2212.5✓ 보장됨1 (클리크)
{S1,S2,S3,S4,S5}53,3,3,3,4323.5✓ 보장됨2
{S5,S6,S7,S8}41,3,2,2133.0✗ 보장 없음2 (우연히 좋다)
{S1,…,S6}63,3,3,3,5,1154.0✗ 보장 없음2 (우연히 좋다)

정리는 충분조건일 뿐 필요조건이 아니다. 아래 두 줄은 조건을 어겼는데도 실제 유도 지름이 2다. "k<(s+2)/2k < (s+2)/2를 통과하면 반드시 지름 2"는 참이지만, "통과 못 하면 지름이 크다"는 거짓이다. 정리가 말해 주는 것은 따로 확인하지 않아도 되는 안전 구간이지, 탈락 판정이 아니다.

교실 실무 기준k=2k=2로 두고 s3s \ge 3이면 항상 2<(3+2)/2=2.52 < (3+2)/2=2.5이므로 2-플렉스는 크기와 상관없이 늘 유도 지름 2가 보장된다. 그래서 교우관계 자료에서는 대체로 2-플렉스부터 본다. k=3k=3을 쓰려면 3<(s+2)/23 < (s+2)/2, 즉 s>4s > 4 — 다섯 명 이상일 때만 안전하다.

9. 완화 ③ 안쪽 친구 수만 요구한다 — k-코어 (Relaxation ③: Require Only Inside Friends — k-core)

k-코어 (k-core) — 모든 정점의 내부 차수가 kk 이상극대 부분그래프:

degS(i)  =  jSW[i,j]    k모든 iS \deg_S(i) \;=\; \sum_{j\in S} W[i,j] \;\ge\; k \qquad \text{모든 } i \in S

코어 번호 (coreness) c(v)c(v) — 정점 vv가 속하는 가장 큰 kk.

k-플렉스와 무엇이 다른가 (How It Differs from k-plex)

부등식의 오른쪽만 다르다. 그런데 그 차이가 전부다.

k-플렉스k-코어
조건degS(i)sk\deg_S(i) \ge s-kdegS(i)k\deg_S(i) \ge k
기준이 ss에 의존하나 — 집단이 커지면 요구도 커진다아니오kk는 고정
집단이 커지면점점 어려워진다점점 쉬워진다
세는 것빠진 사람 수 (k1\le k-1)있는 친구 수 (k\ge k)
해가 여러 개인가 — 겹치는 것이 많다아니오 — kk마다 유일
계산 비용비싸다 (NP-난해)싸다 — 벗겨내기 한 번

"해가 유일하다"는 성질은 증명이 짧다. S1S_1S2S_2가 각각 조건을 만족하면 S1S2S_1 \cup S_2의 어떤 정점도 원래 있던 쪽의 친구를 그대로 갖고 있으므로 여전히 degk\deg \ge k다. 즉 합집합도 k-코어 조건을 만족한다 → 모든 것을 합친 것이 유일한 극대해다. k-플렉스에는 이 성질이 없다(합치면 ss가 커져서 기준도 올라간다).

손 계산 — 벗겨내기로 3-코어 찾기 (Hand Calculation: Peeling)

벗겨내기 알고리즘 (peeling) — ① 현재 남은 집합에서 각자의 내부 차수를 센다. ② kk보다 작은 사람을 전부 지운다. ③ 지운 사람이 있으면 ①로 돌아간다. 아무도 안 지워지면 남은 것이 kk-코어다. 지울 때마다 남은 사람의 차수가 줄어든다는 것이 이 알고리즘의 핵심이다.

WW에서 k=3k=3으로 실행한다.

단계 1 — 전체 8명. 차수는 §2의 표에서 그대로 가져온다.

iiS1S2S3S4S5S6S7S8
deg(i)\deg(i)33335322
3 이상?

S7, S8을 지운다. 남은 사람: {S1, S2, S3, S4, S5, S6}.

단계 2 — 여섯 명 안에서 차수를 다시 센다. S7·S8이 사라졌으니 그들과 이어져 있던 사람의 차수가 줄어든다.

ii남은 여섯 명 안의 친구degS(i)\deg_S(i)단계 1과 비교3 이상?
S1S3, S4, S533 → 3 (그대로)
S2S3, S4, S533 → 3 (그대로)
S3S1, S2, S533 → 3 (그대로)
S4S1, S2, S533 → 3 (그대로)
S5S1, S2, S3, S4, S655 → 5 (그대로)
S6S5 하나 — S7, S8이 사라졌다13 → 1 (2 감소)

S6을 지운다. 남은 사람: {S1, S2, S3, S4, S5}.

단계 3 — 다섯 명 안에서 다시 센다. 이 값은 §7의 표에서 이미 구했다.

iiS1S2S3S4S5
degS(i)\deg_S(i)33334
3 이상?

결과 — 아무도 지워지지 않는다. 알고리즘 종료. WW의 3-코어 = {S1, S2, S3, S4, S5} (5명).

나머지 kk(The Other Values of k)

kk벗겨내기 과정k-코어크기
1차수 0인 사람이 없다 → 아무도 안 지워짐{S1,…,S8}8
2최소 차수가 2(S7, S8)라 여전히 아무도 안 지워짐{S1,…,S8}8
3S7, S8 → S6 (위의 손 계산){S1,…,S5}5
4차수 4 미만인 7명(S5 제외)을 한 번에 제거 → 남은 S5는 차수 0 → 제거{ } (공집합)0

따라서 각자의 코어 번호는:

S1S2S3S4S5S6S7S8
차수 did_i33335322
코어 번호 c(i)c(i)33333222

10. 코어 번호는 차수가 아니다 (Coreness Is Not Degree)

§9의 마지막 표에서 노란 두 칸이 오늘의 가장 중요한 교훈이다.

반전 ① — S6: 차수는 S1~S4와 같은데 코어는 낮다 (Same Degree, Lower Coreness)

ii차수친구 명단그 친구들의 코어 번호코어
S13S3, S4, S53, 3, 3 — 전부 튼튼3
S63S5, S7, S83, 2, 2둘이 약하다2

차수만 보면 S1과 S6은 똑같이 3이다. 그런데 친구의 질이 다르다. S6의 친구 셋 중 둘(S7, S8)이 차수 2짜리 약한 사람이라, 그 둘이 무너지는 순간 S6은 친구 1명만 남는다. S1의 친구는 셋 다 3-코어 소속이라 아무도 무너지지 않는다.

연쇄 붕괴 (cascade) — 벗겨내기의 본질은 이것이다. "내가 몇 명과 이어져 있나"가 아니라 "내 친구들이 버텨 주는가"를 재귀적으로 묻는다. 차수는 한 걸음만 보고, 코어 번호는 연쇄 반응이 멈출 때까지 본다.

반전 ② — S5: 차수가 제일 높은데 코어는 남들과 같다 (Highest Degree, Ordinary Coreness)

S5는 차수 5로 WW에서 가장 인기가 많다. 그런데 코어 번호는 3 — S1~S4와 똑같다. S5의 친구 5명 중 S6이 3-코어에서 탈락했기 때문에, 3-코어 안에서 S5의 차수는 4로 줄어든다. 4-코어가 되려면 S5뿐 아니라 나머지 넷도 전부 내부 차수 4를 확보해야 하는데 S1~S4는 3이 한계다.

코어 번호는 개인 지표가 아니라 집단 지표다. "내가 얼마나 인기 있나"가 아니라 "내가 얼마나 촘촘한 집단에 속해 있나"를 잰다. 아무리 친구가 많아도 그 친구들끼리 안 뭉쳐 있으면 코어 번호는 오르지 않는다. 반대로 나 자신은 친구가 딱 kk명이어도 그 집단이 튼튼하면 kk-코어에 남는다.

항상 성립하는 부등식c(v)dvc(v) \le d_v. vvkk-코어에 있다면 그 안에서 이미 kk명 이상과 이어져 있고, 그 kk명은 전체 그래프에서도 vv의 친구이므로 dvkd_v \ge k다. 따라서 코어 번호가 차수를 넘는 일은 없다. 반대 방향(차수는 큰데 코어는 낮다)만 생긴다.

11. 세 가지 완화 비교 (Comparing the Three Relaxations)

같은 네트워크 WW를 세 방법으로 분석한 결과를 한 표에 놓는다.

방법결과크기S6 포함?판정 기준약점
클리크{S1,S3,S5}, {S1,S4,S5},
{S2,S3,S5}, {S2,S4,S5}, {S6,S7,S8}, {S5,S6}
3모든 쌍 W[i,j]=1W[i,j]=1너무 잘게 쪼개진다
2-클리크{S1,…,S6}, {S5,S6,S7,S8}6dG(i,j)2d_G(i,j)\le 2바깥 사람을 빌려 온다 (§5)
2-클랜{S1,…,S6}, {S5,S6,S7,S8}6위 + diam(G[S])2\operatorname{diam}(G[S])\le 2계산이 두 단계
2-플렉스{S1,S2,S3,S4,S5}5degS(i)s2=3\deg_S(i)\ge s-2 = 3계산이 비싸다 (NP-난해)
3-코어{S1,S2,S3,S4,S5}5degS(i)3\deg_S(i)\ge 3집단이 크면 헐거워진다

2-플렉스와 3-코어가 같은 답을 냈지만 이유는 전혀 다르다.

둘 다 "내부 차수 3 이상"을 요구했는데, 2-플렉스에서는 3=sk=523 = s - k = 5 - 2집단 크기 ss에서 나온 값이고, 3-코어에서는 3=k3 = k내가 정한 상수다. 집단 크기가 5일 때 우연히 겹쳤을 뿐이다. ss가 달라지면 즉시 갈라진다 — {S6,S7,S8} 삼각형은 1-플렉스(=클리크)지만 코어 번호는 2에 그치고, 가라테 클럽에서는 4-코어가 10명인데 그 안의 최대 2-플렉스는 6명이다(§13).

세 축이 서로 다른 것을 잡는다 (Three Different Axes)

묻는 질문이럴 때 쓴다
n-클리크 / 클랜"서로 얼마나 가까운가?"소문·정보가 도달하는 범위, 영향권을 볼 때
k-플렉스"거의 전원이 서로 아는 단단한 무리인가?"모둠·패거리를 찾을 때. 자료의 잡음에 견디는 클리크
k-코어"누가 주변부이고 누가 중심부인가?"학급 전체를 층으로 나눌 때. 34명이든 340명이든 순식간에 계산된다

12. R 검증 (R Verification)

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")

## ── ① n-클리크: 거리 행렬을 n 이하에서 이진화한 뒤 클리크를 찾는다 (§4) ──
D <- distances(gW)
D[1, ]
S1 S2 S3 S4 S5 S6 S7 S8
 0  2  1  1  1  2  3  3          ← §4 손 계산과 일치

g2 <- graph_from_adjacency_matrix(((D <= 2) & (D > 0)) * 1, mode = "undirected")
lapply(max_cliques(g2), function(v) nm[sort(as.integer(v))])
[1] "S5" "S6" "S7" "S8"
[1] "S1" "S2" "S3" "S4" "S5" "S6"   ← 극대 2-클리크 2개

## ── n-클랜 판정: 유도 부분그래프의 지름 (§6) ──
diameter(induced_subgraph(gW, 1:6))     [1] 2   → 2-클랜
diameter(induced_subgraph(gW, 5:8))     [1] 2   → 2-클랜

## ── ② k-플렉스: 유도 부분행렬의 행합이 s-k 이상인가 (§7) ──
rowSums(W[1:5, 1:5])                    S1 S2 S3 S4 S5
                                         3  3  3  3  4   ← 전부 ≥ 5-2 = 3 → 2-플렉스
rowSums(W[1:6, 1:6])                    S1 S2 S3 S4 S5 S6
                                         3  3  3  3  5  1   ← S6이 1 → 5-플렉스에 불과

## ── ③ k-코어: 벗겨내기는 coreness() 한 줄 (§9) ──
degree(gW)                              S1 S2 S3 S4 S5 S6 S7 S8
                                         3  3  3  3  5  3  2  2
coreness(gW)                            S1 S2 S3 S4 S5 S6 S7 S8
                                         3  3  3  3  3  2  2  2   ← S6만 2 (§10 반전)

기억할 R 함수 세 개

  • distances(g) → 거리 행렬. 이진화 후 max_cliques()n-클리크
  • rowSums(W[s, s]) → 유도 차수. sks-k와 비교해 k-플렉스
  • coreness(g)k-코어. 벗겨내기를 직접 짤 필요가 없다

igraph에 k-플렉스 함수는 없다. k-플렉스 찾기는 NP-난해라서 표준 함수가 제공되지 않는다. 작은 네트워크(n20n \le 20 정도)는 부분집합 전수 검사로 충분하고, 큰 자료는 statnet 계열이나 별도 패키지를 써야 한다. 반면 coreness()는 간선 수에 거의 선형이라 몇만 명짜리 네트워크에서도 즉시 끝난다.

13. 실전 — 가라테 클럽의 코어 분해 (In Practice: Core Decomposition of the Karate Club)

단원 3-1에서 가라테 클럽의 극대 클리크가 36개나 나와 읽기 어려웠다. 같은 자료를 k-코어로 보면 34명이 딱 네 층으로 정리된다.

가라테 클럽 34명을 코어 번호별로 색칠한 그림
가라테 클럽의 코어 분해. 원의 크기와 색이 코어 번호, 주황 굵은 선이 4-코어 내부 간선 25개. 왼쪽 아래 흰 점 하나가 12번(코어 1).

벗겨내기 3단계 (Three Peeling Rounds)

단계남은 인원내부 차수 4 미만이라 제거되는 사람제거 수
1345, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 2918
2166, 7, 28, 30, 32 — 1단계에서는 차수 4 이상이었는데, 이웃이 사라져 미달이 됨5
31124 — 2단계에서 28번과 30번을 잃고 미달1
410아무도 미달이 아님 → 종료0

2단계와 3단계가 연쇄 붕괴다. 전체 차수만 봤다면 6, 7, 28, 30, 32, 24번은 모두 4 이상이라 살아남았어야 한다. 그러나 이웃이 먼저 무너지면 같이 무너진다.

학생전체 차수이웃 명단그중 4-코어에 남은 사람코어
3261, 25, 26, 29, 33, 341, 33, 34 — 3명뿐3
24526, 28, 30, 33, 3433, 34 — 2명뿐3
30424, 27, 33, 3433, 34 — 2명뿐3

32번이 가장 극적이다. 차수 6은 34명 중 5위권인데 코어 번호는 3이다. 이웃 여섯 중 25, 26, 29번이 주변부라 함께 떨어졌다. S6이 S7·S8과 함께 떨어진 것(§10)과 정확히 같은 구조다.

네 층의 명단 (The Four Layers)

코어인원명단읽기
1112차수 1 — 1번 한 사람만 알고 있다. 가장 바깥
21110, 13, 15, 16, 17, 18, 19, 21, 22, 23, 27주변부 — 대부분 차수 2
3125, 6, 7, 11, 20, 24, 25, 26, 28, 29, 30, 32중간층 — 여기에 32, 24, 30번이 있다
4101, 2, 3, 4, 8, 9, 14, 31, 33, 34핵심층 — 내부 간선 25개, 밀도 0.5556

4-코어 10명의 내부 밀도 0.5556은 전체 밀도 0.139의 네 배다. 같은 자료를 보고 "34명 중 이 10명이 조직의 뼈대"라고 한 줄로 말할 수 있게 된다.

단원 3-1의 클리크와 맞춰 보기 (Cross-check with Unit 3-1)

단원 3-1에서 찾은 것4-코어에 포함?이유
5-클리크 {1,2,3,4,8}✓ 전부크기 5 클리크는 4-코어 조건(내부 차수 4)을 이미 만족
5-클리크 {1,2,3,4,14}✓ 전부같은 이유
4-클리크 {9,31,33,34}✓ 전부서로 3명씩 + 33·34가 바깥에도 이어져 있어 4를 채운다
4-클리크 {24,30,33,34}✗ 24, 30 탈락24·30은 이 클리크 밖에 4-코어 이웃이 없다

4-코어 10명 = {1,2,3,4,8} ∪ {1,2,3,4,14} ∪ {9,31,33,34}이다. 클리크 36개가 뒤엉켜 있던 자리에서 k-코어는 핵심 세 덩어리를 자동으로 골라 합쳐 주었다.

약속했던 확인 — {1,2,3,4,8,14}는 2-플렉스인가 (The Promised Check)

§1에서 "8번과 14번 사이에 간선이 없어서 두 개로 쪼개졌다"고 했다. k-플렉스가 이 둘을 합쳐 주는지 손으로 확인하자. s=6s=6, 2-플렉스 기준은 degS62=4\deg_S \ge 6-2 = 4다.

1234814degS\deg_S4 이상?모르는 사람
101111150명
210111150명
311011150명
411101150명
811110041명 (14)
1411110041명 (8)

확인 — 여섯 명 전원이 degS4\deg_S \ge 4를 만족한다. {1, 2, 3, 4, 8, 14}는 2-플렉스다. 빠진 쌍은 8–14 단 하나.

§8의 정리도 통과한다: k=2<(6+2)/2=4k=2 < (6+2)/2 = 4 → 유도 지름 2 보장. 실제로도 2다(8과 14는 1, 2, 3, 4 아무나 거치면 두 걸음). 전수 검사로 확인하면 4-코어 10명 안에서 가장 큰 2-플렉스가 바로 이 여섯 명이고 유일하다.

§1의 질문에 답이 나왔다. 클리크가 {1,2,3,4,8}과 {1,2,3,4,14}로 쪼갠 것을 2-플렉스는 {1,2,3,4,8,14} 한 덩어리로 복원한다. "간선 하나가 빠졌을 뿐"이라는 우리의 직관을 정확히 수식으로 옮긴 것이 k-플렉스다.

반대 방향의 경고 — 가라테의 2-클리크 (A Warning: 2-cliques in Karate)

방법집단 수최대 크기34명 중 비율
극대 클리크36515%
4-코어11029%
극대 2-클리크121853%

가라테 클럽에서 모든 쌍의 61.14%가 이미 거리 2 이내다(지름 5, 평균 거리 2.4082). 그래서 2-클리크의 최대 크기가 18명 — 학급의 절반이 넘는다. "이 18명이 한 집단"이라는 말은 아무것도 알려 주지 않는다.

완화의 정도는 네트워크의 지름에 맞춰야 한다. 평균 거리가 2.4인 네트워크에서 n=2n=2를 쓰면 거의 전원이 통과한다. 지름이 작고 촘촘한 자료에서는 n-클리크가 무의미해지고, k-플렉스나 k-코어가 훨씬 낫다. 반대로 지름이 크고 성긴 자료(예: 여러 반이 섞인 학년 전체)에서는 n-클리크가 유용하다. 지표를 고르기 전에 지름과 평균 거리를 먼저 보라.

14. 교실 적용 (Classroom Application)

① 모둠 편성 — 2-플렉스를 쓴다

교우관계 설문에서 5~6명 모둠을 만들 때 클리크를 쓰면 "완벽하게 서로 다 친한 5명"이 거의 안 나온다(가라테에서도 34명 중 최대가 5명이었다). 2-플렉스는 "각자 한 명씩은 아직 안 친해도 된다"를 허용하므로 현실적인 크기가 나온다. 게다가 §8의 정리로 모둠 안에서 두 걸음이면 다 이어진다는 것이 보장된다 — 모둠 안에 완전히 고립된 학생이 생기지 않는다는 뜻이다.

② 소외 학생 찾기 — 코어 번호가 낮은 순으로

코어 번호 1~2인 학생부터 본다. 가라테의 12번(코어 1)은 1번 한 사람만 알고 있다. 중요한 것은 차수만 봐서는 못 찾는 학생이 있다는 점이다 — 32번은 친구가 6명이나 되는데 코어 번호는 3이다. 그 6명이 서로 안 뭉쳐 있어서, 32번은 어느 무리에도 확실히 속하지 못한다. "친구는 많은데 낄 데가 없는" 학생이 실제로 존재하고, 코어 번호는 그것을 잡아낸다. 차수와 코어 번호의 차이가 큰 학생 명단을 따로 뽑아 보라.

③ 학급 구조 파악 — 코어 분해로 층 나누기

34명이 (1, 11, 12, 10)명의 네 층으로 나뉘었다. 학기 초와 학기 말 두 번 조사해서 같은 학생의 코어 번호가 어떻게 움직였는지 보면 개입의 효과를 숫자로 볼 수 있다. 코어 번호가 오르려면 이미 코어에 있는 사람들과 연결되어야 한다 — 주변부끼리 아무리 이어 줘도 안 오른다(§16 문제 2에서 확인한다). 그래서 "소외 학생끼리 한 모둠"은 최악의 배치다.

④ 정보 확산 예측 — n-클리크는 이때 쓴다

"이 소문이 하루 만에 누구까지 갈까"를 물으면 거리가 답이다. 다만 §13의 경고대로 학급 규모(20~30명)에서는 2-클리크가 거의 전원이 되기 쉽다. 학급 하나가 아니라 학년 전체나 여러 학교처럼 지름이 큰 자료에서 쓰는 것이 맞다. 학급 안에서 쓸 거라면 §6의 n-클랜까지 확인해서 "바깥 사람을 빌려 온 가짜 집단"을 걸러 내야 한다.

상황추천이유
모둠 짜기2-플렉스현실적 크기 + 지름 2 보장 + 잡음에 강함
소외 학생 발굴k-코어차수가 놓치는 학생을 잡는다. 계산도 즉시
학급 층 나누기k-코어해가 유일하고 전원이 정확히 한 층에 배정된다
정보 확산 범위n-클랜n-클리크는 §5의 함정 확인이 필수
진짜 패거리 확인클리크엄격함이 필요한 순간도 있다

15. 연습문제 (Exercises)

문제 1. WW의 오른쪽 집단 {S5, S6, S7, S8}을 판정하라.

  1. 네 명의 유도 인접행렬을 그리고, 각 행합 degS(i)\deg_S(i)4개 항을 전부 써서 구하라. 이 집단은 몇-플렉스인가?
  2. §8의 정리 k<(s+2)/2k < (s+2)/2를 적용하면 유도 지름 2가 보장되는가? 그리고 실제 유도 지름은 얼마인가?
  3. 이 집단은 2-클리크인가? 6개 쌍의 거리를 §4의 거리 행렬에서 읽어 확인하라.
  4. 2-클랜인가?

힌트 — S5는 이 집단 안에서 몇 명과 이어져 있는가?
먼저 직접 풀고 §16 해설과 맞춰 볼 것.

문제 2. WW에 간선 S1–S6S2–S6 두 개를 추가한 것을 WW'라 하자. (교실로 치면 S6을 왼쪽 무리의 두 명과 새로 이어 준 것이다.)

  1. WW'에서 여덟 명의 차수를 모두 구하라.
  2. 벗겨내기WW'의 3-코어를 구하라. 각 단계에서 누가 왜 제거되는지 쓸 것.
  3. S6의 코어 번호는 얼마가 되었나? WW에서와 비교해 달라졌는지 설명하라.
  4. 만약 대신 S1–S2와 S3–S4를 추가해서 왼쪽 다섯 명을 완전한 클리크로 만들었다면 S6의 코어 번호는 어떻게 되겠는가? 이유와 함께 답하라.

힌트 — 벗겨내기는 "누가 먼저 떨어지는가"의 문제다. S6이 살아남으려면 S7, S8이 떨어진 뒤에도 친구가 3명 남아 있어야 한다.
먼저 직접 풀고 §16 해설과 맞춰 볼 것.

16. 해설과 답 (Solutions)

문제 1 해설 (Solution 1)

(1) 무엇을 잘라내는가. §2의 8×8 행렬 WW에서 5, 6, 7, 8번 행과 5, 6, 7, 8번 열만 남긴다. S1~S4와의 연결은 전부 버린다 — 유도 부분그래프란 그런 뜻이다.

S5S6S7S8
S50100
S61011
S70101
S80110

버려진 연결에 주의하라. S5는 원래 차수 5(S1, S2, S3, S4, S6)였지만 그중 네 명이 집단 밖이라 잘려 나갔다. 이것이 k-플렉스와 n-클리크의 결정적 차이다.

iidegS(i)=jSW[i,j]\deg_S(i)=\sum_{j\in S} W[i,j] — 4개 항 전개왜 그 값인가
S5W[5,5]+W[5,6]+W[5,7]+W[5,8]W[5,5]+W[5,6]+W[5,7]+W[5,8] =0+1+0+0=0+1+\color{#b91c1c}{0}+\color{#b91c1c}{0}1집단 안 친구는 S6 하나. S1~S4는 잘려 나갔다
S6W[6,5]+W[6,6]+W[6,7]+W[6,8]W[6,5]+W[6,6]+W[6,7]+W[6,8] =1+0+1+1=1+0+1+13S5, S7, S8 — 원래 차수 3이 그대로 유지
S7W[7,5]+W[7,6]+W[7,7]+W[7,8]W[7,5]+W[7,6]+W[7,7]+W[7,8] =0+1+0+1=\color{#b91c1c}{0}+1+0+12S6, S8. S5와는 원래 간선이 없다
S8W[8,5]+W[8,6]+W[8,7]+W[8,8]W[8,5]+W[8,6]+W[8,7]+W[8,8] =0+1+1+0=\color{#b91c1c}{0}+1+1+02S6, S7. 대칭

s=4s=4이고 최솟값은 mindegS=1\min \deg_S = 1(S5)이다. sk1s-k \le 1을 만족하는 가장 작은 kk를 찾으면 k41=3k \ge 4-1 = 3.

답 (1){S5,S6,S7,S8}은 3-플렉스다. 2-플렉스는 아니다 — 2-플렉스라면 degS42=2\deg_S \ge 4-2 = 2여야 하는데 S5가 1이라 실패한다. "각자 두 명까지 몰라도 된다"를 허용해야 겨우 성립하는 집단이다.

값의 의미 — 4명 집단에서 각자 2명을 몰라도 된다면 나머지는 1명뿐이다. 사실상 "친구 한 명만 있으면 통과"라는 뜻이라, 집단이라 부르기 민망한 기준이다. 실제로 S5는 이 집단 안에서 S6 한 명만 알고 있다. §7의 왼쪽 집단이 2-플렉스로 통과했던 것과 대조된다.

(2) 정리 적용.

kksss+22\dfrac{s+2}{2}k<s+22k < \dfrac{s+2}{2}?결론
344+22=3\dfrac{4+2}{2}=33 < 3 은 거짓 ✗보장되지 않는다 — 직접 재 봐야 한다

그래서 직접 잰다. 유도 부분그래프의 간선은 S5–S6, S6–S7, S6–S8, S7–S8 네 개다.

유도 부분그래프 안의 최단 경로dG[S]d_{G[S]}
S5–S6S5→S61
S5–S7S5→S6→S7 (S6을 반드시 거친다)2
S5–S8S5→S6→S8 (S6을 반드시 거친다)2
S6–S7S6→S71
S6–S8S6→S81
S7–S8S7→S81

답 (2) — 정리로는 보장되지 않지만, 실제 유도 지름은 2다. 정리는 충분조건일 뿐이라는 §8의 경고가 그대로 확인된다. "조건을 통과하면 반드시 지름 2"는 참이지만 그 역은 성립하지 않는다.

(3) 2-클리크 판정. 이번에는 전체 그래프 WW에서 잰 거리를 쓴다(§4의 표).

dGd_G (§4 표에서 읽음)2\le 2?지름길
S5–S61직접 연결
S5–S72S5→S6→S7 — S6은 집단 안
S5–S82S5→S6→S8 — S6은 집단 안
S6–S71직접 연결
S6–S81직접 연결
S7–S81직접 연결
최댓값26쌍 전부 통과

답 (3)2-클리크가 맞다. 극대이기도 하다: S1~S4 중 누구를 넣어도 S7·S8과의 거리가 3이 되어 실패한다.

(4) 2-클랜 판정. (2)에서 유도 지름이 2임을 이미 구했고, (3)에서 극대 2-클리크임을 확인했다.

답 (4)2-클랜이다. (3)의 표에서 모든 지름길이 집단 안(S6)을 지난다는 것이 핵심이다. C6C_6의 {C1,C3,C5}는 지름길이 전부 밖에 있어서 클랜이 못 되었다(§5).

교실 해석 — 같은 네 명을 두 지표가 정반대로 읽는다

  • 2-클리크·2-클랜으로는 통과 — "네 명 다 서로 두 걸음 안"이고 그 다리도 집단 안에 있다
  • 3-플렉스에 그친다 — S5는 이 안에서 친구가 딱 한 명이다
  • 둘 다 맞는 말이다. 실체는 "S6·S7·S8 삼총사에 S5가 S6을 통해 걸쳐 있는 모양"이다. S5를 이 모둠에 넣으면 S6이 빠지는 순간 S5는 완전히 혼자가 된다
  • 실무 결론 — 모둠을 짤 때는 k-플렉스 쪽을 믿어라. "두 걸음 안"은 소문이 도는 범위이지 함께 활동할 수 있는 관계가 아니다. S5는 왼쪽 무리({S1,…,S5}, 2-플렉스)에 두는 것이 맞다

문제 2 해설 (Solution 2)

(1) WW'의 차수. S1–S6과 S2–S6을 추가하면 행렬에서 [1,6],[6,1],[2,6],[6,2][1,6],[6,1],[2,6],[6,2] 네 칸이 0에서 1로 바뀐다.

S1S2S3S4S5S6S7S8차수
S1001111004 (3→4)
S2001111004 (3→4)
S3110010003 (그대로)
S4110010003 (그대로)
S5111101005 (그대로)
S6110010115 (3→5)
S7000001012 (그대로)
S8000001102 (그대로)

답 (1) — 차수는 (S1, S2, S3, S4, S5, S6, S7, S8) = (4, 4, 3, 3, 5, 5, 2, 2). 간선은 12개에서 14개로 늘고, 차수 합은 24에서 28이 된다(2×142\times 14 ✓).

(2) 벗겨내기. k=3k=3으로 실행한다.

단계남은 사람과 내부 차수3 미만인 사람조치
1S1:4 S2:4 S3:3 S4:3 S5:5 S6:5 S7:2 S8:2S7, S8제거
2아래 표에서 다시 셈 → S1:4 S2:4 S3:3 S4:3 S5:5 S6:3없음종료

2단계의 재계산을 항까지 펼쳐 보자. 남은 여섯 명은 {S1,…,S6}이다.

iidegS(i)\deg_S(i) 전개 (6개 항)왜 그 값인가
S10+0+1+1+1+10+0+1+1+1+\color{#059669}{1}4S3, S4, S5 + 새 친구 S6
S20+0+1+1+1+10+0+1+1+1+\color{#059669}{1}4S3, S4, S5 + 새 친구 S6
S31+1+0+0+1+01+1+0+0+1+03S1, S2, S5 — 변화 없음
S41+1+0+0+1+01+1+0+0+1+03S1, S2, S5 — 변화 없음
S51+1+1+1+0+11+1+1+1+0+15S1, S2, S3, S4, S6 — 변화 없음
S61+1+0+0+1+0\color{#059669}{1}+\color{#059669}{1}+0+0+1+03S1, S2, S5 — S7·S8을 잃었지만 새 친구 둘이 메웠다

답 (2)WW'의 3-코어 = {S1, S2, S3, S4, S5, S6} (6명). WW에서는 5명이었는데 S6이 합류했다. 벗겨내기는 단 1단계에서 끝난다.

4-코어도 확인해 두자(코어 번호를 확정하려면 필요하다). 차수 4 미만인 S3, S4, S7, S8을 제거하면 {S1, S2, S5, S6}이 남는데, 그 안에서 S1의 친구는 S5, S6 둘뿐(S3, S4를 잃었다)이라 4에 미달이다. S2도 마찬가지, S5와 S6은 3. 결국 전원 제거되어 4-코어는 공집합이다.

S1S2S3S4S5S6S7S8
WW의 코어 번호33333222
WW'의 코어 번호33333322

(3) S6은 왜 올라갔나. 두 경우의 2단계를 나란히 놓으면 한눈에 보인다.

WW (원래)WW' (간선 2개 추가)
S6의 전체 친구S5, S7, S8S1, S2, S5, S7, S8
1단계에서 S7·S8 제거둘 다 잃음둘 다 잃음 (똑같다)
남은 친구 수S5 하나 → 1 < 3 → 탈락S1, S2, S5 세 명 → 3 ≥ 3 → 생존

답 (3) — S6의 코어 번호가 2에서 3으로 올랐다.

이유: 원래 S6은 친구 셋 중 둘이 S7·S8이라는 약한 사람이어서, 그들이 떨어지면 함께 무너졌다. 새로 얻은 S1·S2는 이미 3-코어에 확실히 들어 있는 사람이라 절대 떨어지지 않는다. 그래서 S7·S8이 사라진 뒤에도 S6에게는 3명이 남는다.

(4) 대신 S1–S2와 S3–S4를 추가했다면? 이때 왼쪽 다섯 명은 완전한 K5K_5가 되어 차수가 (4,4,4,4,5)로 오른다. 가장 큰 클리크가 5명이 되고 ω\omega가 3에서 5로 뛴다 — 대단한 개선처럼 보인다. 그런데 S6은? S6의 친구 명단은 조금도 바뀌지 않았다: 여전히 S5, S7, S8뿐이다.

단계남은 사람과 내부 차수조치
1S1:4 S2:4 S3:4 S4:4 S5:5 S6:3 S7:2 S8:2S7, S8 제거
2S1:4 S2:4 S3:4 S4:4 S5:5 S6:1 ← S5 하나만 남았다S6 제거
3S1:4 S2:4 S3:4 S4:4 S5:4 — 전원 통과종료

답 (4)S6의 코어 번호는 2 그대로다. 왼쪽 다섯 명의 코어 번호는 3에서 4로 올라가지만(4-코어 = {S1,…,S5}), S6은 아무 이득도 못 본다.

핵심: 간선을 두 개 추가한 것은 (3)과 똑같은데 결과가 정반대다. 어디에 놓느냐가 전부다. "이미 튼튼한 사람들끼리 더 묶어 주기"는 그들의 코어 번호만 올리고 바깥 사람은 그대로 두거나 오히려 격차를 벌린다.

교실 해석 — 개입은 어디에 해야 하는가

  • (3)의 처방이 옳다. 주변부 학생(S6)을 핵심층 학생(S1, S2)과 이어 주면 그 학생의 코어 번호가 실제로 오른다. 두 개의 관계만으로 층이 바뀌었다
  • (4)는 흔한 실패다. 이미 잘 지내는 아이들끼리 더 붙여 주는 활동은 지표를 올려 주긴 하는데(ω\omega가 3→5, 왼쪽 코어가 3→4) 정작 도움이 필요한 학생은 제자리다. 학급 평균 밀도만 보면 개선처럼 보이는 함정이다
  • S7·S8과 더 묶어 주는 것도 답이 아니다. S6이 S7·S8과 아무리 가까워져도 셋 다 함께 떨어진다. 주변부끼리의 연결은 코어 번호를 올리지 못한다
  • 실무 규칙 — 소외 학생의 짝·모둠을 정할 때는 코어 번호가 높은 학생을 붙여라. 그것도 둘 이상을. 한 명만 붙이면 그 한 명이 결석하거나 관계가 식는 순간 원위치다 (S6이 S5 하나에 의지했을 때가 정확히 그 상태였다)

참고 — S6을 올리는 다른 방법도 있다

S5–S7과 S5–S8을 추가해도 S6의 코어 번호는 3이 된다. 이때는 S7·S8의 차수가 각각 3이 되어 아무도 제거되지 않고, 8명 전원의 코어 번호가 3이 된다. 즉 S6을 직접 건드리지 않고 S6이 의지하던 약한 친구들을 튼튼하게 만드는 우회 처방이다. 교실로 옮기면 "소외 학생 본인이 아니라 그 학생의 유일한 친구를 무리에 넣어 주는" 개입에 해당한다.