Considera le seguenti definizioni tratte da Il numero di esecuzioni in una stringa di W. Rytter. Nota che parola, stringa e sottostringa sono approssimativamente sinonimi.
Un'esecuzione in una stringa è un segmento periodico non allungabile (con lo stesso periodo minimo) in una stringa.
Un punto p di una parola w è un numero intero positivo p tale che w [i] = w [i + p] ogni volta che vengono definiti entrambi i lati di questa equazione. Let per (w) indica la dimensione del periodo più piccolo di w. Diciamo che una parola w è periodica iff per (w) <= | w | / 2.
Ad esempio, considera la stringa x = abcab. per(abcab) = 3come x[1] = x[1+3] = a, x[2]=x[2+3] = be non v'è alcun periodo più piccolo. La stringa non abcabè pertanto periodica. Tuttavia, la stringa ababè periodica secondo (abab) = 2.
Una corsa (o massima periodicità) in una stringa w è un intervallo [i ... j] con j> = i, tale che
- w [i ... j] è una parola periodica con il periodo p = per (w [i ... j])
- È massimo. Formalmente, né w [i-1] = w [i-1 + p] né w [j + 1] = w [j + 1-p]. Informalmente, la corsa non può essere contenuta in una corsa più grande con lo stesso periodo.
Indicare con RUNS (w) il set di percorsi di w.
Esempi
Le quattro serie di atattattsono [4,5] = tt, [7,8] = tt, [1,4] = atat, [2,8] = tattatt.
La stringa aabaabaaaacaacaccontiene le seguenti 7 esecuzioni:
[1,2] = aa, [4,5] = aa, [7,10] = aaaa, [12,13] = aa, [13,16] = acac, [1,8] = aabaabaa, [9 , 15] = aacaaca.
L'output dovrebbe essere un elenco di esecuzioni. Ogni esecuzione deve specificare l'intervallo che rappresenta ma non è necessario generare la sottostringa stessa. La formattazione esatta può essere ciò che è conveniente per te.
Gli esempi usano l'indicizzazione 1 ma sei libero di usare l'indicizzazione 0 invece se è più conveniente.
COMPITO
Scrivi il codice che ha dato una stringa w, output RUNS (w).
Lingue e input
Puoi usare qualsiasi lingua ti piaccia e prendere la stringa di input in qualunque forma sia più conveniente. Devi comunque fornire un programma completo e dovresti mostrare un esempio del tuo codice in esecuzione sull'input di esempio.
class A{public static ...}ogni volta che volevo giocare a golf