У меня есть перестановка чисел от 1 до n.в каждом ходу функция перестановки используется для сопоставления текущей перестановки с новой.
Функция определяется F(i) = p[i]
, которая отображает каждый элемент текущей перестановки в позицию в новой перестановке.Поскольку эта функция инъективна и сюръективна, можно доказать, что мы всегда возвращаемся к первой перестановке снова.(На самом деле это цикл в графе перестановок)
, например, [2,3,1] -> [3,1,2] -> [1,2,3] -> [2,3,1]
, поэтому длина цикла равна 3, поскольку первая и последняя перестановки совпадают, и мы застряли в цикле.
В качестве входных данных у меня есть особый вид перестановок, подобный этому:
[2,1,
4,5,3,
7,8,9,10,6,
17,11,12,13,14,15,16,
18,19,20,
29,21,22,23,24,25,26,27,28,
40,30,31,32,33,34,35,36,37,38,39,
53,41,42,43,44,45,46,47,48,49,50,51,52]
Он состоит из некоторых подперестановок (каждая строка имеет набор чисел, которые принадлежат множеству их индексов)
Мой вопрос: какое минимальное количество ходов необходимо для того, чтобы снова добраться до первой перестановки.
В качестве практической проблемы в прологе я хочу вычислить количество ходов для каждой подстановки и получить их lcm, но я не уверен, как это реализовать (как подсчитать количество ходов для каждого подсписка).-перестановка)
Любая помощь будет оценена