Rozważ permutację liczb całkowitych 1... n, takich jak ta dla n = 6:
[5,2,4,3,6,1]
Jeśli zobaczysz permutację jako odwzorowanie od [1,2,3,4,5,6]do [5,2,4,3,6,1], permutację można rozłożyć na rozłączne cykle . Cykl jest podzbiorem elementów odwzorowujących się względem siebie. Na przykład 1zostanie zamapowany na 5, który zostanie zmapowany 6, na który zostanie odwzorowany z powrotem 1. Tak więc jest jeden cykl [1,5,6]. Pozostałe cykle to [2]i [3,4]. Zatem liczba cykli dla tej permutacji wynosi 3.
Zasadniczo cykle permutacji są unikalne (do kolejności), a liczba cykli permutacji wielkości njest różna od 1do n.
Wyzwanie
Biorąc pod uwagę niepustą permutację, wypisz jej liczbę cykli.
Wejście jest tablica utworzona przez nliczby całkowite 1, 2, ..., n, gdzie n > 0. Każda liczba całkowita występuje dokładnie raz. Kolejność, w jakiej się pojawiają, określa permutację, jak w powyższym przykładzie.
Zamiast tablicy możesz użyć listy, łańcucha z separatorem między liczbami, osobnego wejścia dla każdej liczby lub wszystkiego, co jest rozsądne.
Aby uzyskać permutację rozmiaru n, zamiast 1-liczbowego zestawu liczb całkowitych 1... nmożesz konsekwentnie używać zestawu 0-liczbowego 0, ..., n-1. Jeśli tak, proszę wskazać to w odpowiedzi.
Kod powinien działać nnawet 20w rozsądnym czasie, powiedzmy krócej niż minutę.
Kod golfa. Wszystkie wbudowane dozwolone.
Przypadki testowe
Zakłada się, że dane wejściowe z tablicy 1.
[1] -> 1
[3,2,1] -> 2
[2,3,4,5,1] -> 1
[5,2,4,3,6,1] -> 3
[8,6,4,5,2,1,7,3] -> 2
[4,5,11,12,7,1,3,9,10,6,8,2] -> 1
[4,2,5,11,12,7,1,3,9,10,6,8] -> 5
[5,8,6,18,16,9,14,10,11,12,4,20,15,19,2,17,1,13,7,3] -> 3
[14,5,17,15,10,18,1,3,4,13,11,16,2,12,9,7,20,6,19,8] -> 7
Związane z
To powiązane wyzwanie wymaga rzeczywistych cykli permutacji, a nie ich liczby. Wymaganie tylko liczby cykli może prowadzić do krótszych algorytmów, które omijają generowanie faktycznych cykli.
1, ..., nw tej kolejności. Czy możesz wyjaśnić, w jaki sposób mapowanie może być wkładem? Czy to struktura danych?
dict. Chcę mieć {1: 2, 2: 1}jako dane wejściowe zamiast [2, 1].