단원 3-2Relaxed Cliques: n-clique, k-plex, k-core
완화된 클리크 — n-클리크, k-플렉스, k-코어
- 오늘의 질문 — 클리크는 왜 너무 엄격한가 (Today's Question: Why Cliques Are Too Strict)
- 오늘의 네트워크 (Today's Network)
- 클리크로 먼저 보기 — 다섯 명이 네 조각으로 (Cliques First: Five People Shattered into Four)
- 완화 ① 거리를 늦춘다 — n-클리크 (Relaxation ①: Loosen the Distance — n-clique)
- n-클리크의 함정 — 간선이 하나도 없는 2-클리크 (The n-clique Trap)
- n-클랜과 n-클럽 (n-clan and n-club)
- 완화 ② 빠진 연결을 허용한다 — k-플렉스 (Relaxation ②: Allow Absences — k-plex)
- k는 어디까지 봐줘도 되는가 — (How Large Can k Be?)
- 완화 ③ 안쪽 친구 수만 요구한다 — k-코어 (Relaxation ③: Require Only Inside Friends — k-core)
- 코어 번호는 차수가 아니다 (Coreness Is Not Degree)
- 세 가지 완화 비교 (Comparing the Three Relaxations)
- R 검증 (R Verification)
- 실전 — 가라테 클럽의 코어 분해 (In Practice: Core Decomposition of the Karate Club)
- 교실 적용 (Classroom Application)
- 연습문제 (Exercises)
- 해설과 답 (Solutions)
1. 오늘의 질문 — 클리크는 왜 너무 엄격한가 (Today's Question: Why Cliques Are Too Strict)
지난 단원(3-1)에서 7명 네트워크 의 극대 클리크를 전부 찾았다. 네 개가 나왔는데, 그중 두 개가 크기 2였다 — {S3,S4}와 {S4,S5}. "세 명이 서로 다 친한 모둠"은 딱 두 개뿐이었다.
가라테 클럽에서는 더 답답했다. 극대 클리크가 36개나 나왔고 최대 크기는 5였는데, 그 크기 5짜리 두 개가 이랬다:
네 명(1,2,3,4)이 똑같고 마지막 한 명만 다르다. 누가 봐도 {1,2,3,4,8,14} 여섯 명이 한 무리인데, 클리크는 이것을 두 개의 다른 집단으로 쪼개서 보고한다. 이유는 단 하나 — 8번과 14번 사이에 간선이 없기 때문이다.
클리크의 문제 — 간선 하나에 전부가 걸린다
크기 인 집단이 클리크가 되려면 개의 쌍이 전부 1이어야 한다. 이면 15쌍이다. 그중 한 쌍만 0이어도 탈락이다. 현실의 교우관계 자료는 조사 시점에 결석한 학생, 응답 누락, 서로 알지만 지명하지 않은 관계 때문에 0이 섞이기 마련이다. 클리크는 이 잡음을 견디지 못한다.
완화의 세 방향 (Three Directions of Relaxation)
클리크의 조건 "집단 안 모든 쌍 에 대해 "을 서로 다른 세 방식으로 늦출 수 있다.
| # | 무엇을 늦추는가 | 이름 (name) | 새 조건 |
|---|---|---|---|
| ① | 거리 — "직접 연결"을 "가까우면 됨"으로 | n-클리크 n-clique | 모든 쌍의 측지거리가 이하 |
| ② | 결석 — "전원과 연결"을 "몇 명은 몰라도 됨"으로 | k-플렉스 k-plex | 각자 집단 안에서 명까지 몰라도 됨 |
| ③ | 기준의 방향 — "몇 명을 빠뜨렸나"를 "몇 명을 챙겼나"로 | k-코어 k-core | 각자 집단 안에 친구가 명 이상 |
②와 ③은 언뜻 같은 말처럼 들리지만 정반대 방향이다. ②는 "빠진 수"를 세고 ③은 "있는 수"를 센다. 집단이 커질수록 ②는 점점 엄격해지고(전체가 늘어도 허용 결석은 그대로), ③은 점점 느슨해진다(요구 친구 수는 그대로인데 후보가 늘어난다). 오늘 이 차이를 손으로 확인한다.
세 가지 모두 또는 이면 클리크로 되돌아간다. 1-클리크 = 클리크(모든 거리 1), 1-플렉스 = 클리크(아무도 빠뜨리면 안 됨). k-코어만 조금 다르게 대응하는데, 크기 인 클리크는 정확히 -코어의 조건을 만족한다 (완전그래프 의 모든 차수가 이므로).
2. 오늘의 네트워크 (Today's Network)
지난 시간의 는 너무 성글어서 세 완화가 서로 구별되지 않는다 (에서는 2-플렉스의 최대 크기가 3으로 클리크와 똑같고, 2-코어는 7명 전원이다). 오늘은 8명짜리 를 쓴다. 간선 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
인접행렬 (The Adjacency Matrix)
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | 차수 | |
|---|---|---|---|---|---|---|---|---|---|
| S1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 3 |
| S2 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 3 |
| S3 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 3 |
| S4 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 3 |
| S5 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 5 |
| S6 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 3 |
| S7 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 2 |
| S8 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 2 |
| 합 | 3 | 3 | 3 | 3 | 5 | 3 | 2 | 2 | 24 |
대각선은 전부 0(자기 자신은 세지 않는다), 행렬은 대칭이다(무방향). 차수의 합 24 = 간선 수 12의 두 배 — 단원 1-4의 악수 정리 검산이 맞는다. 밀도는
를 읽는 세 부분
- S1~S5 — 서로 빽빽하지만 두 쌍이 비어 있다(S1–S2, S3–S4). 오늘의 주인공.
- S6 — 다리 역할. 왼쪽에는 S5 하나, 오른쪽에는 S7·S8 둘과 이어진다. 차수 3.
- S7, S8 — S6에 매달린 작은 삼각형의 나머지 두 명. 차수 2.
3. 클리크로 먼저 보기 — 다섯 명이 네 조각으로 (Cliques First: Five People Shattered into Four)
지난 단원의 방법으로 를 분석해 보자. 먼저 {S1,S2,S3,S4,S5}가 클리크인가? 10개 쌍을 전부 확인한다.
| # | 쌍 | 확인 | |
|---|---|---|---|
| 1 | S1–S2 | 0 | 없다 ✗ — S1의 행에서 2열이 0 |
| 2 | S1–S3 | 1 | 있다 ✓ |
| 3 | S1–S4 | 1 | 있다 ✓ |
| 4 | S1–S5 | 1 | 있다 ✓ |
| 5 | S2–S3 | 1 | 있다 ✓ |
| 6 | S2–S4 | 1 | 있다 ✓ |
| 7 | S2–S5 | 1 | 있다 ✓ |
| 8 | S3–S4 | 0 | 없다 ✗ — S3의 행에서 4열이 0 |
| 9 | S3–S5 | 1 | 있다 ✓ |
| 10 | S4–S5 | 1 | 있다 ✓ |
| 합 | 8 | 10쌍 중 8쌍 — 내부 밀도 | |
10쌍 중 8쌍이 있는데 클리크가 아니다. 빠진 두 쌍이 만드는 피해를 정확히 세어 보자. 에서 뽑을 수 있는 삼중항은 개다.
| # | 삼중항 | 세 쌍 | 합 | 판정 |
|---|---|---|---|---|
| 1 | {S1,S2,S3} | 0 + 1 + 1 | 2 | S1–S2 때문에 탈락 |
| 2 | {S1,S2,S4} | 0 + 1 + 1 | 2 | S1–S2 때문에 탈락 |
| 3 | {S1,S2,S5} | 0 + 1 + 1 | 2 | S1–S2 때문에 탈락 |
| 4 | {S1,S3,S4} | 1 + 1 + 0 | 2 | S3–S4 때문에 탈락 |
| 5 | {S1,S3,S5} | 1 + 1 + 1 | 3 | 삼각형 ★ |
| 6 | {S1,S4,S5} | 1 + 1 + 1 | 3 | 삼각형 ★ |
| 7 | {S2,S3,S4} | 1 + 1 + 0 | 2 | S3–S4 때문에 탈락 |
| 8 | {S2,S3,S5} | 1 + 1 + 1 | 3 | 삼각형 ★ |
| 9 | {S2,S4,S5} | 1 + 1 + 1 | 3 | 삼각형 ★ |
| 10 | {S3,S4,S5} | 1 + 0 + 1 | 2 | S3–S4 때문에 탈락 |
여기에 오른쪽의 {S6,S7,S8}까지 더하면 의 삼각형은 모두 5개다. 4명짜리 클리크는 하나도 없다. 이유는 두 가지로 나뉜다 — 왼쪽에서 4명을 고르면 쌍 안에 S1–S2 아니면 S3–S4가 반드시 들어가고, 오른쪽 {S6,S7,S8}에 누구를 더하려 해도 S6과 이어진 사람은 S5뿐인데 S5–S7이 없다. 따라서 이고, 의 극대 클리크는 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) — 정점 집합 가 -클리크라는 것은
를 만족한다는 뜻이다. 여기서 는 전체 그래프 에서 잰 측지거리다(단원 1-6). 이면 모든 쌍의 거리가 1, 즉 클리크와 같다. 보통 극대(maximal) -클리크를 찾는다 — 아무도 더 넣을 수 없는 것.
의 아래첨자 가 핵심이다. 거리를 집단 안에서 재는 것이 아니라 그래프 전체에서 잰다. 즉 와 를 잇는 지름길이 밖의 사람을 지나가도 된다. 이 한 글자 때문에 §5의 함정이 생긴다.
손 계산 ① — 측지거리를 로 구한다 (Distances from Powers of W)
단원 1-6의 방법을 쓴다: 는 이 되는 가장 작은 다. 두 개만 손으로 해 보자.
(가) — 먼저 : 이므로 거리 1이 아니다. 로 간다.
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | 합 | |
|---|---|---|---|---|---|---|---|---|---|
| (S1의 행) | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 3 |
| (S2의 열) | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 3 |
| 곱 | 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 |
이므로 다. 초록 세 칸이 각각 지름길 하나에 대응한다: S1→S3→S2 S1→S4→S2 S1→S5→S2. 서로 안 친한 S1과 S2 사이에 공통의 친구가 셋이나 있다.
(나) — 이니 1은 아니다. 를 보자.
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | 합 | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 3 | |
| (S7의 열) | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 2 |
| 곱 | 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)가 한 명도 겹치지 않는다. 그래서 으로 간다. 이번에는 의 1행을 먼저 구해 두자. 의 1행이 이므로 다:
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | |
|---|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | |
| 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | |
| 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | |
| 3 | 3 | 1 | 1 | 2 | 1 | 0 | 0 |
이제 :
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | 합 | |
|---|---|---|---|---|---|---|---|---|---|
| 3 | 3 | 1 | 1 | 2 | 1 | 0 | 0 | ||
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | ||
| 곱 | 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 |
→ . 유일한 초록 칸 이 그 경로를 알려 준다: 은 S1→S5→S6 하나뿐이고, 거기에 S6→S7을 붙이면 S1→S5→S6→S7이다.
의 측지거리 행렬 (The Distance Matrix)
같은 방법을 모든 쌍에 적용하면 (R 검증은 §12):
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | |
|---|---|---|---|---|---|---|---|---|
| S1 | 0 | 2 | 1 | 1 | 1 | 2 | 3 | 3 |
| S2 | 2 | 0 | 1 | 1 | 1 | 2 | 3 | 3 |
| S3 | 1 | 1 | 0 | 2 | 1 | 2 | 3 | 3 |
| S4 | 1 | 1 | 2 | 0 | 1 | 2 | 3 | 3 |
| S5 | 1 | 1 | 1 | 1 | 0 | 1 | 2 | 2 |
| S6 | 2 | 2 | 2 | 2 | 1 | 0 | 1 | 1 |
| S7 | 3 | 3 | 3 | 3 | 2 | 1 | 0 | 1 |
| S8 | 3 | 3 | 3 | 3 | 2 | 1 | 1 | 0 |
지름은 3(빨간 칸), 평균 거리는 1.8571이다.
계산 요령 — 거리 행렬을 이진화하면 클리크 문제로 바뀐다 (Binarize and Reuse the Clique Algorithm)
핵심 아이디어 — 새 행렬 를
로 정의하면, 의 -클리크 = 의 클리크다. 정의가 "모든 쌍의 거리 ≤ "인데 에서는 그것이 "모든 쌍이 1"이 되기 때문이다. 따라서 지난 단원의 클리크 알고리즘을 그대로 재사용할 수 있다.
로 이진화하면 (거리 1과 2를 1로, 3을 0으로):
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | 행합 | |
|---|---|---|---|---|---|---|---|---|---|
| S1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 5 |
| S2 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 5 |
| S3 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 5 |
| S4 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 5 |
| S5 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 7 |
| S6 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 7 |
| S7 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 3 |
| S8 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 3 |
의 간선 수는 개, 밀도 . 원래 0.4286에서 크게 올랐다. 이제 에서 클리크를 찾는다.
왼쪽 위 6×6 블록(S1~S6)이 대각선만 빼고 전부 1이다(초록). 즉 {S1,S2,S3,S4,S5,S6}은 의 클리크 = 의 2-클리크다. 15개 쌍을 원래 거리로 다시 확인해 보자.
| 쌍 | S1S2 | S1S3 | S1S4 | S1S5 | S1S6 | S2S3 | S2S4 | S2S5 |
|---|---|---|---|---|---|---|---|---|
| 2 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | |
| 쌍 | S2S6 | S3S4 | S3S5 | S3S6 | S4S5 | S4S6 | S5S6 | 최대 |
| 2 | 2 | 1 | 2 | 1 | 2 | 1 | 2 ✓ |
15쌍 모두 2 이하 — 2-클리크가 맞다. 극대인가? S7을 넣으면 라서 실패, S8도 마찬가지다. 극대다.
에서 오른쪽 아래를 보면 {S5,S6,S7,S8}도 서로 전부 1이다. , 나머지는 1. 여기에 S1을 넣으면 이라 실패. 이것도 극대 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의 정의에 있던 아래첨자 가 문제를 일으킨다. 가장 작고 기억하기 좋은 반례는 6-사이클 다. 여섯 명이 손을 잡고 둥글게 원을 만든 모양 — 간선은 C1–C2, C2–C3, C3–C4, C4–C5, C5–C6, C6–C1 여섯 개뿐이다.
의 거리 행렬:
| C1 | C2 | C3 | C4 | C5 | C6 | |
|---|---|---|---|---|---|---|
| C1 | 0 | 1 | 2 | 3 | 2 | 1 |
| C2 | 1 | 0 | 1 | 2 | 3 | 2 |
| C3 | 2 | 1 | 0 | 1 | 2 | 3 |
| C4 | 3 | 2 | 1 | 0 | 1 | 2 |
| C5 | 2 | 3 | 2 | 1 | 0 | 1 |
| C6 | 1 | 2 | 3 | 2 | 1 | 0 |
{C1, C3, C5}의 세 쌍을 확인한다.
| 쌍 | ? | 지름길 | 그 지름길이 지나는 사람 | |
|---|---|---|---|---|
| C1–C3 | 2 | ✓ | C1→C2→C3 | C2 — 집단 밖 |
| C3–C5 | 2 | ✓ | C3→C4→C5 | C4 — 집단 밖 |
| C5–C1 | 2 | ✓ | C5→C6→C1 | C6 — 집단 밖 |
세 쌍 모두 거리 2 이하 → {C1,C3,C5}는 2-클리크다. 그런데 이 세 명만 남기고 나머지를 지운 유도 부분그래프를 보면:
| C1 | C3 | C5 | 행합 | |
|---|---|---|---|---|
| C1 | 0 | 0 | 0 | 0 |
| C3 | 0 | 0 | 0 | 0 |
| C5 | 0 | 0 | 0 | 0 |
간선이 0개다.
세 명은 서로 완전한 남남이고, 유도 부분그래프는 연결되어 있지도 않다 (성분 3개, 지름 ). 그런데도 정의상 어엿한 2-클리크다. 세 사람을 이어 주던 사람이 전부 집단 밖에 있기 때문이다. "집단"이라고 불러 놓고 정작 그 집단 안에는 아무 관계가 없다 — n-클리크의 가장 큰 약점이다.
같은 문제가 오늘의 에서도 약하게 나타난다. 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) — 극대 -클리크이면서, 그 유도 부분그래프 의 지름도 이하인 것:
n-클럽 (n-club) — 처음부터 만 요구하고, 그 조건을 지키면서 더 키울 수 없는 집합. -클리크일 필요가 없다.
정의가 헷갈리니 무엇을 어디서 재는지 표로 못박아 두자.
| 개념 | 조건 | 거리를 재는 곳 | 극대성 |
|---|---|---|---|
| n-클리크 | 모든 쌍 | 전체 그래프 | n-클리크 중 극대 |
| n-클랜 | 위 + | 둘 다 | n-클리크 중 극대 |
| n-클럽 | 유도 부분그래프 | 이 조건 아래 극대 |
손 계산 — {S1,…,S6}은 2-클랜인가 (Is It a 2-clan?)
S7, S8을 지우고 여섯 명만 남긴 유도 부분그래프에서 거리를 다시 잰다. 간선은 9개가 남는다(S5–S6 포함, S6–S7과 S6–S8은 잘려 나감).
| S1 | S2 | S3 | S4 | S5 | S6 | |
|---|---|---|---|---|---|---|
| S1 | 0 | 2 | 1 | 1 | 1 | 2 |
| S2 | 2 | 0 | 1 | 1 | 1 | 2 |
| S3 | 1 | 1 | 0 | 2 | 1 | 2 |
| S4 | 1 | 1 | 2 | 0 | 1 | 2 |
| S5 | 1 | 1 | 1 | 1 | 0 | 1 |
| S6 | 2 | 2 | 2 | 2 | 1 | 0 |
최댓값이 2이므로 → 2-클랜이다. §4의 전체 거리 행렬과 비교하면 여섯 명 사이의 값이 하나도 변하지 않았다. 지름길이 전부 이 여섯 명 안에 있었다는 뜻이다. 같은 계산을 {S5,S6,S7,S8}에 해도 유도 지름이 2 → 2-클랜. 의 두 극대 2-클리크는 둘 다 2-클랜이다(§5의 함정에 걸리지 않았다).
반대로 에서는 여덟 개의 극대 2-클리크 중
| 극대 2-클리크 | 유도 간선 수 | 연결? | 유도 지름 | 2-클랜? |
|---|---|---|---|---|
| {C1,C2,C3} | 2 | 예 | 2 | 예 |
| {C2,C3,C4} | 2 | 예 | 2 | 예 |
| {C3,C4,C5} | 2 | 예 | 2 | 예 |
| {C4,C5,C6} | 2 | 예 | 2 | 예 |
| {C5,C6,C1} | 2 | 예 | 2 | 예 |
| {C6,C1,C2} | 2 | 예 | 2 | 예 |
| {C1,C3,C5} | 0 | 아니오 | 아니오 ✗ | |
| {C2,C4,C6} | 0 | 아니오 | 아니오 ✗ |
여덟 개 중 여섯 개가 2-클랜이고, 문제의 두 개가 정확히 걸러진다. n-클랜은 n-클리크의 함정을 고치는 필터다.
포함 관계 — 정의상 유도 부분그래프의 거리는 전체 그래프의 거리보다 짧아질 수 없다(경로가 줄었으니까): . 따라서 이면 자동으로 모든 쌍이 이다. 그래서 모든 -클랜은 -클리크이고, 또 모든 -클랜은 -클럽이다. 셋의 관계는 -클랜 -클리크, -클랜 -클럽.
7. 완화 ② 빠진 연결을 허용한다 — k-플렉스 (Relaxation ②: Allow Absences — k-plex)
n-클리크는 "거리"를 늦춰서 문제가 생겼다. 그러면 거리는 그대로 두고 빠진 간선 몇 개를 봐주는 쪽으로 가면 어떨까. Seidman & Foster(1978)의 k-플렉스다.
k-플렉스 (k-plex) — 크기 인 집합 가 -플렉스라는 것은, 모든 에 대해
를 만족한다는 뜻이다. 여기서 는 집단 안에서만 센 차수 — 밖의 친구는 세지 않는다.
"명까지 몰라도 된다"로 바꿔 읽기 (Reading It as "May Miss k−1")
안에서 가 만날 수 있는 상대는 자기 자신을 뺀 명이다. 그중 모르는 사람 수는
즉 각자 최대 명까지 몰라도 된다. 이 형태가 훨씬 외우기 쉽다.
| 필요 조건 | 사람 말로 | 비고 | |
|---|---|---|---|
| 1 | 아무도 빠뜨리면 안 됨 | = 클리크 | |
| 2 | 각자 한 명씩은 몰라도 됨 | 실무에서 가장 많이 쓴다 | |
| 3 | 각자 두 명씩 몰라도 됨 | 가 작으면 너무 헐거워진다 |
"각자"가 중요하다. "집단 전체에서 빠진 간선이 개"가 아니다. 모든 사람이 각자 명까지 몰라도 된다는 뜻이므로, 빠진 간선 총수는 최대 개까지 갈 수 있다. 면 최대 → 2개다. 오늘 의 왼쪽이 정확히 이 경우다.
손 계산 — {S1,S2,S3,S4,S5}는 2-플렉스인가 (Hand Calculation)
먼저 다섯 명만 남긴 유도 인접행렬을 쓴다(§2의 에서 1~5행·1~5열을 잘라낸 것).
| S1 | S2 | S3 | S4 | S5 | ||
|---|---|---|---|---|---|---|
| S1 | 0 | 0 | 1 | 1 | 1 | 3 |
| S2 | 0 | 0 | 1 | 1 | 1 | 3 |
| S3 | 1 | 1 | 0 | 0 | 1 | 3 |
| S4 | 1 | 1 | 0 | 0 | 1 | 3 |
| S5 | 1 | 1 | 1 | 1 | 0 | 4 |
행합을 항 하나도 빼지 않고 전개하면:
| 전개 | 값 | 이상? | 모르는 사람 수 | |
|---|---|---|---|---|
| S1 | 3 | ✓ 3 ≥ 3 | 1 (S2) | |
| S2 | 3 | ✓ 3 ≥ 3 | 1 (S1) | |
| S3 | 3 | ✓ 3 ≥ 3 | 1 (S4) | |
| S4 | 3 | ✓ 3 ≥ 3 | 1 (S3) | |
| S5 | 4 | ✓ 4 ≥ 3 | 0 (없음) |
판정 — 다섯 명 전원이 을 만족한다. {S1,S2,S3,S4,S5}는 2-플렉스다.
1-플렉스(=클리크)는 아니다. 1-플렉스라면 여야 하는데 S1~S4가 3이라 실패한다. 따라서 정확히 2-플렉스다. 빠진 간선은 딱 두 개(S1–S2, S3–S4)이고, 그 둘이 서로 다른 사람들을 건드리기 때문에 아무도 두 명을 놓치지 않는다.
S5가 0명을 놓친 것도 의미가 있다. S5는 이 집단의 완전 참여자다. 2-플렉스는 이런 사람과 "한 명 놓친 사람"을 같은 집단으로 묶어 준다.
대조 — S6을 넣으면 무너진다 (Contrast: Adding S6 Breaks It)
2-클리크는 S6까지 넣어 여섯 명을 만들었다. k-플렉스는 어떨까? 의 유도 차수를 다시 센다. 이 되었으니 2-플렉스 기준은 다.
| 전개 (6개 항) | 값 | 4 이상? | |
|---|---|---|---|
| S1 | 3 | ✗ | |
| S2 | 3 | ✗ | |
| S3 | 3 | ✗ | |
| S4 | 3 | ✗ | |
| S5 | 5 | ✓ | |
| S6 | 1 | ✗✗ |
최솟값이 1(S6)이다. 에서 . 은 5-플렉스다 — 즉 "각자 4명까지 몰라도 됨"을 허용해야 겨우 성립한다. 6명 집단에서 4명을 몰라도 된다면 사실상 아무 조건도 아니다.
k-플렉스가 §5의 함정을 자동으로 막는 이유
k-플렉스는 거리가 아니라 집단 안의 간선을 센다. 의 {C1,C3,C5}는 유도 차수가 (0,0,0)이므로 , — 3-플렉스일 뿐이다 (3명 집단에서 2명을 몰라도 된다는 뜻이니 무의미하다). 2-플렉스로는 절대 통과하지 못한다. 바깥 사람을 빌려 올 수 없다는 점이 k-플렉스의 장점이다.
8. 는 어디까지 봐줘도 되는가 — (How Large Can k Be?)
를 키우면 집단은 커지지만 언젠가 "집단"이라 부를 수 없게 된다. 경계선이 어디인지 Seidman & Foster가 정확히 밝혔다.
정리 (Seidman & Foster, 1978) — 크기 인 -플렉스 에 대해
즉 이 조건을 만족하면 집단 안 임의의 두 사람은 집단 내부의 공통 친구를 통해 두 걸음 안에 이어진다. n-클랜의 성질이 공짜로 따라온다.
왜 그런가 — 비둘기집 원리로 손 증명 (Why: A Pigeonhole Argument)
안에서 서로 안 친한 두 사람 를 잡자(친하면 거리 1이니 볼 필요가 없다). 이 둘 사이에 안의 공통 친구가 반드시 있음을 보이면 된다.
| 단계 | 논증 | 근거 |
|---|---|---|
| ① | 는 안에 친구가 명 이상 있다 | k-플렉스의 정의 |
| ② | 그 친구들 중에 는 없다 | 는 서로 안 친하다고 잡았다 |
| ③ | 따라서 의 친구는 전부 안에 있다 — 명 이상 | ①+② |
| ④ | 에 대해서도 똑같이 명 이상 | 대칭 |
| ⑤ | 그런데 에는 명밖에 없다 | 두 명을 뺐으니까 |
| ⑥ | 이면 겹칠 수밖에 없다 | 비둘기집 원리 |
⑥의 부등식을 풀면:
겹치는 사람이 바로 와 의 공통 친구이고, 그 사람은 안에 있다. 따라서 i→공통친구→j로 두 걸음 — 유도 지름 2가 보장된다. ∎
오늘의 집단들에 적용 (Applying the Test)
| 집단 | 유도 차수 | 최소 | ? | 실제 유도 지름 | |||
|---|---|---|---|---|---|---|---|
| {S1,S3,S5} | 3 | 2,2,2 | 2 | 1 | 2.5 | ✓ 보장됨 | 1 (클리크) |
| {S1,S2,S3,S4,S5} | 5 | 3,3,3,3,4 | 3 | 2 | 3.5 | ✓ 보장됨 | 2 |
| {S5,S6,S7,S8} | 4 | 1,3,2,2 | 1 | 3 | 3.0 | ✗ 보장 없음 | 2 (우연히 좋다) |
| {S1,…,S6} | 6 | 3,3,3,3,5,1 | 1 | 5 | 4.0 | ✗ 보장 없음 | 2 (우연히 좋다) |
정리는 충분조건일 뿐 필요조건이 아니다. 아래 두 줄은 조건을 어겼는데도 실제 유도 지름이 2다. "를 통과하면 반드시 지름 2"는 참이지만, "통과 못 하면 지름이 크다"는 거짓이다. 정리가 말해 주는 것은 따로 확인하지 않아도 되는 안전 구간이지, 탈락 판정이 아니다.
교실 실무 기준 — 로 두고 이면 항상 이므로 2-플렉스는 크기와 상관없이 늘 유도 지름 2가 보장된다. 그래서 교우관계 자료에서는 대체로 2-플렉스부터 본다. 을 쓰려면 , 즉 — 다섯 명 이상일 때만 안전하다.
9. 완화 ③ 안쪽 친구 수만 요구한다 — k-코어 (Relaxation ③: Require Only Inside Friends — k-core)
k-코어 (k-core) — 모든 정점의 내부 차수가 이상인 극대 부분그래프:
코어 번호 (coreness) — 정점 가 속하는 가장 큰 .
k-플렉스와 무엇이 다른가 (How It Differs from k-plex)
부등식의 오른쪽만 다르다. 그런데 그 차이가 전부다.
| k-플렉스 | k-코어 | |
|---|---|---|
| 조건 | ||
| 기준이 에 의존하나 | 예 — 집단이 커지면 요구도 커진다 | 아니오 — 는 고정 |
| 집단이 커지면 | 점점 어려워진다 | 점점 쉬워진다 |
| 세는 것 | 빠진 사람 수 () | 있는 친구 수 () |
| 해가 여러 개인가 | 예 — 겹치는 것이 많다 | 아니오 — 마다 유일 |
| 계산 비용 | 비싸다 (NP-난해) | 싸다 — 벗겨내기 한 번 |
"해가 유일하다"는 성질은 증명이 짧다. 과 가 각각 조건을 만족하면 의 어떤 정점도 원래 있던 쪽의 친구를 그대로 갖고 있으므로 여전히 다. 즉 합집합도 k-코어 조건을 만족한다 → 모든 것을 합친 것이 유일한 극대해다. k-플렉스에는 이 성질이 없다(합치면 가 커져서 기준도 올라간다).
손 계산 — 벗겨내기로 3-코어 찾기 (Hand Calculation: Peeling)
벗겨내기 알고리즘 (peeling) — ① 현재 남은 집합에서 각자의 내부 차수를 센다. ② 보다 작은 사람을 전부 지운다. ③ 지운 사람이 있으면 ①로 돌아간다. 아무도 안 지워지면 남은 것이 -코어다. 지울 때마다 남은 사람의 차수가 줄어든다는 것이 이 알고리즘의 핵심이다.
에서 으로 실행한다.
단계 1 — 전체 8명. 차수는 §2의 표에서 그대로 가져온다.
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | |
|---|---|---|---|---|---|---|---|---|
| 3 | 3 | 3 | 3 | 5 | 3 | 2 | 2 | |
| 3 이상? | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ |
S7, S8을 지운다. 남은 사람: {S1, S2, S3, S4, S5, S6}.
단계 2 — 여섯 명 안에서 차수를 다시 센다. S7·S8이 사라졌으니 그들과 이어져 있던 사람의 차수가 줄어든다.
| 남은 여섯 명 안의 친구 | 새 | 단계 1과 비교 | 3 이상? | |
|---|---|---|---|---|
| S1 | S3, S4, S5 | 3 | 3 → 3 (그대로) | ✓ |
| S2 | S3, S4, S5 | 3 | 3 → 3 (그대로) | ✓ |
| S3 | S1, S2, S5 | 3 | 3 → 3 (그대로) | ✓ |
| S4 | S1, S2, S5 | 3 | 3 → 3 (그대로) | ✓ |
| S5 | S1, S2, S3, S4, S6 | 5 | 5 → 5 (그대로) | ✓ |
| S6 | S5 하나 — S7, S8이 사라졌다 | 1 | 3 → 1 (2 감소) | ✗ |
S6을 지운다. 남은 사람: {S1, S2, S3, S4, S5}.
단계 3 — 다섯 명 안에서 다시 센다. 이 값은 §7의 표에서 이미 구했다.
| S1 | S2 | S3 | S4 | S5 | |
|---|---|---|---|---|---|
| 3 | 3 | 3 | 3 | 4 | |
| 3 이상? | ✓ | ✓ | ✓ | ✓ | ✓ |
결과 — 아무도 지워지지 않는다. 알고리즘 종료. 의 3-코어 = {S1, S2, S3, S4, S5} (5명).
나머지 들 (The Other Values of k)
| 벗겨내기 과정 | k-코어 | 크기 | |
|---|---|---|---|
| 1 | 차수 0인 사람이 없다 → 아무도 안 지워짐 | {S1,…,S8} | 8 |
| 2 | 최소 차수가 2(S7, S8)라 여전히 아무도 안 지워짐 | {S1,…,S8} | 8 |
| 3 | S7, S8 → S6 (위의 손 계산) | {S1,…,S5} | 5 |
| 4 | 차수 4 미만인 7명(S5 제외)을 한 번에 제거 → 남은 S5는 차수 0 → 제거 | { } (공집합) | 0 |
따라서 각자의 코어 번호는:
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | |
|---|---|---|---|---|---|---|---|---|
| 차수 | 3 | 3 | 3 | 3 | 5 | 3 | 2 | 2 |
| 코어 번호 | 3 | 3 | 3 | 3 | 3 | 2 | 2 | 2 |
10. 코어 번호는 차수가 아니다 (Coreness Is Not Degree)
§9의 마지막 표에서 노란 두 칸이 오늘의 가장 중요한 교훈이다.
반전 ① — S6: 차수는 S1~S4와 같은데 코어는 낮다 (Same Degree, Lower Coreness)
| 차수 | 친구 명단 | 그 친구들의 코어 번호 | 코어 | |
|---|---|---|---|---|
| S1 | 3 | S3, S4, S5 | 3, 3, 3 — 전부 튼튼 | 3 |
| S6 | 3 | S5, S7, S8 | 3, 2, 2 — 둘이 약하다 | 2 |
차수만 보면 S1과 S6은 똑같이 3이다. 그런데 친구의 질이 다르다. S6의 친구 셋 중 둘(S7, S8)이 차수 2짜리 약한 사람이라, 그 둘이 무너지는 순간 S6은 친구 1명만 남는다. S1의 친구는 셋 다 3-코어 소속이라 아무도 무너지지 않는다.
연쇄 붕괴 (cascade) — 벗겨내기의 본질은 이것이다. "내가 몇 명과 이어져 있나"가 아니라 "내 친구들이 버텨 주는가"를 재귀적으로 묻는다. 차수는 한 걸음만 보고, 코어 번호는 연쇄 반응이 멈출 때까지 본다.
반전 ② — S5: 차수가 제일 높은데 코어는 남들과 같다 (Highest Degree, Ordinary Coreness)
S5는 차수 5로 에서 가장 인기가 많다. 그런데 코어 번호는 3 — S1~S4와 똑같다. S5의 친구 5명 중 S6이 3-코어에서 탈락했기 때문에, 3-코어 안에서 S5의 차수는 4로 줄어든다. 4-코어가 되려면 S5뿐 아니라 나머지 넷도 전부 내부 차수 4를 확보해야 하는데 S1~S4는 3이 한계다.
코어 번호는 개인 지표가 아니라 집단 지표다. "내가 얼마나 인기 있나"가 아니라 "내가 얼마나 촘촘한 집단에 속해 있나"를 잰다. 아무리 친구가 많아도 그 친구들끼리 안 뭉쳐 있으면 코어 번호는 오르지 않는다. 반대로 나 자신은 친구가 딱 명이어도 그 집단이 튼튼하면 -코어에 남는다.
항상 성립하는 부등식 — . 가 -코어에 있다면 그 안에서 이미 명 이상과 이어져 있고, 그 명은 전체 그래프에서도 의 친구이므로 다. 따라서 코어 번호가 차수를 넘는 일은 없다. 반대 방향(차수는 큰데 코어는 낮다)만 생긴다.
11. 세 가지 완화 비교 (Comparing the Three Relaxations)
같은 네트워크 를 세 방법으로 분석한 결과를 한 표에 놓는다.
| 방법 | 결과 | 크기 | S6 포함? | 판정 기준 | 약점 |
|---|---|---|---|---|---|
| 클리크 | {S1,S3,S5}, {S1,S4,S5}, {S2,S3,S5}, {S2,S4,S5}, {S6,S7,S8}, {S5,S6} | 3 | △ | 모든 쌍 | 너무 잘게 쪼개진다 |
| 2-클리크 | {S1,…,S6}, {S5,S6,S7,S8} | 6 | ✓ | 바깥 사람을 빌려 온다 (§5) | |
| 2-클랜 | {S1,…,S6}, {S5,S6,S7,S8} | 6 | ✓ | 위 + | 계산이 두 단계 |
| 2-플렉스 | {S1,S2,S3,S4,S5} | 5 | ✗ | 계산이 비싸다 (NP-난해) | |
| 3-코어 | {S1,S2,S3,S4,S5} | 5 | ✗ | 집단이 크면 헐거워진다 |
2-플렉스와 3-코어가 같은 답을 냈지만 이유는 전혀 다르다.
둘 다 "내부 차수 3 이상"을 요구했는데, 2-플렉스에서는 로 집단 크기 에서 나온 값이고, 3-코어에서는 로 내가 정한 상수다. 집단 크기가 5일 때 우연히 겹쳤을 뿐이다. 가 달라지면 즉시 갈라진다 — {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])→ 유도 차수. 와 비교해 k-플렉스coreness(g)→ k-코어. 벗겨내기를 직접 짤 필요가 없다
igraph에 k-플렉스 함수는 없다.
k-플렉스 찾기는 NP-난해라서 표준 함수가 제공되지 않는다.
작은 네트워크( 정도)는 부분집합 전수 검사로 충분하고,
큰 자료는 statnet 계열이나 별도 패키지를 써야 한다.
반면 coreness()는 간선 수에 거의 선형이라 몇만 명짜리 네트워크에서도 즉시 끝난다.
13. 실전 — 가라테 클럽의 코어 분해 (In Practice: Core Decomposition of the Karate Club)
단원 3-1에서 가라테 클럽의 극대 클리크가 36개나 나와 읽기 어려웠다. 같은 자료를 k-코어로 보면 34명이 딱 네 층으로 정리된다.
벗겨내기 3단계 (Three Peeling Rounds)
| 단계 | 남은 인원 | 내부 차수 4 미만이라 제거되는 사람 | 제거 수 |
|---|---|---|---|
| 1 | 34 | 5, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22, 23, 25, 26, 27, 29 | 18 |
| 2 | 16 | 6, 7, 28, 30, 32 — 1단계에서는 차수 4 이상이었는데, 이웃이 사라져 미달이 됨 | 5 |
| 3 | 11 | 24 — 2단계에서 28번과 30번을 잃고 미달 | 1 |
| 4 | 10 | 아무도 미달이 아님 → 종료 | 0 |
2단계와 3단계가 연쇄 붕괴다. 전체 차수만 봤다면 6, 7, 28, 30, 32, 24번은 모두 4 이상이라 살아남았어야 한다. 그러나 이웃이 먼저 무너지면 같이 무너진다.
| 학생 | 전체 차수 | 이웃 명단 | 그중 4-코어에 남은 사람 | 코어 |
|---|---|---|---|---|
| 32 | 6 | 1, 25, 26, 29, 33, 34 | 1, 33, 34 — 3명뿐 | 3 |
| 24 | 5 | 26, 28, 30, 33, 34 | 33, 34 — 2명뿐 | 3 |
| 30 | 4 | 24, 27, 33, 34 | 33, 34 — 2명뿐 | 3 |
32번이 가장 극적이다. 차수 6은 34명 중 5위권인데 코어 번호는 3이다. 이웃 여섯 중 25, 26, 29번이 주변부라 함께 떨어졌다. S6이 S7·S8과 함께 떨어진 것(§10)과 정확히 같은 구조다.
네 층의 명단 (The Four Layers)
| 코어 | 인원 | 명단 | 읽기 |
|---|---|---|---|
| 1 | 1 | 12 | 차수 1 — 1번 한 사람만 알고 있다. 가장 바깥 |
| 2 | 11 | 10, 13, 15, 16, 17, 18, 19, 21, 22, 23, 27 | 주변부 — 대부분 차수 2 |
| 3 | 12 | 5, 6, 7, 11, 20, 24, 25, 26, 28, 29, 30, 32 | 중간층 — 여기에 32, 24, 30번이 있다 |
| 4 | 10 | 1, 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-플렉스가 이 둘을 합쳐 주는지 손으로 확인하자. , 2-플렉스 기준은 다.
| 1 | 2 | 3 | 4 | 8 | 14 | 4 이상? | 모르는 사람 | ||
|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 1 | 1 | 1 | 1 | 1 | 5 | ✓ | 0명 |
| 2 | 1 | 0 | 1 | 1 | 1 | 1 | 5 | ✓ | 0명 |
| 3 | 1 | 1 | 0 | 1 | 1 | 1 | 5 | ✓ | 0명 |
| 4 | 1 | 1 | 1 | 0 | 1 | 1 | 5 | ✓ | 0명 |
| 8 | 1 | 1 | 1 | 1 | 0 | 0 | 4 | ✓ | 1명 (14) |
| 14 | 1 | 1 | 1 | 1 | 0 | 0 | 4 | ✓ | 1명 (8) |
확인 — 여섯 명 전원이 를 만족한다. {1, 2, 3, 4, 8, 14}는 2-플렉스다. 빠진 쌍은 8–14 단 하나.
§8의 정리도 통과한다: → 유도 지름 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명 중 비율 |
|---|---|---|---|
| 극대 클리크 | 36 | 5 | 15% |
| 4-코어 | 1 | 10 | 29% |
| 극대 2-클리크 | 12 | 18 | 53% |
가라테 클럽에서 모든 쌍의 61.14%가 이미 거리 2 이내다(지름 5, 평균 거리 2.4082). 그래서 2-클리크의 최대 크기가 18명 — 학급의 절반이 넘는다. "이 18명이 한 집단"이라는 말은 아무것도 알려 주지 않는다.
완화의 정도는 네트워크의 지름에 맞춰야 한다. 평균 거리가 2.4인 네트워크에서 를 쓰면 거의 전원이 통과한다. 지름이 작고 촘촘한 자료에서는 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. 의 오른쪽 집단 {S5, S6, S7, S8}을 판정하라.
- 네 명의 유도 인접행렬을 그리고, 각 행합 를 4개 항을 전부 써서 구하라. 이 집단은 몇-플렉스인가?
- §8의 정리 를 적용하면 유도 지름 2가 보장되는가? 그리고 실제 유도 지름은 얼마인가?
- 이 집단은 2-클리크인가? 6개 쌍의 거리를 §4의 거리 행렬에서 읽어 확인하라.
- 2-클랜인가?
힌트 — S5는 이 집단 안에서 몇 명과 이어져 있는가?
먼저 직접 풀고 §16 해설과 맞춰 볼 것.
문제 2. 에 간선 S1–S6과 S2–S6 두 개를 추가한 것을 라 하자. (교실로 치면 S6을 왼쪽 무리의 두 명과 새로 이어 준 것이다.)
- 에서 여덟 명의 차수를 모두 구하라.
- 벗겨내기로 의 3-코어를 구하라. 각 단계에서 누가 왜 제거되는지 쓸 것.
- S6의 코어 번호는 얼마가 되었나? 에서와 비교해 왜 달라졌는지 설명하라.
- 만약 대신 S1–S2와 S3–S4를 추가해서 왼쪽 다섯 명을 완전한 클리크로 만들었다면 S6의 코어 번호는 어떻게 되겠는가? 이유와 함께 답하라.
힌트 — 벗겨내기는 "누가 먼저 떨어지는가"의 문제다.
S6이 살아남으려면 S7, S8이 떨어진 뒤에도 친구가 3명 남아 있어야 한다.
먼저 직접 풀고 §16 해설과 맞춰 볼 것.
16. 해설과 답 (Solutions)
문제 1 해설 (Solution 1)
(1) 무엇을 잘라내는가. §2의 8×8 행렬 에서 5, 6, 7, 8번 행과 5, 6, 7, 8번 열만 남긴다. S1~S4와의 연결은 전부 버린다 — 유도 부분그래프란 그런 뜻이다.
| S5 | S6 | S7 | S8 | |
|---|---|---|---|---|
| S5 | 0 | 1 | 0 | 0 |
| S6 | 1 | 0 | 1 | 1 |
| S7 | 0 | 1 | 0 | 1 |
| S8 | 0 | 1 | 1 | 0 |
버려진 연결에 주의하라. S5는 원래 차수 5(S1, S2, S3, S4, S6)였지만 그중 네 명이 집단 밖이라 잘려 나갔다. 이것이 k-플렉스와 n-클리크의 결정적 차이다.
| — 4개 항 전개 | 값 | 왜 그 값인가 | |
|---|---|---|---|
| S5 | 1 | 집단 안 친구는 S6 하나. S1~S4는 잘려 나갔다 | |
| S6 | 3 | S5, S7, S8 — 원래 차수 3이 그대로 유지 | |
| S7 | 2 | S6, S8. S5와는 원래 간선이 없다 | |
| S8 | 2 | S6, S7. 대칭 |
이고 최솟값은 (S5)이다. 을 만족하는 가장 작은 를 찾으면 .
답 (1) — {S5,S6,S7,S8}은 3-플렉스다. 2-플렉스는 아니다 — 2-플렉스라면 여야 하는데 S5가 1이라 실패한다. "각자 두 명까지 몰라도 된다"를 허용해야 겨우 성립하는 집단이다.
값의 의미 — 4명 집단에서 각자 2명을 몰라도 된다면 나머지는 1명뿐이다. 사실상 "친구 한 명만 있으면 통과"라는 뜻이라, 집단이라 부르기 민망한 기준이다. 실제로 S5는 이 집단 안에서 S6 한 명만 알고 있다. §7의 왼쪽 집단이 2-플렉스로 통과했던 것과 대조된다.
(2) 정리 적용.
| ? | 결론 | |||
|---|---|---|---|---|
| 3 | 4 | 3 < 3 은 거짓 ✗ | 보장되지 않는다 — 직접 재 봐야 한다 |
그래서 직접 잰다. 유도 부분그래프의 간선은 S5–S6, S6–S7, S6–S8, S7–S8 네 개다.
| 쌍 | 유도 부분그래프 안의 최단 경로 | |
|---|---|---|
| S5–S6 | S5→S6 | 1 |
| S5–S7 | S5→S6→S7 (S6을 반드시 거친다) | 2 |
| S5–S8 | S5→S6→S8 (S6을 반드시 거친다) | 2 |
| S6–S7 | S6→S7 | 1 |
| S6–S8 | S6→S8 | 1 |
| S7–S8 | S7→S8 | 1 |
답 (2) — 정리로는 보장되지 않지만, 실제 유도 지름은 2다. 정리는 충분조건일 뿐이라는 §8의 경고가 그대로 확인된다. "조건을 통과하면 반드시 지름 2"는 참이지만 그 역은 성립하지 않는다.
(3) 2-클리크 판정. 이번에는 전체 그래프 에서 잰 거리를 쓴다(§4의 표).
| 쌍 | (§4 표에서 읽음) | ? | 지름길 |
|---|---|---|---|
| S5–S6 | 1 | ✓ | 직접 연결 |
| S5–S7 | 2 | ✓ | S5→S6→S7 — S6은 집단 안 |
| S5–S8 | 2 | ✓ | S5→S6→S8 — S6은 집단 안 |
| S6–S7 | 1 | ✓ | 직접 연결 |
| S6–S8 | 1 | ✓ | 직접 연결 |
| S7–S8 | 1 | ✓ | 직접 연결 |
| 최댓값 | 2 | 6쌍 전부 통과 | |
답 (3) — 2-클리크가 맞다. 극대이기도 하다: S1~S4 중 누구를 넣어도 S7·S8과의 거리가 3이 되어 실패한다.
(4) 2-클랜 판정. (2)에서 유도 지름이 2임을 이미 구했고, (3)에서 극대 2-클리크임을 확인했다.
답 (4) — 2-클랜이다. (3)의 표에서 모든 지름길이 집단 안(S6)을 지난다는 것이 핵심이다. 의 {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) 의 차수. S1–S6과 S2–S6을 추가하면 행렬에서 네 칸이 0에서 1로 바뀐다.
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | 차수 | |
|---|---|---|---|---|---|---|---|---|---|
| S1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 4 (3→4) |
| S2 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 4 (3→4) |
| S3 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 3 (그대로) |
| S4 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 3 (그대로) |
| S5 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 5 (그대로) |
| S6 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 5 (3→5) |
| S7 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 2 (그대로) |
| S8 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 2 (그대로) |
답 (1) — 차수는 (S1, S2, S3, S4, S5, S6, S7, S8) = (4, 4, 3, 3, 5, 5, 2, 2). 간선은 12개에서 14개로 늘고, 차수 합은 24에서 28이 된다( ✓).
(2) 벗겨내기. 으로 실행한다.
| 단계 | 남은 사람과 내부 차수 | 3 미만인 사람 | 조치 |
|---|---|---|---|
| 1 | S1:4 S2:4 S3:3 S4:3 S5:5 S6:5 S7:2 S8:2 | S7, S8 | 제거 |
| 2 | 아래 표에서 다시 셈 → S1:4 S2:4 S3:3 S4:3 S5:5 S6:3 | 없음 | 종료 |
2단계의 재계산을 항까지 펼쳐 보자. 남은 여섯 명은 {S1,…,S6}이다.
| 전개 (6개 항) | 값 | 왜 그 값인가 | |
|---|---|---|---|
| S1 | 4 | S3, S4, S5 + 새 친구 S6 | |
| S2 | 4 | S3, S4, S5 + 새 친구 S6 | |
| S3 | 3 | S1, S2, S5 — 변화 없음 | |
| S4 | 3 | S1, S2, S5 — 변화 없음 | |
| S5 | 5 | S1, S2, S3, S4, S6 — 변화 없음 | |
| S6 | 3 | S1, S2, S5 — S7·S8을 잃었지만 새 친구 둘이 메웠다 |
답 (2) — 의 3-코어 = {S1, S2, S3, S4, S5, S6} (6명). 에서는 5명이었는데 S6이 합류했다. 벗겨내기는 단 1단계에서 끝난다.
4-코어도 확인해 두자(코어 번호를 확정하려면 필요하다). 차수 4 미만인 S3, S4, S7, S8을 제거하면 {S1, S2, S5, S6}이 남는데, 그 안에서 S1의 친구는 S5, S6 둘뿐(S3, S4를 잃었다)이라 4에 미달이다. S2도 마찬가지, S5와 S6은 3. 결국 전원 제거되어 4-코어는 공집합이다.
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | S8 | |
|---|---|---|---|---|---|---|---|---|
| 의 코어 번호 | 3 | 3 | 3 | 3 | 3 | 2 | 2 | 2 |
| 의 코어 번호 | 3 | 3 | 3 | 3 | 3 | 3 | 2 | 2 |
(3) S6은 왜 올라갔나. 두 경우의 2단계를 나란히 놓으면 한눈에 보인다.
| (원래) | (간선 2개 추가) | |
|---|---|---|
| S6의 전체 친구 | S5, S7, S8 | S1, 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를 추가했다면? 이때 왼쪽 다섯 명은 완전한 가 되어 차수가 (4,4,4,4,5)로 오른다. 가장 큰 클리크가 5명이 되고 가 3에서 5로 뛴다 — 대단한 개선처럼 보인다. 그런데 S6은? S6의 친구 명단은 조금도 바뀌지 않았다: 여전히 S5, S7, S8뿐이다.
| 단계 | 남은 사람과 내부 차수 | 조치 |
|---|---|---|
| 1 | S1:4 S2:4 S3:4 S4:4 S5:5 S6:3 S7:2 S8:2 | S7, S8 제거 |
| 2 | S1:4 S2:4 S3:4 S4:4 S5:5 S6:1 ← S5 하나만 남았다 | S6 제거 |
| 3 | S1:4 S2:4 S3:4 S4:4 S5:4 — 전원 통과 | 종료 |
답 (4) — S6의 코어 번호는 2 그대로다. 왼쪽 다섯 명의 코어 번호는 3에서 4로 올라가지만(4-코어 = {S1,…,S5}), S6은 아무 이득도 못 본다.
핵심: 간선을 두 개 추가한 것은 (3)과 똑같은데 결과가 정반대다. 어디에 놓느냐가 전부다. "이미 튼튼한 사람들끼리 더 묶어 주기"는 그들의 코어 번호만 올리고 바깥 사람은 그대로 두거나 오히려 격차를 벌린다.
교실 해석 — 개입은 어디에 해야 하는가
- (3)의 처방이 옳다. 주변부 학생(S6)을 핵심층 학생(S1, S2)과 이어 주면 그 학생의 코어 번호가 실제로 오른다. 두 개의 관계만으로 층이 바뀌었다
- (4)는 흔한 실패다. 이미 잘 지내는 아이들끼리 더 붙여 주는 활동은 지표를 올려 주긴 하는데(가 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이 의지하던 약한 친구들을 튼튼하게 만드는 우회 처방이다. 교실로 옮기면 "소외 학생 본인이 아니라 그 학생의 유일한 친구를 무리에 넣어 주는" 개입에 해당한다.
오늘 배운 것
- n-클리크 — 거리 이내. 거리 행렬을 이진화하면 클리크 문제가 된다. 함정: 지름길이 집단 밖을 지나면 간선 0개인 "집단"이 나온다(의 {C1,C3,C5})
- n-클랜 — 유도 부분그래프의 지름까지 확인해 그 함정을 거른다
- k-플렉스 — 각자 명까지 결석 허용, . 면 유도 지름 2 보장(비둘기집 원리)
- k-코어 — 집단 안 친구 명 이상, 벗겨내기로 즉시 계산. 해가 유일하다
- 코어 번호 ≠ 차수 — S6(차수 3, 코어 2), 가라테 32번(차수 6, 코어 3). 코어 번호는 친구의 친구가 버텨 주는가를 재귀적으로 묻는다
다음 단원 예고 — 단원 3-3. 모듈러리티 (Modularity: Scoring a Partition)
오늘까지는 "이 집단이 조건을 만족하는가"를 예/아니오로 판정했다. 다음은 점수를 매긴다 — 학급을 몇 개 모둠으로 나눈 분할 전체에 대해 "이 나눔이 얼마나 좋은가"를 하나의 숫자 로 표현한다. 핵심 아이디어는 "우연히 기대되는 것보다 얼마나 더 뭉쳐 있나" — 를 손으로 전개한다. 오늘 찾은 {S1,…,S5}와 {S6,S7,S8} 분할이 몇 점을 받는지 직접 계산해 볼 것이다.