скажем, у меня есть массив чисел, например, [0, 1, 2, 3, 4, 5]
и я хочу получить массив, например [2, 1, 4, 0, 5, 3]
. В моем распоряжении есть один метод, который я могу использовать:
move(fromIndex, toIndex)
Таким образом, чтобы получить желаемый массив, я мог вызывать метод несколько раз:
move(2, 0); // [2, 0, 1, 3, 4, 5]
move(1, 2); // [2, 1, 0, 3, 4, 5] (swapped 2 with 0)
move(4, 2); // [2, 1, 4, 0, 3, 5]
move(3, 4); // [2, 1, 4, 3, 0, 5] (swapped 4 with 0)
move(4, 3); // [2, 1, 4, 0, 3, 5] (swapped 0 with 3)
move(5, 4); // [2, 1, 4, 0, 5, 3] (swapped 5 with 3)
Таким образом, у меня также есть список move()
операций для достижения желаемого результата. Список операций move()
может быть уменьшен в размере путем изменения порядка и индексов, чтобы в итоге получить тот же результат.
Есть ли алгоритм, который я могу использовать в своем списке move()
операций, чтобы сократить количество операций до минимума?