Принцип Дирихле

Если кроликов больше, чем клеток, в какой-то клетке точно сидят минимум двое — очевидно и неожиданно мощно.

Принцип Дирихле — если $n+1$ предмет разложить по $n$ ящикам, то хотя бы в одном ящике окажется не меньше двух предметов.

Этот принцип кажется до смешного очевидным, но именно из него выводят красивые и совсем не очевидные утверждения. Его называют «принципом ящиков» или «принципом голубей и голубятен».

Формулировка и обобщение

В общем виде: если разложить $N$ предметов по $k$ ящикам, то найдётся ящик, содержащий не менее

$$\left\lceil \frac{N}{k} \right\rceil$$

предметов (здесь $\lceil x \rceil$ — округление вверх). Например, среди любых 13 человек обязательно найдутся двое, родившихся в один месяц: предметов 13, ящиков (месяцев) 12, значит, $\lceil 13/12 \rceil = 2$ человека делят месяц.

Классическое следствие про знакомства

from math import ceil

# В группе из N людей минимум сколько разделят один месяц рождения?
for N in [13, 25, 100]:
    months = 12
    guaranteed = ceil(N / months)
    print(f"{N:>3} человек: хотя бы {guaranteed} родились в один месяц")

# Среди любых 5 точек в единичном квадрате
# две на расстоянии не больше корня из 2 деленного на 2
print("--- ящики для точек ---")
print("Квадрат делим на 4 части -> 5 точек -> минимум", ceil(5 / 4), "в одной части")

Вывод:

 13 человек: хотя бы 2 родились в один месяц
 25 человек: хотя бы 3 родились в один месяц
100 человек: хотя бы 9 родились в один месяц
--- ящики для точек ---
Квадрат делим на 4 части -> 5 точек -> минимум 2 в одной части

Как работает под капотом

Сила принципа в том, что он гарантирует существование, ничего не строя. Классический пример: среди любых пяти точек в единичном квадрате найдутся две на расстоянии не больше $\frac{\sqrt2}{2}$. Доказательство: разобьём квадрат на четыре одинаковых квадратика со стороной $1/2$ (ящики). Точек пять, ящиков четыре — по принципу Дирихле в какой-то квадратик попадут две точки. А диагональ маленького квадратика равна $\frac{\sqrt2}{2}$, значит, эти две точки не дальше неё. Мы доказали факт о расстоянии, ни разу не указав конкретные точки — в этом и магия.

Частые ошибки

Принцип гарантирует ровно $\lceil N/k \rceil$, не больше: при 25 людях гарантированы трое в одном месяце, но не четверо (хотя на практике может оказаться и больше). Не путайте «существует ящик с двумя» с «во всех ящиках по два». И помните: принцип ничего не говорит, в каком именно ящике, — только что такой ящик есть.

Итог

  • $n+1$ предмет в $n$ ящиках — где-то минимум два.
  • Обобщение: найдётся ящик с $\ge \lceil N/k \rceil$ предметами.
  • Принцип доказывает существование, не указывая конкретику.
  • Применяется в геометрии, теории чисел и информатике.
Проверьте себя
1. Что гарантирует принцип Дирихле при раскладке $n+1$ предмета по $n$ ящикам?
AВсе ящики заполнены поровну
BХотя бы в одном ящике не меньше двух предметов
CОдин ящик пуст
DПредметы нельзя разложить
2. Сколько человек гарантированно разделят один месяц рождения в группе из 25?
A2
B3
C12
D25
3. В чём «магия» принципа Дирихле?
AОн строит конкретный пример
BОн доказывает существование объекта, не указывая его явно
CОн работает только для чисел
DОн даёт точное число предметов в каждом ящике