Linearism › 이산수학 › DM.8

8강. 비둘기집 원리와 포함배제

이산수학 · 3부. 세기

심화 · 약 15분 · 연습문제 6

요약

비둘기집 원리와 일반화, 포함배제 원리, 교란순열, 전사함수의 수

비둘기 13마리가 집 12개에 들어가면 어떤 집에는 두 마리 이상이 있습니다. 이렇게 당연해 보이는 원리가 의외로 강력한 증명 도구가 됩니다. 이 강에서는 비둘기집 원리와, 겹치는 부분을 더하고 빼서 정확히 세는 포함배제 원리를 다룹니다.

7강의 법칙은 “정확히 몇 개”를 셉니다. 이 강의 두 도구는 조금 다릅니다. 비둘기집 원리는 정확한 수 없이도 “적어도 하나는 있다”를 보이고, 포함배제 원리는 겹치는 부분을 더하고 빼서 정확히 셉니다.

8.1 비둘기집 원리

정리 8.1 (비둘기집 원리). n+1n + 1마리 이상의 비둘기가 nn개의 집에 들어가면, 두 마리 이상이 들어간 집이 있습니다.

증명. 모든 집에 한 마리 이하가 있다면 비둘기는 nn마리 이하입니다. 대우입니다. □

함수로 말하면, ∣A∣>∣B∣|A| > |B|이면 f:A→Bf : A \to B는 단사가 아닙니다(5강의 정리 5.4).

예제 8.2. 13명이 있으면 생일이 같은 달인 두 사람이 있습니다(달이 12개).

예제 8.3. {1,2,…,2n}\{1, 2, \dots, 2n\}에서 n+1n + 1개를 고르면 그중 합이 2n+12n + 1인 두 수가 있습니다. 집을 {1,2n},{2,2n−1},…,{n,n+1}\{1, 2n\}, \{2, 2n-1\}, \dots, \{n, n+1\}의 nn쌍으로 잡으면 n+1n + 1개 중 두 수가 같은 쌍에 들어갑니다.

예제 8.4. 정수 n+1n + 1개 중에는 차가 nn의 배수인 두 수가 있습니다. nn으로 나눈 나머지(nn가지)를 집으로 잡습니다.

8.2 일반화된 비둘기집 원리

정리 8.5. NN마리가 kk개의 집에 들어가면, 적어도 ⌈N/k⌉\lceil N/k \rceil마리가 들어간 집이 있습니다.

증명. 모든 집에 ⌈N/k⌉−1\lceil N/k \rceil - 1마리 이하가 있다면 전체는 k(⌈N/k⌉−1)<k⋅N/k=Nk(\lceil N/k \rceil - 1) < k \cdot N/k = N마리 이하이므로 모순입니다. □

예제 8.6. 100명 가운데 같은 달에 태어난 사람은 적어도 ⌈100/12⌉=9\lceil 100/12 \rceil = 9명 있습니다.

예제 8.7. 카드 52장(무늬 4개)에서 같은 무늬 3장을 반드시 얻으려면 2⋅4+1=92 \cdot 4 + 1 = 9장을 뽑으면 됩니다. 8장으로는 무늬마다 2장씩일 수 있습니다.

8.3 포함배제 원리

4강의 ∣A∪B∣=∣A∣+∣B∣−∣A∩B∣|A \cup B| = |A| + |B| - |A \cap B|를 셋 이상으로 늘립니다.

정리 8.8 (세 집합의 포함배제).

∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣|A \cup B \cup C| = |A| + |B| + |C| - |A \cap B| - |A \cap C| - |B \cap C| + |A \cap B \cap C|

정리 8.9 (포함배제 원리).

∣⋃i=1nAi∣=∑i∣Ai∣−∑i<j∣Ai∩Aj∣+∑i<j<k∣Ai∩Aj∩Ak∣−⋯+(−1)n+1∣A1∩⋯∩An∣\left| \bigcup_{i=1}^n A_i \right| = \sum_i |A_i| - \sum_{i<j} |A_i \cap A_j| + \sum_{i<j<k} |A_i \cap A_j \cap A_k| - \cdots + (-1)^{n+1} |A_1 \cap \cdots \cap A_n|

증명. 원소 xx가 정확히 m≥1m \ge 1개의 AiA_i에 들어 있다고 합시다. 우변에서 xx는 (m1)−(m2)+(m3)−⋯=1−∑k=0m(−1)k(mk)=1−0=1\binom{m}{1} - \binom{m}{2} + \binom{m}{3} - \cdots = 1 - \sum_{k=0}^m (-1)^k \binom{m}{k} = 1 - 0 = 1번 세어집니다(7강의 따름정리 7.13). □

예제 8.10. 1부터 1000까지 2, 3, 5 가운데 어느 것의 배수: 500+333+200−166−100−66+33=734500 + 333 + 200 - 166 - 100 - 66 + 33 = 734개. 어느 것의 배수도 아닌 수는 1000−734=2661000 - 734 = 266개입니다.

8.4 교란순열

정의 8.11 (교란순열). 1,2,…,n1, 2, \dots, n을 늘어놓을 때 어느 ii도 ii번째 자리에 오지 않는 순열을 교란순열(derangement)이라 하고 그 수를 DnD_n으로 씁니다.

nn명이 모자를 맡겼다가 무작위로 돌려받을 때 아무도 자기 모자를 받지 못하는 경우입니다.

