단원 3-1Cliques: Maximal vs Maximum
클리크 — 극대와 최대
- 오늘의 질문 — 중심에서 집단으로 (Today's Question)
- 정의 — 완전 부분그래프 (Definition: Complete Subgraph)
- 손 계산 ① — 35개 삼중항 전부 (Hand Calculation ①: All 35 Triples)
- 검산 — 의 대각합 (Cross-check with the Trace)
- 손 계산 ② — 4명짜리 클리크는 없다 (Hand Calculation ②: No 4-Clique)
- 극대와 최대는 다르다 (Maximal vs Maximum)
- 손 계산 ③ — {S3,S4}가 극대인 이유 (Hand Calculation ③: Why {S3,S4} Is Maximal)
- U의 극대 클리크 네 개 (The Four Maximal Cliques of U)
- 클리크 공동소속 행렬 (Clique Co-membership Matrix)
- R 검증 (R Verification)
- 실전 준비 — 2010년 교재 파일의 오류 (A Data Error in the 2010 File)
- 가라테 클럽의 극대 클리크 36개 (36 Maximal Cliques of the Karate Club)
- 두 개의 5-클리크와 빠진 한 쌍 (Two 5-Cliques and One Missing Pair)
- 클리크는 분할이 아니다 (Cliques Are Not a Partition)
- 클리크와 실제 분열 (Cliques vs the Real Split)
- 연결정도가 크다고 뭉친 것은 아니다 (Degree Is Not Cohesion)
- 클리크의 한계 (Limitations)
- 교실 적용 (Classroom Application)
- 연습문제 (Exercises)
- 연습문제 해설과 답 (Solutions)
1. 오늘의 질문 — 중심에서 집단으로 (Today's Question)
2단계 여섯 단원 동안 우리가 던진 질문은 하나였다 — "누가 중심인가?" 연결정도·근접·매개·고유벡터·페이지랭크는 모두 정점 하나에 숫자 하나를 붙이는 지표였다. 34명 학급이면 34개의 숫자가 나오고, 그걸 크기순으로 줄 세우는 것이 분석의 끝이었다.
그런데 담임 교사가 실제로 알고 싶은 것은 그것만이 아니다.
"우리 반은 몇 개의 무리로 나뉘어 있는가?"
"누구와 누구가 한 덩어리인가?"
"모둠을 짤 때 어느 조합이 이미 서로 다 친한가?"
이것은 정점 하나에 대한 질문이 아니라 정점의 집합에 대한 질문이다. 3단계는 여기서 시작한다.
가장 엄격하고 가장 오래된 답이 클리크(clique)다. 1949년 루스와 페리(Luce & Perry)가 제안했고, 정의가 단 한 줄이다 — "서로 전부 연결된 사람들의 모임." 오늘은 이 한 줄을 손으로 끝까지 밀어붙인다.
오늘 쓸 네트워크 (Today's Networks)
1·2단계 내내 쓴 7명 무방향 네트워크 로 손 계산을 하고, 그다음 Zachary 가라테 클럽(34명)으로 실전 확인을 한다. 가라테 클럽은 SNA에서 가장 유명한 자료다 — 1970년대 미국의 한 가라테 동아리가 사범(node 1, Mr. Hi)과 관장(node 34, John A)의 갈등으로 실제로 두 쪽으로 쪼개진 기록이 남아 있기 때문이다. "네트워크 구조만 보고 분열을 맞힐 수 있는가"를 시험할 수 있는 드문 자료다.
의 인접행렬을 다시 적어 둔다(대칭, 간선 8개).
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | 차수 | |
|---|---|---|---|---|---|---|---|---|
| S1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 2 |
| S2 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 2 |
| S3 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 3 |
| S4 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 2 |
| S5 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 3 |
| S6 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 2 |
| S7 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 2 |
2. 정의 — 완전 부분그래프 (Definition: Complete Subgraph)
정점 집합 가 클리크라는 것은:
즉 안의 모든 순서 없는 쌍이 간선으로 이어져 있어야 한다. 이면 확인해야 할 쌍의 개수는
이고, 이 개가 전부 1이어야 한다. 하나라도 0이면 클리크가 아니다.
| 크기 | 확인할 쌍 | 부르는 이름 | 비고 |
|---|---|---|---|
| 1 | 0 | 정점 하나 | 확인할 쌍이 없으므로 항상 클리크(자명) |
| 2 | 1 | 간선 하나 (dyad) | 클리크 = 간선 |
| 3 | 3 | 삼각형 (triangle / triad) | 가장 작은 "흥미로운" 클리크 |
| 4 | 6 | 4-클리크 | 삼각형 개를 품는다 |
| 5 | 10 | 5-클리크 | 삼각형 개를 품는다 |
주의 — "부분그래프"는 유도 부분그래프(induced subgraph)를 말한다.
를 고를 때 간선을 고르는 것이 아니다. 정점만 고르고,
그 정점들 사이에 원래 있던 간선은 전부 따라온다.
그래서 "빠진 간선이 하나라도 있으면 탈락"이라는 판정이 성립한다.
R로 쓰면 부분행렬 A[S,S]가 대각선만 0이고 나머지가 전부 1이어야 한다는 뜻이다.
클리크가 되는 조건을 합으로 쓰면 (The Condition as a Sum)
부분행렬의 원소를 전부 더하면 검사가 한 줄이 된다. 무방향이므로 각 간선이 두 번 세어진다:
또는 순서 없는 쌍으로만 세면 와 같아야 한다. 아래에서는 쌍 단위로 세겠다 — 손으로 하기엔 그쪽이 훨씬 편하다.
3. 손 계산 ① — 35개 삼중항 전부 (Hand Calculation ①: All 35 Triples)
가장 작은 "흥미로운" 클리크는 삼각형이다. 의 7명에서 3명을 뽑는 방법은
가지. 35개를 전부 검사한다. 각 삼중항 마다 세 항
을 더하고, 합이 3이면 삼각형이다. 0인 항도 하나도 빼지 않고 적는다.
| # | 삼중항 | 합 | 판정 / 빠진 쌍 | |||
|---|---|---|---|---|---|---|
| 1 | {S1,S2,S3} | 1 | 1 | 1 | 3 | 삼각형 ★ |
| 2 | {S1,S2,S4} | 1 | 0 | 0 | 1 | S1–S4, S2–S4 없음 |
| 3 | {S1,S2,S5} | 1 | 0 | 0 | 1 | S1–S5, S2–S5 없음 |
| 4 | {S1,S2,S6} | 1 | 0 | 0 | 1 | S1–S6, S2–S6 없음 |
| 5 | {S1,S2,S7} | 1 | 0 | 0 | 1 | S1–S7, S2–S7 없음 |
| 6 | {S1,S3,S4} | 1 | 0 | 1 | 2 | S1–S4 하나만 없음 |
| 7 | {S1,S3,S5} | 1 | 0 | 0 | 1 | S1–S5, S3–S5 없음 |
| 8 | {S1,S3,S6} | 1 | 0 | 0 | 1 | S1–S6, S3–S6 없음 |
| 9 | {S1,S3,S7} | 1 | 0 | 0 | 1 | S1–S7, S3–S7 없음 |
| 10 | {S1,S4,S5} | 0 | 0 | 1 | 1 | S1–S4, S1–S5 없음 |
| 11 | {S1,S4,S6} | 0 | 0 | 0 | 0 | 셋 다 남남 |
| 12 | {S1,S4,S7} | 0 | 0 | 0 | 0 | 셋 다 남남 |
| 13 | {S1,S5,S6} | 0 | 0 | 1 | 1 | S1–S5, S1–S6 없음 |
| 14 | {S1,S5,S7} | 0 | 0 | 1 | 1 | S1–S5, S1–S7 없음 |
| 15 | {S1,S6,S7} | 0 | 0 | 1 | 1 | S1–S6, S1–S7 없음 |
| 16 | {S2,S3,S4} | 1 | 0 | 1 | 2 | S2–S4 하나만 없음 |
| 17 | {S2,S3,S5} | 1 | 0 | 0 | 1 | S2–S5, S3–S5 없음 |
| 18 | {S2,S3,S6} | 1 | 0 | 0 | 1 | S2–S6, S3–S6 없음 |
| 19 | {S2,S3,S7} | 1 | 0 | 0 | 1 | S2–S7, S3–S7 없음 |
| 20 | {S2,S4,S5} | 0 | 0 | 1 | 1 | S2–S4, S2–S5 없음 |
| 21 | {S2,S4,S6} | 0 | 0 | 0 | 0 | 셋 다 남남 |
| 22 | {S2,S4,S7} | 0 | 0 | 0 | 0 | 셋 다 남남 |
| 23 | {S2,S5,S6} | 0 | 0 | 1 | 1 | S2–S5, S2–S6 없음 |
| 24 | {S2,S5,S7} | 0 | 0 | 1 | 1 | S2–S5, S2–S7 없음 |
| 25 | {S2,S6,S7} | 0 | 0 | 1 | 1 | S2–S6, S2–S7 없음 |
| 26 | {S3,S4,S5} | 1 | 0 | 1 | 2 | S3–S5 하나만 없음 |
| 27 | {S3,S4,S6} | 1 | 0 | 0 | 1 | S3–S6, S4–S6 없음 |
| 28 | {S3,S4,S7} | 1 | 0 | 0 | 1 | S3–S7, S4–S7 없음 |
| 29 | {S3,S5,S6} | 0 | 0 | 1 | 1 | S3–S5, S3–S6 없음 |
| 30 | {S3,S5,S7} | 0 | 0 | 1 | 1 | S3–S5, S3–S7 없음 |
| 31 | {S3,S6,S7} | 0 | 0 | 1 | 1 | S3–S6, S3–S7 없음 |
| 32 | {S4,S5,S6} | 1 | 0 | 1 | 2 | S4–S6 하나만 없음 |
| 33 | {S4,S5,S7} | 1 | 0 | 1 | 2 | S4–S7 하나만 없음 |
| 34 | {S4,S6,S7} | 0 | 0 | 1 | 1 | S4–S6, S4–S7 없음 |
| 35 | {S5,S6,S7} | 1 | 1 | 1 | 3 | 삼각형 ★ |
합을 도수분포로 정리하면:
| 합 | 0 | 1 | 2 | 3 | 계 |
|---|---|---|---|---|---|
| 삼중항 개수 | 4 | 24 | 5 | 2 | 35 |
| 뜻 | 완전 남남 | 친구 한 쌍 | 삼각형 직전 | 삼각형 |
의 삼각형은 정확히 2개다: {S1,S2,S3}, {S5,S6,S7}.
그리고 이 두 삼각형은 정점을 하나도 공유하지 않는다(서로소). 이 사실은 §5에서 결정적으로 쓰인다.
노란 줄(합 = 2)을 눈여겨보라 — 다섯 개 전부에 S4가 들어 있다.
{S1,S3,S4}, {S2,S3,S4}, {S3,S4,S5}, {S4,S5,S6}, {S4,S5,S7}. S4는 자기가 낀 삼각형이 하나도 없는데(단원 2-3에서 매개 중심성 1위였던 바로 그 학생), "간선 하나만 더 있으면 삼각형이 될 뻔한" 다섯 개 삼중항 전부에 들어 있다. "다리를 놓는 사람은 자기 주변이 닫혀 있지 않다"는 구조적 사실이 여기서 숫자로 처음 드러난다.
4. 검산 — 의 대각합 (Cross-check with the Trace)
단원 1-3에서 가 에서 출발해 3걸음 만에 자기에게 돌아오는 걷기의 수라는 걸 배웠다. 무방향 그래프에서 길이 3의 닫힌 걷기는 삼각형을 도는 것밖에 없으므로:
왜 6으로 나누는가? 삼각형 하나가 대각에 여섯 번 기록되기 때문이다 — 출발점 3가지 × 도는 방향 2가지 = 6.
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | 합 | |
|---|---|---|---|---|---|---|---|---|
| 2 | 2 | 2 | 0 | 2 | 2 | 2 | 12 | |
| 가 낀 삼각형 수 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 6 |
§3에서 손으로 센 2개와 정확히 일치한다. S4만 대각 원소가 0이라는 것도 §3의 관찰과 맞물린다 — S4는 어떤 삼각형에도 속하지 않는다.
두 가지 세는 방식의 비용 차이
삼중항 나열은 번 — 이면 5984번, 이면 161,700번이다. 대각합은 행렬 곱 두 번이면 끝난다. 손으로는 나열, 컴퓨터로는 대각합이 정석이다. 다만 나열은 "어느 삼중항이 삼각형인지"까지 알려주고, 대각합은 개수만 알려준다.
5. 손 계산 ② — 4명짜리 클리크는 없다 (Hand Calculation ②: No 4-Clique)
삼각형이 2개 있으니 다음 질문은 자연스럽다 — 4명이 서로 전부 친한 조는 있는가? 후보는 가지이고, 각 후보마다 개 쌍을 검사해야 한다. 35개 후보의 간선 수 분포부터 보자.
| 4인 조 안의 간선 수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 (완전) | 계 |
|---|---|---|---|---|---|---|---|---|
| 후보 개수 | 0 | 4 | 19 | 10 | 2 | 0 | 0 | 35 |
완전한 4인 조는 0개다. 가장 근접한 두 후보(간선 4개, 완전까지 2개 부족)를 6개 쌍 전부 전개해서 확인한다.
후보 A — {S1,S2,S3,S4} (Left Group Plus the Bridge)
| 쌍 | S1–S2 | S1–S3 | S1–S4 | S2–S3 | S2–S4 | S3–S4 | 합 |
|---|---|---|---|---|---|---|---|
| 1 | 1 | 0 | 1 | 0 | 1 | 4 / 6 |
빠진 쌍은 S1–S4와 S2–S4. S4는 S3하고만 친하다.
후보 B — {S4,S5,S6,S7} (Right Group Plus the Bridge)
| 쌍 | S4–S5 | S4–S6 | S4–S7 | S5–S6 | S5–S7 | S6–S7 | 합 |
|---|---|---|---|---|---|---|---|
| 1 | 0 | 0 | 1 | 1 | 1 | 4 / 6 |
35개를 다 세지 않고 끝내는 논증 (A One-Line Proof)
4-클리크는 그 안에 삼각형을 개 품는다.
그런데 의 삼각형은 전부 2개이고(§3), 그 둘은 정점을 하나도 공유하지 않는다. 따라서 어떤 4명을 골라도 그 안에 들어갈 수 있는 삼각형은 많아야 1개다.
1 < 4 이므로 4-클리크는 존재할 수 없다. 35개를 다 셀 필요가 없다. ∎
이 논증에는 보너스가 있다 — 같은 이유로 5-클리크, 6-클리크도 없다. 5-클리크는 삼각형 개를 품어야 하니 더더욱 불가능하다. 그래서 에서 만들 수 있는 가장 큰 클리크의 크기는 3이다.
6. 극대와 최대는 다르다 (Maximal vs Maximum)
여기가 이 단원에서 가장 많이 헷갈리는 지점이다. 두 단어가 한국어로도 비슷하고 영어로도 비슷하다.
| 극대 클리크 (maximal clique) | 최대 클리크 (maximum clique) | |
|---|---|---|
| 정의 | 클리크이면서, 어떤 정점을 하나 더 넣어도 클리크가 유지되지 않는 것 | 그 그래프의 모든 클리크 중 크기가 가장 큰 것 |
| 비교 대상 | 자기 자신의 이웃만 본다 (지역적) | 그래프 전체를 본다 (전역적) |
| 개수 | 보통 여러 개 (에서 4개) | 보통 1~2개 (에서 2개) |
| 크기 | 제각각 — 2일 수도 3일 수도 있다 | 전부 같다 (= 클리크 수 ) |
| 포함관계 | 최대 클리크는 반드시 극대 클리크다 | 극대 클리크가 최대일 필요는 없다 |
| R 함수 | max_cliques(g) | largest_cliques(g), clique_num(g) |
영어 이름이 헷갈리는 이유
R의 max_cliques()는 이름과 달리 극대(maximal) 클리크를 준다.
최대(maximum)를 원하면 largest_cliques()다.
이름을 믿지 말고 "몇 개가, 어떤 크기로 나오는가"로 구분하라 —
크기가 제각각이면 극대, 전부 같으면 최대다.
왜 이 구분이 중요한가 (Why the Distinction Matters)
클리크를 전부 나열하면 쓸모없이 많아진다. 의 클리크를 크기별로 세면(정점 하나짜리 포함):
| 크기 | 1 | 2 | 3 | 계 |
|---|---|---|---|---|
| 클리크 개수 | 7 | 8 | 2 | 17 |
| 그것이 뜻하는 것 | 정점 수 | 간선 수 | 삼각형 수 |
17개를 다 보고할 수는 없다. 그리고 대부분은 다른 클리크에 통째로 먹힌다 — {S1,S2}는 {S1,S2,S3} 안에 이미 들어 있으니 따로 보고할 이유가 없다. 극대만 남기면 그런 중복이 전부 사라진다. 는 17개 → 4개로 줄어든다.
7. 손 계산 ③ — {S3,S4}가 극대인 이유 (Hand Calculation ③: Why {S3,S4} Is Maximal)
"크기 2짜리 극대 클리크"라는 말이 처음에는 이상하게 들린다. 간선 하나가 어떻게 "더 이상 키울 수 없는 집단"인가? 정의대로 바깥 정점 5명 전부를 하나씩 넣어 보면 답이 나온다.
에 정점 를 추가하려면 두 조건이 동시에 만족돼야 한다: 그리고 .
| 추가 후보 | 둘 다 1? | 판정 | ||
|---|---|---|---|---|
| S1 | 1 | 0 | ✗ | S1은 S4와 남남 → 실패 |
| S2 | 1 | 0 | ✗ | S2는 S4와 남남 → 실패 |
| S5 | 0 | 1 | ✗ | S5는 S3와 남남 → 실패 |
| S6 | 0 | 0 | ✗ | 둘 다 남남 → 실패 |
| S7 | 0 | 0 | ✗ | 둘 다 남남 → 실패 |
5명 전부 실패. 따라서 {S3,S4}는 극대 클리크다. 크기가 2일 뿐, "더 이상 키울 수 없다"는 조건은 완벽히 만족한다. 같은 검사를 에 해도 결과는 같다.
대조 — {S1,S2}는 왜 극대가 아닌가 (Contrast: Why {S1,S2} Is Not Maximal)
| 추가 후보 | 둘 다 1? | 판정 | ||
|---|---|---|---|---|
| S3 | 1 | 1 | ✓ | 추가 가능 → {S1,S2}는 극대가 아니다 |
| S4 | 0 | 0 | ✗ | 둘 다 남남 |
| S5 | 0 | 0 | ✗ | 둘 다 남남 |
| S6 | 0 | 0 | ✗ | 둘 다 남남 |
| S7 | 0 | 0 | ✗ | 둘 다 남남 |
단 하나(S3)만 통과해도 극대가 아니다. 는 에 흡수된다.
크기가 작은 극대 클리크는 "약한 집단"이 아니라 "고립된 관계"다.
{S3,S4}가 극대라는 것은 S3와 S4의 공통 친구가 한 명도 없다는 뜻이다. 교실로 옮기면 — 두 학생이 서로 친하지만 그 우정을 함께 나눌 제3자가 없다. 이런 관계는 겉보기와 달리 취약하다. 둘 중 하나가 전학 가면 남은 쪽은 그 방향으로 아무 연결도 남지 않는다.
8. U의 극대 클리크 네 개 (The Four Maximal Cliques of U)
| # | 극대 클리크 | 크기 | 최대인가? | 해석 |
|---|---|---|---|---|
| 1 | {S1,S2,S3} | 3 | 예 | 왼쪽 모둠 — 셋이 서로 전부 친하다 |
| 2 | {S5,S6,S7} | 3 | 예 | 오른쪽 모둠 — 셋이 서로 전부 친하다 |
| 3 | {S3,S4} | 2 | 아니오 | 왼쪽 모둠과 다리를 잇는 관계 |
| 4 | {S4,S5} | 2 | 아니오 | 오른쪽 모둠과 다리를 잇는 관계 |
최대 클리크의 크기(클리크 수, clique number)는
이고, 그 크기를 달성하는 최대 클리크는 {S1,S2,S3}과 {S5,S6,S7} 두 개다.
교실 읽기 — 네 개의 극대 클리크가 말해 주는 것
- 진짜 모둠은 두 개다. {S1,S2,S3}과 {S5,S6,S7}. 이 6명은 모둠 안에서 누구를 짝지어도 이미 서로 친하다.
- S4는 어느 모둠에도 속하지 못한다. 극대 클리크 두 개에 이름을 올렸지만 둘 다 크기 2다. S4는 "두 모둠 사이에 걸쳐 있는" 것이 아니라 어느 쪽에도 완전히 들어가지 못하고 있다.
- 단원 2-3에서 S4는 매개 중심성 1위였다. 이제 그 이면이 보인다 — 중개자는 소속이 없다. 정보는 다 지나가지만 함께 밥 먹을 무리가 없다.
9. 클리크 공동소속 행렬 (Clique Co-membership Matrix)
극대 클리크 목록만으로는 "누구와 누구가 자주 같이 묶이는가"가 한눈에 안 들어온다. 그래서 공동소속 행렬 를 만든다:
손으로는 극대 클리크 4개를 하나씩 훑으며 그 안의 모든 쌍(자기 자신 포함)에 1씩 더하면 된다.
| 극대 클리크 | 이 클리크가 1을 더해 주는 칸 |
|---|---|
| {S1,S2,S3} | (1,1),(1,2),(1,3), (2,1),(2,2),(2,3), (3,1),(3,2),(3,3) — 9칸 |
| {S5,S6,S7} | (5,5),(5,6),(5,7), (6,5),(6,6),(6,7), (7,5),(7,6),(7,7) — 9칸 |
| {S3,S4} | (3,3),(3,4), (4,3),(4,4) — 4칸 |
| {S4,S5} | (4,4),(4,5), (5,4),(5,5) — 4칸 |
다 더하면:
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | |
|---|---|---|---|---|---|---|---|
| S1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| S2 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| S3 | 1 | 1 | 2 | 1 | 0 | 0 | 0 |
| S4 | 0 | 0 | 1 | 2 | 1 | 0 | 0 |
| S5 | 0 | 0 | 0 | 1 | 2 | 1 | 1 |
| S6 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| S7 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
보라색 대각선이 이 행렬의 핵심이다:
| 정점 | S1 | S2 | S3 | S4 | S5 | S6 | S7 |
|---|---|---|---|---|---|---|---|
| = 소속 극대 클리크 수 | 1 | 1 | 2 | 2 | 2 | 1 | 1 |
| 차수 | 2 | 2 | 3 | 2 | 3 | 2 | 2 |
인 정점은 "여러 집단에 걸친 사람"이다.
S3, S4, S5 셋이 여기 해당한다. 차수는 S4가 2로 가장 낮은데도 S3·S5와 나란히 2개의 극대 클리크에 속한다. 연결의 개수가 아니라 연결의 배치가 소속 수를 결정한다 — S4의 친구 2명이 서로 남남이라 두 조각으로 갈라졌기 때문이다.
10. R 검증 (R Verification)
library(igraph)
## 7명 네트워크 U
nm <- paste0("S", 1:7)
U <- matrix(0, 7, 7, dimnames = list(nm, nm))
el <- rbind(c(1,2), c(1,3), c(2,3), c(3,4), c(4,5), c(5,6), c(5,7), c(6,7))
for (i in 1:nrow(el)) { U[el[i,1], el[i,2]] <- 1; U[el[i,2], el[i,1]] <- 1 }
g <- graph_from_adjacency_matrix(U, mode = "undirected")
## ── 삼각형 (§3, §4) ──────────────────────────────
sum(count_triangles(g)) / 3 # 2
sum(diag(U %*% U %*% U)) / 6 # 2 ← 대각합 검산
count_triangles(g) # 1 1 1 0 1 1 1 ← S4만 0
## ── 극대 클리크 (§8) ─────────────────────────────
max_cliques(g) # 4개: {S4,S5} {S3,S4} {S1,S2,S3} {S5,S6,S7}
length(max_cliques(g)) # 4
## ── 최대 클리크 (§6) ─────────────────────────────
clique_num(g) # 3 ← ω(U)
largest_cliques(g) # 2개: {S1,S2,S3} {S5,S6,S7}
## ── 모든 클리크의 크기 분포 (§6) ─────────────────
table(sapply(cliques(g, min = 1), length))
# 1 2 3
# 7 8 2 ← 정점 7, 간선 8, 삼각형 2
## ── 공동소속 행렬 K (§9) ─────────────────────────
K <- matrix(0, 7, 7, dimnames = list(nm, nm))
for (k in max_cliques(g)) {
v <- as.integer(k)
for (a in v) for (b in v) K[a, b] <- K[a, b] + 1
}
diag(K) # 1 1 2 2 2 1 1
출력 순서를 믿지 말 것
max_cliques()가 돌려주는 목록의 순서는 정해져 있지 않다
(내부 탐색 순서에 따라 크기 2짜리가 먼저 나올 수도 있다).
크기순으로 보고 싶으면 직접 정렬해야 한다:
mc[order(-sapply(mc, length))].
또 원소는 정점 이름이 아니라 igraph 정점 객체라
as.integer()나 names()로 꺼내 써야 한다.
11. 실전 준비 — 2010년 교재 파일의 오류 (A Data Error in the 2010 File)
이제 34명짜리 실제 자료로 넘어간다. 그런데 R_SNA_2010/karate_net.txt를 읽자마자
숫자가 표준값과 다르다. 확인 절차를 남겨 둔다 —
남의 자료 파일은 항상 먼저 의심하는 것이 SNA의 기본기다.
kel <- as.matrix(read.table("karate_net.txt"))
nrow(kel) # 78 ← 줄 수는 맞다
g <- simplify(graph_from_edgelist(kel, directed = FALSE))
ecount(g) # 77 ← 하나가 사라졌다!
## 중복된 무방향 쌍 찾기 — 각 줄을 정렬한 뒤 중복 검사
k2 <- t(apply(kel, 1, sort))
k2[duplicated(k2), , drop = FALSE]
# V1 V2
# [1,] 9 33 ← 9-33이 두 번 적혀 있다
## 표준 Zachary 차수와 대조
known <- c(16,9,10,6,3,4,4,4,5,2,3,1,2,5,2,2,2,2,2,3,2,2,2,5,3,3,2,4,3,4,4,6,12,17)
which(degree(g) != known) # 9 31
degree(g)[c(9, 31)] # 4 3 (표준값은 5 4)
## → 9-31 간선이 누락되고 그 자리에 9-33이 중복 기재된 것
gk <- add_edges(g, c(9, 31))
ecount(gk) # 78
all(degree(gk) == known) # TRUE ← 34개 차수가 전부 일치
정리 — 파일에는 오류가 두 겹으로 겹쳐 있었다.
- 줄 수는 78로 맞아서
nrow()만 보면 정상으로 보인다. 9 33이 두 번 적혀 있고9 31이 빠져 있다.simplify()가 중복을 지우면서 간선이 77개로 줄어든다. 이 상태로 분석하면 9번의 차수가 5가 아니라 4, 31번은 4가 아니라 3이 된다.
수정 후의 기본 지표(이제부터 나오는 모든 수치는 수정본 기준이다):
| 지표 | 값 | 계산 |
|---|---|---|
| 정점 수 | 34 | |
| 간선 수 | 78 | |
| 밀도 | 0.1390 | |
| 차수 합 | 156 | |
| 평균 차수 | 4.5882 | |
| 삼각형 수 | 45 | |
| 1번(Mr. Hi) 차수 | 16 | |
| 34번(John A) 차수 | 17 |
12. 가라테 클럽의 극대 클리크 36개 (36 Maximal Cliques of the Karate Club)
mck <- max_cliques(gk)
length(mck) # 36
table(sapply(mck, length))
# 2 3 4 5
# 11 21 2 2
clique_num(gk) # 5
largest_cliques(gk) # {1,2,3,4,8} {1,2,3,4,14}
table(sapply(cliques(gk, min = 1), length))
# 1 2 3 4 5
# 34 78 45 11 2
| 크기 | 극대 클리크 개수 | 모든 클리크 개수 | 읽는 법 |
|---|---|---|---|
| 1 | 0 | 34 | = 정점 수. 고립점이 없으므로 극대는 0개 |
| 2 | 11 | 78 | = 간선 수. 그중 11개는 공통 친구가 전혀 없다 |
| 3 | 21 | 45 | = 삼각형 수. 45개 중 21개가 더 못 키우는 삼각형 |
| 4 | 2 | 11 | 4-클리크 11개 중 9개는 5-클리크에 흡수된다 |
| 5 | 2 | 2 | 최대 클리크 — |
| 계 | 36 | 170 | 극대만 남기면 170 → 36으로 줄어든다 |
"모든 클리크" 열의 처음 세 줄은 우리가 이미 아는 값이다.
크기 1 = = 34, 크기 2 = = 78, 크기 3 = 삼각형 수 = 45. 클리크 열거는 새로운 개념이 아니라 1단계에서 센 것들을 크기별로 이어 붙인 것이다. 크기 4부터가 진짜 새 정보다.
크기 4 이상의 극대 클리크 4개만 뽑으면:
| 극대 클리크 | 크기 | 진영 | 해석 |
|---|---|---|---|
| {1, 2, 3, 4, 8} | 5 | 전원 Mr. Hi | 사범 쪽 핵심 |
| {1, 2, 3, 4, 14} | 5 | 전원 Mr. Hi | 사범 쪽 핵심 |
| {24, 30, 33, 34} | 4 | 전원 John A | 관장 쪽 핵심 |
| {9, 31, 33, 34} | 4 | 전원 John A | 관장 쪽 핵심 (9-31은 §11에서 복원한 간선!) |
§11의 데이터 오류를 고치지 않았다면 {9,31,33,34}는 아예 나타나지 않는다. 간선 하나가 4-클리크 하나를 통째로 없앤다 — 클리크가 얼마나 예민한 지표인지 보여 주는 사례다.
13. 두 개의 5-클리크와 빠진 한 쌍 (Two 5-Cliques and One Missing Pair)
최대 클리크 두 개를 나란히 놓으면 이상하리만치 닮았다.
다섯 명 중 네 명이 같다. 그렇다면 합집합 6명이 6-클리크가 되지 않을까? 개 쌍을 전부 검사한다.
| # | 쌍 | # | 쌍 | # | 쌍 | |||
|---|---|---|---|---|---|---|---|---|
| 1 | 1–2 | 1 | 6 | 2–3 | 1 | 11 | 3–8 | 1 |
| 2 | 1–3 | 1 | 7 | 2–4 | 1 | 12 | 3–14 | 1 |
| 3 | 1–4 | 1 | 8 | 2–8 | 1 | 13 | 4–8 | 1 |
| 4 | 1–8 | 1 | 9 | 2–14 | 1 | 14 | 4–14 | 1 |
| 5 | 1–14 | 1 | 10 | 3–4 | 1 | 15 | 8–14 | 0 |
15개 쌍 중 14개가 연결돼 있다. 딱 하나, 8–14가 없다.
이 한 쌍 때문에 6-클리크가 되지 못하고, 대신 5-클리크 두 개로 쪼개진다. 그리고 두 5-클리크는 4명(= 자기 크기의 80%)을 공유한다.
8번과 14번은 누구와 친한가 (The Neighbourhoods of 8 and 14)
| 정점 | 차수 | 이웃 전체 |
|---|---|---|
| 8 | 4 | 1, 2, 3, 4 — {1,2,3,4}가 이웃의 전부 |
| 14 | 5 | 1, 2, 3, 4, 34 — {1,2,3,4}에 34번이 추가 |
둘 다 {1,2,3,4} 전원과 친한데 서로는 모른다. 그래서 {1,2,3,4}에 8을 붙이거나 14를 붙일 수는 있어도 둘 다는 못 붙인다.
그렇다면 는 어떤 지위인가? 6개 쌍이 전부 1이므로 클리크는 맞다.
하지만 8번과 14번이 각각 추가 가능하므로 극대는 아니다.
그래서 max_cliques()의 36개 목록에 {1,2,3,4}는 나타나지 않는다.
Am <- as.matrix(as_adjacency_matrix(gk))
sum(Am[c(1,2,3,4), c(1,2,3,4)]) / 2 # 6 = C(4,2) → 클리크 맞음
which(Am[1,]==1 & Am[2,]==1 & Am[3,]==1 & Am[4,]==1)
# 8 14 ← 넷 모두와 친한 바깥 정점이 둘 → 극대 아님
Am[8, 14] # 0
교실 읽기 — "거의 하나인 두 무리"
사범(1번) 주변에 {1,2,3,4}라는 단단한 핵이 있고, 8번과 14번이 그 핵에 각각 붙어 있지만 서로는 모른다. 이런 그림은 교실에서 흔하다 — 중심 4인방이 있고, 그 주변에 "4인방과는 다 친한데 자기들끼리는 접점이 없는" 학생이 여럿 붙는 형태다. 개입 지점이 명확하다: 8번과 14번을 이어 주면 6명짜리 큰 무리가 즉시 만들어진다. 클리크 분석의 실용적 가치는 이런 "한 칸만 채우면 되는 자리"를 짚어 주는 데 있다.
14. 클리크는 분할이 아니다 (Cliques Are Not a Partition)
"우리 반을 몇 개 무리로 나누라"는 요구에 클리크는 답하지 못한다. 극대 클리크는 서로 겹치기 때문이다. 각 정점이 몇 개의 극대 클리크에 속하는지 34명 전부 세어 보자.
| 정점 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 소속 극대 클리크 수 | 13 | 6 | 7 | 3 | 2 | 3 | 3 | 1 | 3 | 2 | 2 | 1 | 1 | 2 | 1 | 1 | 1 |
| 정점 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
| 소속 극대 클리크 수 | 1 | 1 | 2 | 1 | 1 | 1 | 3 | 2 | 2 | 1 | 3 | 2 | 2 | 2 | 4 | 9 | 14 |
| 순위 | 정점 | 소속 극대 클리크 수 | 차수 | 비고 |
|---|---|---|---|---|
| 1 | 34 (John A) | 14 | 17 | 관장 |
| 2 | 1 (Mr. Hi) | 13 | 16 | 사범 |
| 3 | 33 | 9 | 12 | 관장 진영 2인자 |
| 4 | 3 | 7 | 10 | 두 진영에 걸친 인물 |
| 5 | 2 | 6 | 9 | 사범 진영 |
| 6 | 32 | 4 | 6 | 관장 진영 |
34번 한 사람이 36개 중 14개, 즉 39%의 극대 클리크에 등장한다.
1번은 13개(36%). 두 사람만으로 27개다. "극대 클리크 목록"을 그대로 집단 목록으로 읽으면 안 되는 이유가 이것이다 — 같은 사람이 계속 다시 나온다. 클리크는 분할(partition)이 아니라 피복(cover)이다.
반대쪽 끝도 보자. 극대 클리크에 딱 한 번만 등장하는 정점이 12명이다:
8 12 13 15 16 17 18 19 21 22 23 27
교실 읽기 — 소속 수는 "사회적 다면성"의 지표다
- 소속 수 1인 학생 12명: 이들이 속한 무리는 딱 하나다. 그 무리에서 문제가 생기면 돌아갈 곳이 없다. 차수가 낮지 않아도(예: 8번은 차수 4) 위험군일 수 있다.
- 소속 수가 큰 학생(1번 13개, 34번 14개): 여러 무리에 동시에 낀다. 학급 행사를 준비할 때 가장 넓게 말이 통하는 학생이다.
- 주의 — 소속 수는 차수와 다르다. 3번은 차수 10인데 소속 7개, 32번은 차수 6인데 소속 4개다. 4번은 차수 6인데 소속이 3개뿐이다 (이웃이 서로 촘촘히 얽혀 큰 클리크 하나로 뭉쳐 버려서다).
15. 클리크와 실제 분열 (Cliques vs the Real Split)
가라테 클럽은 실제로 두 진영으로 쪼개졌다. 기록된 소속은 다음과 같다.
| 진영 | 인원 | 구성원 |
|---|---|---|
| Mr. Hi (1번 사범) | 16 | 1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 17, 18, 20, 22 |
| John A (34번 관장) | 18 | 9, 10, 15, 16, 19, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34 |
이제 질문 — 클리크만 보고 이 분열을 맞힐 수 있었을까? 극대 클리크 36개 중 두 진영에 걸친 것이 몇 개인지 세어 보자.
| # | 혼합 극대 클리크 | 크기 | Mr. Hi 쪽 | John A 쪽 |
|---|---|---|---|---|
| 1 | {3, 10} | 2 | 3 | 10 |
| 2 | {3, 28} | 2 | 3 | 28 |
| 3 | {3, 29} | 2 | 3 | 29 |
| 4 | {1, 32} | 2 | 1 | 32 |
| 5 | {20, 34} | 2 | 20 | 34 |
| 6 | {14, 34} | 2 | 14 | 34 |
| 7 | {2, 31} | 2 | 2 | 31 |
| 8 | {1, 3, 9} | 3 | 1, 3 | 9 |
| 9 | {3, 9, 33} | 3 | 3 | 9, 33 |
36개 중 9개(25%)만 진영을 넘나든다. 그리고 그 9개 중 7개는 크기가 2다.
크기 3짜리 두 개도 9번 한 사람이 끼어서 생긴 것이다. 크기 4 이상의 극대 클리크 4개는 전부 한 진영 안에 완전히 들어 있다(§12). 즉 의미 있는 크기의 클리크는 진영을 절대 넘지 않았다.
간선 수준에서도 같은 그림이다. 78개 간선 중 진영을 가로지르는 것은 10개뿐이다.
1–9 1–32 2–31 3–9 3–10 3–28 3–29 3–33 14–34 20–34
10개 중 5개(3–9, 3–10, 3–28, 3–29, 3–33)가 3번 한 사람에게서 나온다. 3번은 사범 진영이면서 관장 진영에 다리를 다섯 개나 걸치고 있었던 인물이다.
두 지도자는 서로 아는 사이였을까 (Were the Two Leaders Connected?)
any(sapply(mck, function(k) all(c(1, 34) %in% as.integer(k))))
# FALSE ← 1번과 34번이 함께 든 극대 클리크가 하나도 없다
are_adjacent(gk, 1, 34)
# FALSE ← 애초에 서로 간선조차 없다
동아리에서 가장 연결이 많은 두 사람(차수 16과 17)이 서로 직접 연결돼 있지 않다.
클리크는 여기서 아무 얘기도 해 주지 않는다 — "1번과 34번이 같은 클리크에 없다"는 사실은 알려 주지만, 34명이 정확히 어느 쪽으로 갈지는 못 맞힌다. 그러려면 겹치지 않는 분할을 만들어 주는 도구가 필요하다. 그게 단원 3-3(모듈러리티)과 3-4(커뮤니티 탐지)다.
16. 연결정도가 크다고 뭉친 것은 아니다 (Degree Is Not Cohesion)
34번은 차수 17로 1위, 1번은 16으로 2위다. 그런데 이웃들끼리는 얼마나 친할까? "정점 의 이웃 집합이 클리크에 얼마나 가까운가"를 재면 된다.
분모는 이웃들이 완전그래프였다면 있었을 간선 수다. 이면 와 그 이웃 전체가 하나의 클리크를 이룬다.
| 정점 | 차수 | 이웃들 사이 실제 간선 | 완전에 필요한 수 | |
|---|---|---|---|---|
| 1 (Mr. Hi) | 16 | 18 | 0.1500 | |
| 34 (John A) | 17 | 15 | 0.1103 |
34번은 이웃이 더 많은데(17 > 16) 이웃들 사이의 간선은 더 적다(15 < 18).
그래서 비율이 0.1103으로 1번의 0.15보다 낮다. 1번의 이웃들은 서로 더 얽혀 있고, 34번의 이웃들은 34번을 통해서만 서로 연결된 경우가 많다. 그 결과가 §12에도 그대로 나타났다 — 5-클리크 두 개는 전부 1번 쪽이고, 34번 쪽 최대는 4-클리크다.
교실 읽기 — 두 종류의 인기 학생
- 1번형(응집형): 친구가 많고, 그 친구들끼리도 서로 친하다. 단단한 무리의 중심. 이 학생을 통하지 않아도 무리는 유지된다.
- 34번형(방사형): 친구는 더 많은데 친구들끼리는 잘 모른다. "허브"에 가깝다. 이 학생이 빠지면 주변이 흩어진다 — 단원 2-3의 매개 중심성이 높게 나올 구조다.
- 차수만 보면 34번 > 1번이지만, "무리를 만드는 힘"은 1번이 더 크다. 반장 선출이나 모둠 재편 때 두 유형은 전혀 다르게 작동한다.
17. 클리크의 한계 (Limitations)
오늘 배운 도구는 정의가 아름답지만 실제로 쓰기엔 세 가지 문제가 있다.
| # | 한계 | 이 노트에서 본 증거 |
|---|---|---|
| 1 | 지나치게 엄격하다. 간선 하나만 빠져도 클리크가 깨진다 | §13 — 8–14 한 쌍 때문에 6-클리크가 5-클리크 두 개로 쪼개졌다. §12 — 파일 오류로 간선 하나가 없어지자 4-클리크 하나가 통째로 사라졌다 |
| 2 | 너무 많이 나온다. 34명에서 36개 | §12 — 36개 중 11개는 크기 2다. 목록을 보고 "무리가 36개"라고 할 수는 없다 |
| 3 | 겹친다 — 분할이 아니다 | §14 — 34번 한 사람이 14개, 1번이 13개에 등장한다. "각자 어느 무리 소속인가"에 답할 수 없다 |
세 한계에 각각 대응하는 다음 단원들
- 한계 1 → 단원 3-2: 조건을 완화한다. "거리 2 이내면 인정"(n-클리크), "명까지는 몰라도 인정"(k-플렉스), "안쪽에 친구가 명 이상이면 인정"(k-코어)
- 한계 2·3 → 단원 3-3, 3-4: 겹치지 않는 분할에 점수를 매기고(모듈러리티 ), 그 점수를 최대로 만드는 분할을 찾는다(Girvan-Newman, Louvain)
18. 교실 적용 (Classroom Application)
교우관계 설문(“같이 모둠 하고 싶은 친구를 적어 주세요”)을 무방향으로 정리했다고 하자. 클리크 분석에서 실제로 건질 수 있는 것은 다음 네 가지다.
| # | 보는 것 | 교실에서의 의미 | 할 수 있는 일 |
|---|---|---|---|
| 1 | 크기 4 이상의 극대 클리크 | 이미 완성된 또래집단. 서로 누구를 짝지어도 이미 친하다 | 모둠을 짤 때 이 조합은 굳이 섞지 않아도 된다. 반대로 새 관계를 만들고 싶다면 일부러 갈라 놓을 지점 |
| 2 | 거의 완성된 클리크 (한 쌍만 빠진 집합) | §13의 {1,2,3,4,8,14}처럼 간선 하나만 채우면 큰 무리가 된다 | 그 두 학생에게 같은 역할을 맡긴다. 개입 비용이 가장 낮고 효과가 가장 큰 자리 |
| 3 | 소속 극대 클리크 수 | 1이면 돌아갈 무리가 하나뿐, 클수록 여러 무리에 낀다 | 소속 수 1이면서 그 클리크 크기도 2인 학생은 관찰 대상. 차수가 낮지 않아도 위험할 수 있다 |
| 4 | 크기 2짜리 극대 클리크 | 공통 친구가 한 명도 없는 단짝. §7의 {S3,S4} 같은 관계 | 두 사람만의 폐쇄적 관계다. 한쪽이 결석·전학하면 다른 쪽이 즉시 고립된다 |
하지 말아야 할 것
- 극대 클리크 목록을 그대로 "우리 반 무리 목록"으로 발표하지 말 것. 34명에서 36개가 나온다. 겹치고, 대부분 크기 2~3이다
- 크기 2짜리 극대 클리크를 "집단"이라고 부르지 말 것. 그건 집단이 아니라 고립된 한 쌍이다
- 클리크에 안 나온다고 "소외 학생"으로 단정하지 말 것. §16의 34번처럼 연결이 가장 많으면서도 큰 클리크에 못 드는 유형이 있다. 클리크는 응집을 재지 소외를 재지 않는다
19. 연습문제 (Exercises)
연습문제 1 — 에 간선 S2–S4를 하나 추가하면
§3의 35행 표를 다시 보고, 다음을 손으로 답하라.
- 새로 삼각형이 되는 삼중항은 어느 것인가? (힌트: 합이 2였던 다섯 개 중에서 찾는다)
- 삼각형의 총 개수는 몇 개가 되는가?
- 는 여전히 극대 클리크인가? §7처럼 바깥 정점 5명을 전부 검사하라.
- 바뀐 네트워크의 극대 클리크 목록을 모두 쓰고, 개수를 세라.
- 최대 클리크의 크기 는 얼마인가?
→ 먼저 풀고 §20 해설과 맞춰 볼 것.
연습문제 2 — 에 간선을 딱 하나 더해 4-클리크를 만들 수 있는가?
- 4-클리크가 되려면 4인 조 안에 간선이 몇 개 있어야 하는가?
- §5의 분포표에서, 간선을 하나만 더하면 완전해지는 4인 조가 되려면 지금 간선이 몇 개여야 하는가? 그런 4인 조가 에 있는가?
- 답이 "없다"라면, 몇 개의 간선을 더해야 4-클리크가 만들어지는가? 구체적으로 어느 4인 조에 어느 간선을 더하면 되는지 하나만 제시하라.
→ 먼저 풀고 §20 해설과 맞춰 볼 것.
연습문제 3 — 가라테 클럽에서 3번은 왜 특별한가?
§14의 표와 §15의 혼합 클리크 목록·교차 간선 목록을 이용하라.
- 3번이 속한 극대 클리크는 몇 개인가? 그중 진영을 넘나드는 것은 몇 개인가?
- 진영을 가로지르는 간선 10개 중 3번이 한쪽 끝인 것은 몇 개인가? 비율로는 얼마인가?
- 3번의 차수는 10이다. 3번이 5-클리크 {1,2,3,4,8}과 {1,2,3,4,14} 양쪽에 모두 속하면서 동시에 관장 진영과도 이어져 있다는 사실을 교실 상황으로 옮겨 설명하라. 이 학생을 다른 반으로 보내면 무슨 일이 일어나겠는가?
→ 먼저 풀고 §20 해설과 맞춰 볼 것.
20. 연습문제 해설과 답 (Solutions)
20-1. 연습문제 1 해설 — S2–S4를 추가하면 (Solution 1)
① 무엇이 바뀌는가 — 인접행렬
바꾸는 칸은 딱 두 개다: 와 를 0에서 1로.
| S1 | S2 | S3 | S4 | S5 | S6 | S7 | 새 차수 | |
|---|---|---|---|---|---|---|---|---|
| S1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 2 |
| S2 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 3 (↑1) |
| S3 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 3 |
| S4 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 3 (↑1) |
| S5 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 3 |
| S6 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 2 |
| S7 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 2 |
간선 수는 8 → 9가 된다.
② 합이 2였던 다섯 삼중항의 재계산 — 전부 전개
합이 3이던 두 개는 그대로 삼각형이고, 합이 0·1이던 것들은 한 칸 늘어도 3이 될 수 없다. 따라서 합이 2였던 다섯 개만 다시 계산하면 된다.
| 삼중항 | 빠져 있던 쌍 | 새 합 | 왜 그 값인가 | |||
|---|---|---|---|---|---|---|
| {S1,S3,S4} | S1–S4 | 1 | 0 | 1 | 2 | 추가한 것은 S2–S4이지 S1–S4가 아니다 → 그대로 2 |
| {S2,S3,S4} | S2–S4 | 1 | 1 | 1 | 3 | 빠져 있던 쌍이 바로 추가한 쌍 → 삼각형 완성 ★ |
| {S3,S4,S5} | S3–S5 | 1 | 0 | 1 | 2 | S3–S5는 여전히 0 → 그대로 2 |
| {S4,S5,S6} | S4–S6 | 1 | 0 | 1 | 2 | S4–S6은 여전히 0 → 그대로 2 |
| {S4,S5,S7} | S4–S7 | 1 | 0 | 1 | 2 | S4–S7은 여전히 0 → 그대로 2 |
답 (1)·(2) 새로 삼각형이 되는 삼중항은 {S2,S3,S4} 하나다. 삼각형 총 개수는 2 → 3개가 된다.
검산: ✓
③ 의 극대성 재검사 — 바깥 5명 전부
| 추가 후보 | 둘 다 1? | 판정 | ||
|---|---|---|---|---|
| S1 | 1 | 0 | ✗ | S1–S4 없음 → 실패 |
| S2 | 1 | 1 | ✓ | 추가 가능! S2–S4가 새로 생겼다 |
| S5 | 0 | 1 | ✗ | S5–S3 없음 → 실패 |
| S6 | 0 | 0 | ✗ | 둘 다 남남 → 실패 |
| S7 | 0 | 0 | ✗ | 둘 다 남남 → 실패 |
답 (3) 아니다. S2를 넣을 수 있으므로 는 더 이상 극대가 아니다. 에 흡수된다.
④ 극대 클리크 목록 재작성
| 추가 전 () | 크기 | → | 추가 후 () | 크기 | 무슨 일이 있었나 |
|---|---|---|---|---|---|
| {S1,S2,S3} | 3 | → | {S1,S2,S3} | 3 | 그대로. S4를 넣으려면 S1–S4가 필요한데 없다 |
| {S3,S4} | 2 | → | {S2,S3,S4} | 3 | 크기 2 → 3으로 성장. 새 삼각형 |
| {S4,S5} | 2 | → | {S4,S5} | 2 | 그대로. S2–S5도 S3–S5도 없다 |
| {S5,S6,S7} | 3 | → | {S5,S6,S7} | 3 | 그대로. 건드린 곳에서 멀다 |
답 (4)·(5) 극대 클리크는 {S1,S2,S3}, {S2,S3,S4}, {S4,S5}, {S5,S6,S7} — 개수는 여전히 4개다. 최대 클리크의 크기는 으로 변하지 않았다.
R 검증: length(max_cliques(g2)) → 4,
clique_num(g2) → 3, sum(diag(U2 %*% U2 %*% U2))/6 → 3.
⑤ 값의 의미
간선 하나를 더했는데 극대 클리크의 개수는 그대로다. 대신 크기 2짜리가 하나 줄고 크기 3짜리가 하나 늘었다.
이것이 클리크 지표의 전형적인 반응이다 — 개수보다 크기 분포가 움직인다. 크기 분포는 (2개, 2개) → (1개, 3개)로 바뀌었고, "고립된 한 쌍"이 하나 줄어든 것이 실질적인 개선이다.
교실 해석 — S2와 S4를 짝지어 준 효과다. S4는 이제 {S2,S3,S4}라는 진짜 삼각형의 일원이 되었다. 전에는 어느 무리에도 완전히 속하지 못하고 크기 2짜리 관계 두 개만 갖고 있었는데, 이제 왼쪽 모둠에 발을 확실히 걸쳤다. 주목할 점 — 개입 대상은 S4와 S3(이미 친한 사람)이 아니라 S3의 친구인 S2였다. "친구의 친구를 이어 주는 것"이 새 삼각형을 만드는 가장 값싼 방법이다.
20-2. 연습문제 2 해설 — 간선 하나로 4-클리크를 만들 수 있는가 (Solution 2)
① 무엇을 세는가
4-클리크는 4명 안의 모든 쌍이 연결돼야 하므로 필요한 간선 수는
간선을 하나만 더해서 6이 되려면 지금 5개가 있어야 한다.
② §5의 분포표를 다시 읽는다 — 0인 칸도 전부 표기
| 4인 조 안의 간선 수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 계 |
|---|---|---|---|---|---|---|---|---|
| 그런 4인 조의 개수 | 0 | 4 | 19 | 10 | 2 | 0 | 0 | 35 |
| 완전까지 부족한 간선 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
답 (1)·(2) 4-클리크에는 간선 6개가 필요하다. 간선 하나로 완성되려면 지금 5개여야 하는데, 에는 간선 5개짜리 4인 조가 하나도 없다(개수 0).
가장 좋은 후보조차 간선이 4개뿐이라 2개가 부족하다. 따라서 간선 하나로는 4-클리크를 만들 수 없다.
③ 가장 좋은 두 후보의 6개 쌍 전개
| 4인 조 | 6개 쌍의 값 | 합 | 더해야 하는 간선 | |||||
|---|---|---|---|---|---|---|---|---|
| {S1,S2,S3,S4} | S1–S2 | S1–S3 | S1–S4 | S2–S3 | S2–S4 | S3–S4 | 4 | S1–S4와 S2–S4 (2개) |
| 1 | 1 | 0 | 1 | 0 | 1 | |||
| {S4,S5,S6,S7} | S4–S5 | S4–S6 | S4–S7 | S5–S6 | S5–S7 | S6–S7 | 4 | S4–S6과 S4–S7 (2개) |
| 1 | 0 | 0 | 1 | 1 | 1 | |||
답 (3) 최소 2개의 간선이 필요하다. 예를 들어:
- 에 S4–S6과 S4–S7을 더하면 → S4가 S5·S6·S7 전원과 친해져 4-클리크 완성
- 또는 에 S1–S4와 S2–S4를 더해도 같다
④ 값의 의미 — 왜 하필 두 후보 다 S4가 문제인가
간선 4개짜리 4인 조가 딱 두 개이고, 둘 다 "삼각형 하나 + S4"의 구조다.
{S1,S2,S3,S4} = 삼각형 {S1,S2,S3} + S4, {S4,S5,S6,S7} = 삼각형 {S5,S6,S7} + S4. 삼각형이 이미 3개의 간선을 채워 주고, S4가 그중 한 명과만 이어져 4가 된다. 남은 2개는 S4가 나머지 두 명과 이어져야 채워진다. §5의 논증("삼각형 2개가 서로소이므로 4-클리크 불가")과 정확히 같은 이야기를 간선 개수로 다시 말한 것이다.
교실 해석 — "4명이 서로 전부 친한 조를 만들어 주고 싶다"면 개입이 한 번으로는 안 된다. 최소 두 번 짝지어 줘야 한다. 그리고 두 경우 모두 S4 한 사람에게 개입이 집중된다 — S4가 이미 있는 삼각형에 두 다리를 더 놓아야 하기 때문이다. 현실적으로는 연습문제 1처럼 삼각형 하나(간선 1개)를 만드는 편이 훨씬 값싸고, 소외 완화 효과는 비슷하다. "가장 큰 클리크를 키우는 것"과 "가장 외로운 학생을 무리에 넣는 것"은 다른 목표이며, 후자가 대개 더 실행 가능하다.
20-3. 연습문제 3 해설 — 3번은 왜 특별한가 (Solution 3)
① 3번이 속한 극대 클리크를 전부 나열
| # | 극대 클리크 | 크기 | 구성원의 진영 | 혼합? |
|---|---|---|---|---|
| 1 | {1, 2, 3, 4, 8} | 5 | 1·2·3·4·8 전원 Mr. Hi | 아니오 |
| 2 | {1, 2, 3, 4, 14} | 5 | 1·2·3·4·14 전원 Mr. Hi | 아니오 |
| 3 | {1, 3, 9} | 3 | 1·3 = Mr. Hi, 9 = John A | 예 |
| 4 | {3, 9, 33} | 3 | 3 = Mr. Hi, 9·33 = John A | 예 |
| 5 | {3, 10} | 2 | 3 = Mr. Hi, 10 = John A | 예 |
| 6 | {3, 28} | 2 | 3 = Mr. Hi, 28 = John A | 예 |
| 7 | {3, 29} | 2 | 3 = Mr. Hi, 29 = John A | 예 |
답 (1) 3번은 7개의 극대 클리크에 속하고(§14 표와 일치), 그중 5개가 진영을 넘나든다.
§15의 혼합 클리크는 전체 9개였다. 그중 5개가 3번 한 사람 것이다 — 혼합 클리크의 56%.
② 교차 간선 10개를 3번 기준으로 분해
| 교차 간선 | 1–9 | 1–32 | 2–31 | 3–9 | 3–10 | 3–28 | 3–29 | 3–33 | 14–34 | 20–34 |
|---|---|---|---|---|---|---|---|---|---|---|
| 3번이 한쪽 끝인가 | ✗ | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ | ✗ |
답 (2) 진영을 가로지르는 간선 10개 중 5개(정확히 절반)가 3번에게서 나온다.
3번의 차수는 10이므로, 3번 친구의 절반(5/10)이 반대 진영 사람이라는 뜻이기도 하다. 비교하자면 1번은 차수 16 중 2개(1–9, 1–32)만 교차 = 12.5%, 34번은 차수 17 중 2개(14–34, 20–34)만 교차 = 11.8%다.
③ 3번의 이중 지위 정리
| 측면 | 3번의 상태 | 읽는 법 |
|---|---|---|
| 최대 클리크 소속 | 5-클리크 두 개 모두에 속함 | 사범 진영의 가장 단단한 핵({1,2,3,4})의 정회원 |
| 혼합 클리크 | 9개 중 5개가 3번 것 | 반대 진영과 실질적 관계를 가진 거의 유일한 사람 |
| 교차 간선 | 10개 중 5개가 3번 것 | 두 진영을 잇는 다리의 절반을 혼자 지탱 |
| 차수 | 10 (전체 4위) | 34번(17)·1번(16)·33번(12) 다음 |
답 (3) — 교실로 옮기면
3번은 "한쪽 진영의 핵심 멤버이면서 동시에 반대편에 다리를 놓고 있는 사람"이다. 교실로 옮기면 — 인기 그룹의 정회원인데 그 그룹 바깥 아이들과도 두루 어울리는 학생. 1번(사범)과 34번(관장)은 각자 자기 진영 안에서만 연결이 많다. 두 세계를 실제로 잇고 있는 사람은 3번이다.
이 학생을 다른 반으로 보내면: 두 진영을 잇는 다리 10개 중 5개가 한꺼번에 사라진다. 남는 것은 1–9, 1–32, 2–31, 14–34, 20–34 다섯 개뿐이고, 혼합 극대 클리크는 9개 중 4개로 줄어든다. 학급이 사실상 두 덩어리로 갈라진다. "이 학생이 빠지면 반이 쪼개진다"는 판단은 차수(10, 4위)만 보면 절대 안 나온다 — 연결이 어디로 향하는지를 봐야 나온다.
교실 해석 — 지켜야 할 학생과 키워야 할 학생
- 3번형(교량형): 모둠을 재편할 때 건드리지 말아야 할 학생. 다른 반으로 보내거나 한쪽 모둠에 묶어 버리면 학급 전체의 소통이 끊긴다
- 1번·34번형(진영 중심형): 각자 자기 무리 안에서는 강력하지만 서로 말이 통하지 않는다(§15 — 간선조차 없다). 이 둘을 같은 활동에 묶는 것은 위험하기도 하고 기회이기도 하다
- 실무 요령 — "차수 상위 3명"이 아니라 "교차 간선을 가진 학생"을 따로 세어 보라. 학급 통합에 실제로 기여하는 사람은 후자다. 이 관점을 지표로 만든 것이 단원 3-7의 E-I 지수다
다음 단원 예고 — 단원 3-2. 완화된 클리크 (Relaxed Cliques: n-clique, k-plex, k-core)
오늘 §17에서 확인한 한계 1(너무 엄격하다)을 푼다. "간선 하나만 빠져도 탈락"이라는 조건을 세 가지 방향으로 완화한다 — 거리를 늘리거나(n-클리크: 거리 2 이내면 인정), 결석을 허용하거나(k-플렉스: 명까지는 몰라도 인정), 안쪽 친구 수로 바꾼다(k-코어: 집단 내부에 친구가 명 이상이면 인정). 같은 7명 네트워크 와 가라테 클럽에서 {1,2,3,4,8,14} 6명이 2-플렉스로는 한 덩어리가 되는지 손으로 확인한다.