Bunun için tamsayıların , ... gibi bir permütasyon düşünün :1
n
n = 6
[5,2,4,3,6,1]
Eğer bir eşleme olarak permütasyon görüntülerseniz [1,2,3,4,5,6]
için [5,2,4,3,6,1]
, permütasyon ayrık içine decomponsed edilebilir döngüleri . Döngü, birbirine eşlenen öğelerin alt kümesidir. Örneğin, 1
eşlenecek 5
, eşlenecek 6
, geri eşlenecek 1
. Yani bir döngü [1,5,6]
. Diğer çevrimler [2]
ve [3,4]
. Böylece bu permütasyon için döngü sayısı3
.
Genel olarak, bir permütasyonun döngüleri benzersizdir (siparişe göre) ve büyüklükte bir permütasyon için döngü sayısı ila n
arasında değişir .1
n
Meydan okuma
Boş olmayan bir permütasyon verildiğinde, döngü sayısını verin.
Girdi oluşturduğu bir dizidir n
tamsayılar 1
, 2
, ..., n
, nerede n > 0
. Her tamsayı tam olarak bir kez oluşur. Göründükleri sıra yukarıdaki örnekte olduğu gibi permütasyonu tanımlar.
Bir dizi yerine bir liste, sayılar arasında bir ayırıcıya sahip bir dize, her sayı için ayrı bir giriş veya makul olan herhangi bir şey kullanabilirsiniz.
Boyut n
tabanlı bir tamsayı için 1
, 1 tabanlı tamsayılar kümesi yerine n
, 0 tabanlı 0
, ..., n-1
. Eğer öyleyse, lütfen cevabınızı belirtiniz.
Kod için çalışması gerektiğini n
etmek kadar 20
makul bir süre içinde, az bir dakika daha demek.
Kod golfü. Tüm yapılara izin verilir.
Test durumları
Bu 1 tabanlı dizi girişini varsayar.
[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
İlgili
Bu ilgili zorluk , sayısını değil, permütasyonun gerçek çevrimlerini sorar. Yalnızca döngü sayısını gerektirmek, gerçek döngüleri oluşturabilen daha kısa algoritmalara yol açabilir.
1
ise ..., bu n
sırada olduğunu düşünüyorum. Bir eşlemenin nasıl bir girdi olabileceğini açıklayabilir misiniz? Veri yapısı mı?
dict
. Bunun {1: 2, 2: 1}
yerine bir girdi olarak sahip olmak istiyorum [2, 1]
.