정리 8.12. Dn=n!∑k=0n(−1)kk!D_n = n! \displaystyle\sum_{k=0}^{n} \frac{(-1)^k}{k!}.

증명. AiA_i를 “ii가 제자리에 있는 순열”이라 하면 ∣Ai1∩⋯∩Aik∣=(n−k)!|A_{i_1} \cap \cdots \cap A_{i_k}| = (n-k)!입니다. 포함배제로 제자리인 것이 하나라도 있는 순열은 ∑k=1n(−1)k+1(nk)(n−k)!\sum_{k=1}^n (-1)^{k+1} \binom{n}{k}(n-k)!개이고, Dn=n!−D_n = n! - 그것 =∑k=0n(−1)kn!k!= \sum_{k=0}^n (-1)^k \frac{n!}{k!}입니다. □

D1=0D_1 = 0, D2=1D_2 = 1, D3=2D_3 = 2, D4=9D_4 = 9, D5=44D_5 = 44입니다. Dn/n!D_n / n!은 e−1≈0.3679e^{-1} \approx 0.3679로 갑니다. 사람이 많아져도 아무도 자기 모자를 못 받을 확률은 약 37%로 거의 일정합니다.

8.5 전사함수의 수

정리 8.13. ∣A∣=m|A| = m, ∣B∣=n|B| = n일 때 전사함수 A→BA \to B의 수는

∑k=0n(−1)k(nk)(n−k)m.\sum_{k=0}^{n} (-1)^k \binom{n}{k} (n-k)^m.

증명. BB의 원소 bkb_k가 치역에 없는 함수의 집합을 AkA_k라 하면, kk개의 원소를 빼먹는 함수는 (n−k)m(n-k)^m개입니다. 전체 nmn^m에서 포함배제로 하나라도 빼먹는 함수를 뺍니다. □

예제 8.14. 6명을 3개 팀에 배정하되 빈 팀이 없게 하는 방법: 36−3⋅26+3⋅16=729−192+3=5403^6 - 3 \cdot 2^6 + 3 \cdot 1^6 = 729 - 192 + 3 = 540가지입니다.

쓰이는 곳. 해시 충돌이 반드시 생긴다는 증명, 압축 알고리즘의 한계(모든 파일을 줄일 수는 없다), 오류 정정 부호의 한계가 비둘기집 원리입니다. 포함배제는 확률 계산과 데이터베이스 질의 최적화에서 쓰입니다.

8.6 이 장의 요약

  • 비둘기집: 무엇이 비둘기이고 무엇이 집인지 정하는 것이 전부입니다. ⌈N/k⌉\lceil N/k \rceil.
  • 포함배제: 홀수 개의 교집합은 더하고 짝수 개는 뺍니다.
  • 교란순열 Dn≈n!/eD_n \approx n!/e, 전사함수의 수.

문제

8.1 [계산] · 확인 문제

양말 서랍에 빨강, 파랑, 검정, 흰색 양말이 많이 섞여 있습니다. 눈을 감고 꺼낼 때 같은 색 양말 한 켤레(2짝)를 반드시 얻으려면 최소 몇 짝을 꺼내야 할까요?

정답
5
풀이

색이 4가지이므로 4짝은 모두 다른 색일 수 있고, 5짝이면 비둘기집 원리로 같은 색 두 짝이 있습니다.

8.2 [계산] · 확인 문제

1부터 1000까지의 정수 가운데 2, 3, 5 어느 것의 배수도 아닌 수는 몇 개일까요?

정답
266
풀이

예제 8.10과 같이 1000−734=2661000 - 734 = 266개입니다.

8.3 [계산] · 확인 문제

교란순열의 수를 씁니다.

nn DnD_n
4 [?]
5 [?]
6 [?]
정답
9
44
265
풀이

정리 8.12로 D4=24(1−1+12−16+124)=9D_4 = 24(1 - 1 + \tfrac12 - \tfrac16 + \tfrac1{24}) = 9, D5=44D_5 = 44, D6=265D_6 = 265입니다. 점화식 Dn=(n−1)(Dn−1+Dn−2)D_n = (n-1)(D_{n-1} + D_{n-2})로도 확인할 수 있습니다.

8.4 [계산]

5개의 서로 다른 공을 3개의 서로 다른 상자에 넣되 빈 상자가 없게 하는 방법은?

정답
150
풀이

정리 8.13으로 35−3⋅25+3⋅15=243−96+3=1503^5 - 3 \cdot 2^5 + 3 \cdot 1^5 = 243 - 96 + 3 = 150가지입니다.

8.5 [계산]

어떤 반 학생 40명이 모두 1월부터 12월 사이에 태어났습니다. 같은 달에 태어난 학생이 적어도 몇 명 있다고 보장할 수 있을까요?

정답
4
풀이

⌈40/12⌉=4\lceil 40/12 \rceil = 4명입니다.

8.6 [증명]

한 변이 2인 정삼각형 안에 점 5개를 찍으면, 그중 거리가 1 이하인 두 점이 있음을 보입니다.

힌트 1

각 변의 중점을 이어 정삼각형을 한 변이 1인 작은 정삼각형 4개로 나눕니다.

풀이

세 변의 중점을 이으면 한 변이 1인 정삼각형 4개가 생깁니다. 점 5개를 이 4개의 조각(집)에 넣으면 두 점이 같은 조각에 들어갑니다. 한 변이 1인 정삼각형 안의 두 점 사이 거리는 1 이하입니다.