ГоловнаСтаттіПринцип включення-виключення

Включення-Виключення: Підрахунок Перетинів Без Двократного Рахунку

Чому додавання-віднімання-додавання є точною корекцією, необхідною для пересічних множинах, і як такий самий трюк рахує обернені перестановок та прості числа.

mysimulator teamОновлено — червень 2026≈ 7 хв читання▶ Відкрити симуляцію

Проблема з простою додаванням розмірів множин

Припустимо, ви хочете порахувати скільки людей у кімнаті розмовляють французькою або німецькою. Додавання кількості франкомовних до кількості німецьких не враховує тих, хто володіє обома мовами – їх зарахували двічі. Виправлення очевидне, як тільки ви це бачите: віднімаємо перетин назад. |A ∪ B| = |A| + |B| − |A ∩ B|. Це одне коригування є насінням принципу включення-виключення, і цікава річ полягає в тому, що відбувається, коли ви масштабуєте це з двох множин до трьох, десяти або сто.

жива демонстрація · пов'язана симуляція● LIVE

Три множини: додавання, віднімання, повторне додавання

З трьома перехресними множинами діаграма Венна має сім різних областей, і просто додавання |A| + |B| + |C| перераховує всі парні перетини та потім недооцінює потрібну перетин після того, як ці пари віднімаються назад — область, де перетинаються всі три множини, додається тричі, віднімається тричі і потрібно додати її ще раз, щоб потрапити на правильну кількість:

|A ∪ B ∪ C| = |A| + |B| + |C| − |A∩B| − |A∩C| − |B∩C| + |A∩B∩C| закономірність: чергуйте + та -, один термін для кожного розміру перетину. Загальне правило для n множин продовжує чергувати знаки відповідно до кількості наборів у кожній перетині: додайте всі розміри однокомпонентних наборів, відніміть усі парні перетини, додайте усі потрібні перетини, відніміть усі чотирикомпонентні перетини та так далі, закінчуючи одним термом для перетину всіх n наборів, позначеним (−1)^(n+1).

|A ∪ B ∪ C| = |A| + |B| + |C|
              − |A∩B| − |A∩C| − |B∩C|
              + |A∩B∩C|

pattern: alternate + and −, one term per possible intersection size

Чому альтернативна сума працює: підрахунок кожного елемента точно один раз

Чистий спосіб зрозуміти, чому це завжди потрапляє на правильну відповідь, — це перевірити, скільки разів підраховується окремий елемент. Візьміть елемент, який належить до точно k з n наборів. Він сприяє C(k,1) термам з одного набору, C(k,2) парним термам і так далі аж до C(k,k). Альтернативна сума цих біноміальних коефіцієнтів, C(k,1) − C(k,2) + C(k,3) − ..., завжди дорівнює точно 1 для будь-якого k ≥ 1 (прямий наслідок біноміального теореми, застосованої до (1−1)^k = 0). Отже, кожен елемент, який належить до принаймні одного набору, підраховується точно один раз, незалежно від того, скільки наборів він випадково займає — це вся доведення, і тому формула генерується чисто для будь-якої кількості наборів.

Перестановки: классическое применение подсчета

Традиционное использование принципа включения-исключения – это подсчет перестановок, называемых перестановками с деранжированием — это перестановки n элементов, в которых ни один элемент не находится на своем исходном месте (проблема 'шляпы-чемодан'): n человек проверяют n шляп, во сколько способов каждый человек может получить обратно шляпу, которая не принадлежит ему?). Пусть A_i - это множество перестановок, где элемент i находится на своем месте; мы хотим все вне объединения всех A_i. Применение включения-исключения к этим n множествам дает:

D(n) = n! · Σ_{k=0}^{n} (−1)^k / k! D(1) = 0 D(2) = 1 D(3) = 2 D(4) = 9 D(5) = 44 по мере роста n, D(n)/n! → 1/e ≈ 0.3679 Последняя строка – это небольшой математический трик: доля всех перестановок, которые являются полными перестановками с деранжированием, сходится к 1/e, что означает примерно 37% случайных перемешиваний не оставляют никого на своем исходном месте, почти независимо от того, насколько велико n, когда n больше нескольких десятков.

D(n) = n! · Σ_{k=0}^{n} (−1)^k / k!

D(1) = 0
D(2) = 1
D(3) = 2
D(4) = 9
D(5) = 44

as n grows, D(n)/n! → 1/e ≈ 0.3679

Та сама схема підраховує сюр’єкції та сито Ератосфена

Принцип включення-виключення є одним із найчастіше використовуваних інструментів у комбінаторному аналізі, оскільки так багато задач з підрахунку спрощуються до ‘підрахувати речі, які уникають усіх перерахованих поганих властивостей’. Підрахунок сюр’єкцій (функцій з множини розміром n на множину розміром m, що покривають усі цілі) – це включення-виключення щодо ‘цілі j не досягнуті’. Підрахунок чисел за допомогою сита Ератосфена для підрахунку цілих чисел до N без будь-якого дільника з обраного списку є включенням-виключенням щодо ‘ділимих на просте число p_i’ . Де прямий підрахунок буде перераховувати перекривающиеся погані випадки, схема альтернативного додавання-віднімання-додавання зазвичай є найчистішим способом точно виправити це.

Frequently asked questions

Чому |A| + |B| + |C| не завжди дає правильну відповідь для трьох перекриваючихся множин?

Оскільки будь-який елемент, що належить двом множинам, рахується двічі, а елемент, що належить всім трьом множинам, рахується тричі. Віднімання подвійних перетинів коригує подвоєння, але також занадто багато разів видаляє потрійний перетин, тому його потрібно додати ще раз — таким чином отримується повний чергування додавання-віднімання-додавання.

Що таке деранджмент і чому включення-виключення має значення для їх підрахунку?

Деранджмент — це перестановка, в якій жоден елемент не опиняється на своєму початковому місці — класична задача про ‘чеки з капелюхами’. Безпосереднє підрахунок розташувань, що уникають усі n ‘поганих’ фіксованих точок, є саме тим типом проблеми з перекриваючимися умовами, для якої побудовано включення-виключення, і воно дає чисту формулу D(n) = n!·Σ(−1)^k/k!, відношення до якої до n! збігається до 1/e.

Чи працює включення-виключення лише для 2 або 3 множин?

Ні — воно узагальнюється на будь-яку кількість множин n, чергуючи знак залежно від того, скільки множин перетинаються в кожному члені: додайте всі розміри одноманок, відніміть усі бінарні перетини, додайте усі триразові перетини і так далі до одного n-кратного перетину. Доведення (за допомогою біноміальних коефіцієнтів) працює однаково на будь-якому рівні.

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте Inclusion-Exclusion і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію Inclusion-Exclusion

Що ви знайшли?

Додати кроки відтворення (опційно)