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