Pertimbangkan permutasi bilangan bulat 1, ... n,, seperti ini untuk n = 6:
[5,2,4,3,6,1]
Jika Anda melihat permutasi sebagai pemetaan dari [1,2,3,4,5,6]ke [5,2,4,3,6,1], permutasi dapat didekomposisi menjadi siklus terpisah . Siklus adalah subset elemen yang saling memetakan. Misalnya, 1dipetakan ke 5, yang dipetakan ke 6, yang dipetakan kembali ke 1. Jadi satu siklus [1,5,6]. Siklus lainnya adalah [2]dan [3,4]. Jadi jumlah siklus untuk permutasi ini adalah 3.
Secara umum, siklus permutasi adalah unik (sesuai pesanan), dan jumlah siklus untuk permutasi ukuran nbervariasi dari 1hingga n.
Tantangan
Dengan permutasi yang tidak kosong, outputkan jumlah siklusnya.
Input adalah sebuah array yang dibentuk oleh nbilangan bulat 1, 2, ..., n, mana n > 0. Setiap bilangan bulat terjadi tepat satu kali. Urutan di mana mereka muncul mendefinisikan permutasi, seperti pada contoh di atas.
Alih-alih array, Anda dapat menggunakan daftar, string dengan pemisah antara angka, input terpisah untuk setiap angka, atau apa pun yang masuk akal.
Untuk permutasi ukuran n, bukannya set integer berbasis 1 1, ..., nAnda dapat secara konsisten menggunakan set berbasis 0 0, ..., n-1. Jika demikian, harap tunjukkan dalam jawaban Anda.
Kode harus bekerja nhingga 20waktu yang wajar, katakanlah kurang dari satu menit.
Golf kode. Semua bawaan diizinkan.
Uji kasus
Ini mengasumsikan input array berbasis 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
Terkait
Tantangan terkait ini menanyakan siklus aktual dari permutasi, bukan jumlah mereka. Hanya membutuhkan jumlah siklus yang dapat menyebabkan algoritma yang lebih pendek yang menghindari menghasilkan siklus yang sebenarnya.
1, ..., ndalam urutan itu. Bisakah Anda mengklarifikasi bagaimana pemetaan bisa menjadi input? Apakah ini struktur data?
dict. Saya ingin memiliki {1: 2, 2: 1}sebagai input, bukan [2, 1].