Bir dizede en uzun tekrarlanan kalıbı bulma


9

Bir dizede en uzun tekrarlanan deseni bulmak için verimli bir algoritma arıyorum.

Örneğin, aşağıdaki sayı dizesini göz önünde bulundurun:

5431428571428571428571428571427623874534.

Gördüğünüz gibi 142857142857, bu dizede birkaç kez (en az iki kez) tekrarlanan en uzun model.

Tekrarlanan dize kaba kuvvet yerine herhangi bir fikir içermemelidir?


3
“Birkaç kez” ne anlama geldiğini tanımladınız, ancak “iki kez” “birkaç kez” olarak sayılırsa, o zaman 142857en uzun değildir, çünkü 142857142857daha uzundur. "Tekrarlanan kalıp" ile ne demek istediğinizi açıklığa kavuşturmak için soruyu düzenlemeniz gerektiğini düşünüyorum.
Tsuyoshi Ito

çok iyi bir nokta. Soruyu güncelleyeceğim.

8
Desenin oluşumlarının birbirinden ayrılmasını mı istiyorsunuz? Çünkü değilse, 142857142857 hala en uzun tekrar değildir; 142857142857142857142 iki kez oluşur. Her durumda, bunun gibi sorulara verilen genel cevap "sonek ağaçları" dır.

Yanıtlar:


15

Sorun şaşırtıcı derecede önemsiz değil. İlk olarak, iki kaba kuvvet algoritması. Bir kare ("tekrarlanan desen") uzunluğu ve konumu ile verilir ve doğrulanması zamanını alır . Tüm ve , bir algoritması elde ederiz . İlk önce üzerinde döngü ve sonra dizeyi mesafesinde iki çalışan işaretçi ile tarayarak bunu geliştirebiliriz . Bu şekilde, uzunluğundaki bir karenin doğrusal zamanda var olup olmadığı doğrulanabilir ve toplam çalışma süresi verilir .pO()pO(n3)2O(n2)

Kolpakov ve Kucherov tüm bulmak için bir algoritma geliştirilmiş maksimal tekrarlarını zaman içinde bir kelime [1], ve bunların algoritma zaman tüm maksimal kareler bulmak için kullanılabilir . Bir tekrar formunun bir alt-kelime olduğu , burada ve uygun bir öneki . Bu tekrarda yer alan en büyük kare . Bir kelimedeki (sadece çok olan) tüm maksimum tekrarlar verildiğinde bu formülü kullanarak, en büyük kareyi bulabilirsiniz.O(n)O(n)wkxk2xw(wk/2)2O(n)


[1] Kolpakov, R. ve Kucherov, G. (1999). Doğrusal zamanda bir kelimedeki maksimum tekrarları bulma . In Bilgisayar Bilimi, 1999 40 Yıllık Sempozyumu Vakıflar (s. 596-604). IEEE.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.