Предположим, у меня есть массив как это: [5 4 1 2 3]минимальный переключатель для отсортированного перестановки
И я хочу, чтобы вычислить минимальный переключатель я должен сделать, чтобы отсортировать несортированный перестановку.
Теперь ответ 7 в этом случае. Просто двигайте 4 и 5 вправо или перемещайте 1, 2, 3 влево.
Ирония заключается в том, что я использовал [4 5 1 2 3] в своих заметках, что дает 6, и вводит в заблуждение себя и делает себя дураком.
Шаги:
[5 1 2 3 4] // Шаг 1
[1 5 4 3 2] // Шаг 2
[1 5 4 3 2] // шаг 3
[1 2 3 4 5] // шаг 4
[1 2 3 4 5] // шаг 5
[1 2 3 4 5] // шаг 6
[1 2 3 4 5] // Шаг 7
Я думал о вещах, как иметь массив, сохранить смещение необходимо, и для каждого цикла, просто посмотрите на переключатель, который перемещает все это ближе к цели.
Но это кажется слишком медленным, любые идеи?
EDIT: из комментария: являются ли элементы массива гарантированно полностью принадлежащими {1..N} для массива размера N, без повторяющихся чисел?
Nope. Это не гарантирует, не повторять или быть в [1 ... N] для массива размером с N.
UPDATE:
Есть два пути решения этой конкретной проблемы, как только медленнее, но более простой BubbleSort, другой более быстрый, но менее простой слияние.
С помощью bubblesort вы в основном рассчитываете количество переключателей при запуске алгоритма.
С mergesort это немного сложнее, но подсчет происходит при слиянии. Когда массив уже объединен, счетчик должен дать 0, поскольку для сортировки этого массива не потребуется никаких коммутаторов. С помощью bubblesort вы считаете переключатели, когда вы нажимаете самое большое или наименьшее число влево или вправо. С mergesort вы рассчитываете переключатели при слиянии. Я немного ручаю, нажимая грубую силу, вы попадете туда.
Как вы определить это 7? – nmclean
Это полностью зависит от используемого вами алгоритма. Чем лучше, тем меньше ненужных переключателей. Обратите внимание: [видео] (http://youtu.be/vxENKlcs2Tw?t=1m54s) – smac89
@nmclean, почему бы не быть 7? Я думаю, что это так, как я подробно рассказал о шаге. Можете ли вы найти другой способ с более низким числом счетчиков? –