Комбинаторика в программировании: перебор вариантов без хаоса
Автор: Казачкин Даниил Михайлович · Обновлено
Комбинаторика отвечает на вопрос, сколько вариантов возможно и как их перебрать. В программировании для школьников она встречается в задачах на пароли, расписания, команды,…
Комбинаторика отвечает на вопрос, сколько вариантов возможно и как их перебрать. В программировании для школьников она встречается в задачах на пароли, расписания, команды, перестановки букв, выбор нескольких предметов и олимпиадные переборы.
Простой полный перебор подходит, когда вариантов немного.
alphabet = 'ABC'
for first in alphabet:
for second in alphabet:
print(first + second)Эта программа выводит все двухбуквенные коды из трех символов. Всего вариантов 3 * 3 = 9.
Перебор с условием
Часто нужно не вывести все варианты, а посчитать подходящие.
digits = '0123456789'
count = 0
for a in digits:
for b in digits:
number = int(a + b)
if number % 4 == 0:
count += 1
print(count)Здесь перебираются все двузначные записи с ведущим нулем. Важно внимательно читать условие: иногда 04 допустимо как код, а иногда число должно быть именно двузначным.
Как оценить число вариантов
Перед программированием посчитайте, сколько вариантов получится. Если три позиции и десять цифр, это 1000 вариантов. Если десять позиций и десять цифр, это уже 10 миллиардов, полный перебор не подойдет.
Полезные вопросы
- Можно ли повторять элементы?
- Важен ли порядок?
- Нужно ли выбрать все элементы или только часть?
- Есть ли ограничения, которые можно проверить раньше?
Комбинаторные задачи учат дисциплине. Чем раньше школьник выпишет правила вариантов, тем меньше риск написать хаотичный перебор и получить неверный ответ на ОГЭ, ЕГЭ или олимпиаде.
Практикум: коды без повторяющихся символов
Составьте все трёхсимвольные коды из A, B, C, D без повторений. Сначала вычислите ожидаемое количество по правилу выбора: четыре варианта для первого места, три для второго и два для третьего. Затем реализуйте перебор и отфильтруйте повтор символа. Сравните длину результата с 24 и проверьте уникальность через множество. Измените условие так, чтобы повторения разрешались, и объясните новое количество. Не смешивайте задачу подсчёта с задачей перечисления: им нужны разные результаты.
Контрольная точка
Почему произведение 4 × 3 × 2 применимо именно без повторений? Назовите, как изменяется число доступных вариантов после каждого выбора и что произойдёт, если порядок перестанет иметь значение.
Частые вопросы
Когда достаточно формулы, а когда нужен программный перебор?
Формула удобна для количества вариантов с простой структурой. Перебор нужен, если сами варианты требуется вывести или они проходят дополнительные сложные условия. Полезно сначала получить теоретическое количество и использовать его для проверки программы.
Источники
- Босова Л.Л. Информатика. Базовый курс: учебник для 7-9 классов. - М.: БИНОМ. Лаборатория знаний.
- Поляков К.Ю., Еремин Е.А. Информатика. 10-11 классы. Углубленный уровень.
- Python Documentation: The Python Tutorial.