Перебор с itertools
Декартовы произведения, сочетания и перестановки
«Перебор с itertools» — бесплатный урок Competitive Programming Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Competitive Programming Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Competitive Programming Academy содержит 4 уроков всего.
Поручите циклы itertools
Модуль itertools генерирует сочетания и упорядочивания за вас, поэтому вам нужно писать меньше циклов и можно допустить меньше ошибок. 🙂
Сначала импортируйте модуль
Всё находится в одном модуле, поэтому начните с импорта itertools. Затем можно напрямую вызывать product, permutations и combinations.
import itertoolsproduct вместо вложенных циклов
Используйте product, чтобы заменить глубоко вложенные циклы по одним и тем же вариантам. Он выдаёт каждый кортеж выбранных значений из заданных диапазонов.
for combo in itertools.product(range(3), repeat=2):
print(combo)permutations для упорядочиваний
Когда порядок важен, permutations перечисляет все расположения элементов. Это идеально подходит для полного перебора небольших задач в стиле задачи коммивояжёра.
for p in itertools.permutations([1, 2, 3]):
print(p)combinations для выбора
Когда порядок не важен, combinations выбирает каждую группу размера r. Это отлично подходит для выбора подмножества элементов для проверки.
for c in itertools.combinations([1, 2, 3, 4], 2):
print(c)Перестановки и сочетания
Ключевое различие — порядок: permutations считает (1,2) и (2,1) разными вариантами, а combinations считает их одним и тем же выбором.
Помните о росте
Количество перестановок растёт как n!, то есть очень быстро увеличивается. Даже при n, равном 11, оно уже превышает сорок миллионов вариантов, поэтому значение n должно быть небольшим.
Они ленивые
Эти функции являются генераторами: они выдают по одному элементу за раз, не создавая огромный список, поэтому при переборе расход памяти остаётся небольшим.
Сочетайте с проверкой
Сначала сгенерируйте кандидатов, а затем оставьте только те, которые проходят вашу проверку. Этот шаблон превращает сложный поиск в короткий и понятный цикл.
best = min(itertools.permutations(cities), key=tour_length)Сочетания с повторениями
Нужно выбирать элементы, которые могут повторяться? Используйте сочетания с повторениями, чтобы один и тот же элемент мог входить в группу несколько раз.
Выбирайте правильный инструмент
Задайте два вопроса: важен ли порядок и могут ли элементы повторяться? Ответы сразу укажут на правильную функцию itertools.
Быстрая проверка
Вам нужно перечислить все способы выбрать 3 элемента из 6, при этом порядок не важен.
Повторение
Используйте product, permutations и combinations для аккуратного перечисления вариантов. Выбирайте инструмент, выяснив, важен ли порядок и повторяются ли элементы, и следите за ростом количества вариантов. 🚀
Часто задаваемые вопросы
Урок «Перебор с itertools» бесплатный?
Да — полный текст урока «Перебор с itertools» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Competitive Programming Academy, подпишись на CoddyKit PRO. Курс Competitive Programming Academy содержит 4 уроков всего.
Чему я научусь в уроке «Перебор с itertools»?
Декартовы произведения, сочетания и перестановки Ты практикуешь Competitive Programming Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Competitive Programming Academy?
Предыдущий опыт не требуется. Competitive Programming Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Перебор с itertools»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Competitive Programming Academy?
Да. Каждый урок Competitive Programming Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Полный перебор — допустимая стратегия
- Перебор с itertools
- Перебор подмножеств с битовыми масками
- Разумное сокращение пространства поиска