Моя интуиция заключается в том, что все варианты этой проблемы окажутся NP-сложными.Поэтому я бы начал искать эвристику, которая дает разумные ответы.Это может потребовать проб и ошибок.
Упрощенный подход - записать возможную перестановку.А затем попробуйте возможные обмены, пока вы не достигнете локального минимума.Попробуйте несколько раз и выберите лучший ответ.
Имитация отжига обеспечивает более сложную версию этого подхода, см. Описание http://en.wikipedia.org/wiki/Simulated_annealing.Может потребоваться некоторое экспериментирование, чтобы найти набор параметров, которые, кажется, сходятся относительно хорошо.
Другая идея состоит в том, чтобы искать генетический алгоритм.Основываясь на быстром поиске в Google, похоже, что стандартный способ сделать это - попытаться превратить NP-полную проблему в проблему SAT, а затем использовать генетический алгоритм для этой проблемы.Этот подход потребовал бы превращения этого в проблему SAT некоторым разумным способом.К сожалению, для меня не очевидно, как можно было бы сделать это сокращение.Действительно, в первой версии, которая у вас была, ваша проблема была тесно связана с классической NP-трудной проблемой.Тот факт, что он обозначен как NP-hard, а не NP-complete, свидетельствует о том, что люди не нашли хорошего способа превратить его в проблему SAT.Поэтому, если неясно, как превратить простую версию в проблему SAT, то вряд ли вы тоже решите сложную задачу.
Но вы все равно можете попробовать некоторые варианты генетических алгоритмов.Мутация довольно проста, просто поменяйте местами некоторые элементы.Один из способов объединения элементов состоит в том, чтобы взять 3 перестановки и использовать быструю сортировку, чтобы найти комбинацию следующим образом: сделать произвольный поворот, а затем использовать «большинство выигрышей», чтобы разбить элементы на большие и меньшие.Отсортируйте каждую половину одинаково.
Извините, что не могу просто дать вам подход и сказать: «Это должно сработать».У вас есть что-то похожее на открытый исследовательский проект, и лучшее, что я могу сделать, - это дать вам несколько идей о том, что вы можете попробовать, и это может работать достаточно хорошо.