Генерация перестановок большого числа (вероятно, 30) с ограничениями - PullRequest
0 голосов
/ 25 октября 2018

У меня есть список номеров (от 1 до 30), скорее всего.Мне нужно упорядочить список таким образом, чтобы абсолютная разница между двумя последовательными элементами составляла не более 2, 3 или 4, а сумма абсолютных разностей всех последовательных элементов была минимальной.

Я пыталсягенерирование всех возможных перестановок списка в диапазоне до 10 и 11, а затем сортировка их по стоимости, но для больших чисел это занимает слишком много времени.Чтобы получить список из 30 чисел, потребовались бы годы.

Можно ли каким-либо образом выполнить ограничения при создании самих перестановок?

В настоящее время я использую библиотеку itertools для python для генерации перестановок.

Любая помощь очень ценится!Спасибо

РЕДАКТИРОВАТЬ 1: Вот результаты, которые я получил на небольших числах, таких как 10 и 12.

Arranged Array -> Cost (Стоимость - это сумма абсолютной разности между двумя последовательными элементами)

  1. Для 10 номеров

    [1, 3, 5, 2, 4, 6, 8, 10, 7, 9] 20

    [2, 4, 1, 3, 5, 7, 9, 6, 8, 10] 20

  2. Для 12.

    [1, 3, 5, 2,4, 6, 8, 11, 9, 7, 10, 12] 25

    [1, 3, 5, 7, 10, 12, 9, 11, 8, 6, 4, 2] 25

Мне нужно организовать 30 таких чисел, где 2 <= разница <= 4 и общая стоимость минимальна. </p>

1 Ответ

0 голосов
/ 25 октября 2018

Вычисление всех перестановок для списка размером 30 невозможно, независимо от подхода к реализации, поскольку их будет всего 30!перестановки.

Мне кажется, что требуемая перестановка может быть просто достигнута путем сортировки заданного списка, хотя с помощью arr.sort() и последующего вычисления разницы между последовательными элементами.Я что-то упустил?

...