Найти тему
programmer's notes (python and more)

Программирование на языке Python. Комбинаторные алгоритмы. Генерация Сочетаний

Доброго времени суток, читатели, зрители моего канала programmer's notes, любители языка Python. Не забывайте подписываться и писать свои
комментарии к моим статьям и видео.

Python, комбинаторные алгоритмы | programmer's notes (python and more) | Дзен
Алгоритмы на Python | programmer's notes (python and more) | Дзен

Алгоритм генерации сочетаний на языке Python

Напомню, что сочетания это подмножества данного массива заданной длины. Сочетания, в отличие от размещений отличаются друг от друга только составом элементов, но не порядком. Если список

1 2 3 4

То сочетания длиной 2 элемента будут

1 2  
1 3  
1 4  
2 3  
2 4  
3 4

Количество сочетаний из n по m вычисляются по формуле n!/((n-m)! * m!).

Легко заметить, что алгоритм генерации сочетаний должен быть очень похож на алгоритм генерации размещений. Нужно только обеспечить неповторяемость содержимого сгенерированных множеств.

Программа представлена ниже. Обратите внимание на ещё один параметр k. При каждом рекурсивном вызове он обеспечивает начало цикла со сдвигом на 1, это и позволяет избегать повторяемость генерируемых множеств.

Текст программы см. ниже
Текст программы см. ниже
primer161.py

Результат выполнения

1 2  
1 3  
2 3

Ну и для любителей "настоящей" рекурсии

Текст программы
Текст программы
primer162.py

Следующая статья по комбинаторике на Python...

Предыдущая статья по комбинаторике на Python...

Хорошего программирования. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

Программировать это вам не браком сочетаться
Программировать это вам не браком сочетаться