Как считать варианты и не путать правила суммы и произведения?
Комбинаторная задача начинается не с формулы, а с описания уникального результата и допустимых шагов его построения. Правило суммы применяется к взаимоисключающим случаям, а правило произведения — к последовательным независимым выборам. Ошибка в модели даёт неверный ответ даже при безупречной арифметике.
Правило произведения
Если объект строится в несколько этапов и после каждого допустимого предыдущего выбора имеется известное число продолжений, количества перемножают. Для пароля из четырёх цифр без ограничений получается 10⁴ вариантов. Если первая цифра не может быть нулём, первый множитель равен девяти, а остальные остаются десятью.
Правило суммы
Когда результат относится ровно к одному из непересекающихся типов, числа вариантов складывают. Если случаи пересекаются, простое сложение считает общие объекты дважды. Тогда используют включение-исключение: сумма размеров множеств минус размер их пересечения.
Перестановки, размещения и сочетания
Перестановка учитывает порядок всех n различных элементов. Размещение выбирает k элементов с учётом порядка, сочетание — без учёта. Перед применением формулы задайте вопрос: изменится ли объект, если выбранные элементы поменять местами? Ответ определяет, нужно ли делить на число перестановок внутри набора.
Повторы и ограничения
Разрешённый повтор превращает последовательность длины k над алфавитом мощности m в mᵏ вариантов. Запрет соседних одинаковых символов меняет множители: первый выбирается m способами, каждый следующий — m − 1. Более сложные условия удобно разбивать по первому символу или состоянию уже построенного префикса.
Надёжная проверка
Для маленьких параметров перечислите варианты вручную или напишите короткий генератор и сравните с формулой. Проверьте, что случаи покрывают всё пространство и не пересекаются. На экзамене полезно сопровождать произведение словами «выбираем сначала…, затем…», чтобы структура решения была видна без догадок.
Формула должна следовать из модели выбора
Перестановка отвечает на вопрос, как упорядочить все n различных объектов; размещение — как выбрать и упорядочить k; сочетание — как выбрать k без порядка. Перед формулой полезно проговорить, считаются ли выборы различными после перестановки и можно ли повторять объект. Это предотвращает применение знакомого выражения к другой модели.
from itertools import combinations, permutations, product
items = "ABCD"
print(len(list(combinations(items, 2)))) # 6: порядок не важен
print(len(list(permutations(items, 2)))) # 12: порядок важен
print(len(list(product(items, repeat=2)))) # 16: повторы разрешеныПрограмма перебора полезна для проверки маленьких n, но не заменяет вывода. Для больших значений перечисление экспоненциально или факториально растёт, тогда как формула вычисляет число без генерации всех объектов.
Практика: пароль с ограничениями
Посчитайте шестизначные строки из цифр 0…9, в которых первая цифра не ноль, цифры не повторяются и присутствует ровно одна чётная цифра. Сначала разложите выбор на непересекающиеся случаи и получите формулу. Затем напишите полный перебор для проверки ответа. Отдельно измените условие: порядок цифр не важен. Объясните, какая часть прежней модели перестала работать и почему новый ответ нельзя получить простой заменой одного множителя.
Источники
- МФТИ: Программа вступительного испытания по информатике и информационно-коммуникационным технологиям.
- Поляков К.Ю., Еремин Е.А. Информатика. 11 класс. Углублённый уровень.
- Малясова С.В. Информатика и ИКТ: пособие для подготовки к ЕГЭ / под ред. Цветковой М.С. — М.: Academia, 2018. — 637 с.