Biorąc pod uwagę następujący problem:Znajdź najmniejszy okres ciągu wejściowego w O (n)?
Definicja:
Niech S będzie ciągiem nad alfabetem Ď.
S'
jest najmniejszy okresS
jeśliS'
jest najmniejszym ciąg taki, że:
S = (S')^k (S'')
,gdzie
S''
jest prefiksemS
. Jeśli nie istnieje takaS'
, toS
jest nie okresowa.Przykład:
S = abcabcabcabca
. Następnieabcabc
jest okresem odS = abcabc abcabc a
, ale najmniejszy okres toabc
odS = abc abc abc abc a
.Podaj algorytm, aby znaleźć najmniejszy okres ciągu wejściowego
S
lub zadeklaruj, żeS
nie jest okresowy.Podpowiedź: Można to zrobić w
O(n)
...
Moje rozwiązanie: Używamy KMP, która biegnie w O (n).
Definiując problem, S = (S ')^k (S "), to myślę, że jeśli stworzymy automatów na najkrótszy czas i znajdziemy sposób na znalezienie najkrótszego okresu, to już koniec.
Problem polega na tym, gdzie umieścić fail strzałkę z automatów ...
jakieś pomysły będą bardzo mile widziane,
Pozdrowienia
Nie byłoby 'P = (S") (S)^k' podaniu 'S''' jest prefiks, czy jest to notacja dołączana do frontu? – Mikeb
@Mikeb: Nie, spójrz na przykład: tutaj 'S = abcabcabcabca',' S '= abc' i 'S' '= a' ... ponieważ' S''' jest ostatnią postacią. – ron
, więc jeśli 'S = qweabcabcabc', ciąg nie jest okresowy? Domyślam się, że mam tylko kwestię językową, w twoim przykładzie nazwałbym sufiks "S". – Mikeb