Для генерации перестановок с учётом заданных ограничений используют, например, комбинаторные методы. proglib.io Они позволяют рассчитывать все возможные варианты решения задачи при заданных ограничениях, а также определять оптимальные решения на основе различных критериев. proglib.io
Некоторые методы генерации перестановок:
- Алгоритм Штейнхауза-Джонсона-Троттера. github.com Начинают с самой маленькой перестановки и последовательно добавляют элементы до тех пор, пока не будет сформирована полная перестановка. github.com Каждый новый элемент добавляется с учётом порядка, заданного дополнительным параметром — направлением. github.com
- Метод heap. research-journal.org Генерирует перестановки с использованием рекурсивного обратного отслеживания. research-journal.org Если длина равна 1, выводит текущую перестановку. research-journal.org В противном случае каждый элемент замещается последним, а затем происходит рекурсивное создание перестановок для остальных элементов. research-journal.org
- Тасование Кнута. ru.wikipedia.org Алгоритм генерации случайных перестановок из n элементов (с равномерным распределением) без повторов. ru.wikipedia.org Начинается с произвольной перестановки и проходит с позиции 1 до позиции n−1, переставляя элемент на позиции i со случайно выбранным элементом на позициях от i до n включительно. ru.wikipedia.org