Если список содержит числа от 0
до n-1
в некотором порядке,
toPermutationGraph :: [Int] -> [(Int,Int)]
toPermutationGraph = zip [0 .. ]
дает график перестановки.Из графика вы можете легко вычислить порядок, разбив его на связанные компоненты (соответствующие циклам, из которых состоит перестановка).Порядок цикла - это количество элементов в цикле.Непересекающиеся циклы коммутируют, что облегчает вычисление порядка произведения непересекающихся циклов.