Trova il motivo ripetuto più lungo in una stringa


9

Sto cercando un algoritmo efficiente per trovare il modello ripetuto più lungo in una stringa.

Ad esempio, considera la seguente stringa di numeri:

5431428571428571428571428571427623874534.

Come puoi vedere, 142857142857è il modello più lungo che si ripete per un paio di volte (almeno due volte) in questa stringa.

La stringa ripetuta non dovrebbe contenere alcuna idea piuttosto che forza bruta?


3
Non hai definito cosa significa "un paio di volte", ma se "due volte" conta come "un paio di volte", allora 142857non è il più lungo perché 142857142857è più lungo. Penso che dovresti modificare la domanda per chiarire cosa intendi con "schema ripetuto".
Tsuyoshi Ito

ottimo punto. Aggiornerò la domanda.

8
Stai richiedendo che le occorrenze del modello siano disgiunte l'una dall'altra? Perché in caso contrario, 142857142857 non è ancora la ripetizione più lunga; 142857142857142857142 si verifica due volte. In ogni caso, la solita risposta a domande come questa è "suffisso".

Risposte:


15

pO()pO(n3)2O(n2)

O(n)O(n)wkxk2xw(wk/2)2O(n)


[1] Kolpakov, R. e Kucherov, G. (1999). Trovare ripetizioni massime in una parola in tempo lineare . In Foundations of Computer Science, 1999. 40 ° Simposio annuale su (pagg. 596-604). IEEE.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.