Dato il seguente problema:Trova il periodo minimo di stringa di input in O (n)?
Definizione:
Sia S una stringa sopra alfabeto Σ.
S'
è il periodo più piccola delleS
seS'
è la stringa più piccola in modo tale che:
S = (S')^k (S'')
,dove
S''
è un prefisso diS
. Se non esiste taleS'
, alloraS
è non periodico.Esempio:
S = abcabcabcabca
. Quindiabcabc
è un periodo dalS = abcabc abcabc a
, ma il periodo più piccolo èabc
dalS = abc abc abc abc a
.Assegnare un algoritmo per trovare il periodo minimo di stringa di input
S
o dichiarare cheS
non è periodico.Suggerimento: Si può fare in
O(n)
...
La mia soluzione: Usiamo KMP, che viene eseguito in O (n).
Dalla definizione del problema, S = (S ')^k (S' '), quindi penso che se creiamo un automa per il periodo più breve, e trovare un modo per trovare quel periodo più breve, allora ho finito.
Il problema è dove mettere la freccia FAIL del automi ...
Tutte le idee sarebbe molto apprezzato,
saluti
Non sarebbe 'S = (S '') (S ')^k' se' S''' è un prefisso, o si tratta di notazione che si aggiunge al fronte? – Mikeb
@Mikeb: No, guarda l'esempio: qui 'S = abcabcabcabca',' S '= abc' e 'S' '= a' ... poiché' S''' è l'ultimo carattere. – ron
quindi se 'S = qweabcabcabc', la stringa non è periodica? Suppongo di avere solo un cavillo linguistico, nel tuo esempio chiamerei "S" un suffisso. – Mikeb