Лучше такой алгоритм (модификация предыдущего).
Если надо минимизировать сумму
, где
, то пишите матрицу
из этих перестановок, далее цикл: выбираете
и вычисляете еще строку
, после чего числа
сортируете в порядке, противоположном порядку
. И так последовательно для всех строк (возможно несколько раз). Цикл прекращается, когда для всех
уже не изменяются.
Для пространства величиной порядка
алгоритм довольно быстро загоняет сумму в локальный минимум. Опять же легко программируется. Причем очень много локальных минимумов, которые одновременно являются и глобальными. В то же время, чем меньше делителей имеет
, тем, скорее всего, больше шагов до локального минимума и меньше глобальных минимумов. Точнее не могу сказать.
Для
(наш случай) у меня получилось
. Проверьте, пожалуйста.