Với vấn đề sau đây:Tìm khoảng thời gian nhỏ nhất của chuỗi đầu vào trong O (n)?
Định nghĩa:
Gọi S là một chuỗi trên bảng chữ cái Σ.
S'
là giai đoạn nhỏ nhất củaS
nếuS'
là chuỗi nhỏ nhất sao cho:
S = (S')^k (S'')
,nơi
S''
là tiền tố củaS
. Nếu không cóS'
nào tồn tại, thìS
là không định kỳ.Ví dụ:
S = abcabcabcabca
. Sau đó,abcabc
là khoảng thời gian từS = abcabc abcabc a
, nhưng khoảng thời gian nhỏ nhất làabc
kể từS = abc abc abc abc a
.Hãy cho một thuật toán để tìm ra khoảng thời gian nhỏ nhất của chuỗi đầu vào
S
hoặc tuyên bố rằngS
là không định kỳ.Gợi ý: Bạn có thể làm điều đó trong
O(n)
...
Giải pháp của tôi: Chúng tôi sử dụng KMP, chạy trong thời gian O (n).
Theo định nghĩa của vấn đề, S = (S ')^k (S' '), sau đó tôi nghĩ rằng nếu chúng ta tạo một automata trong thời gian ngắn nhất, và tìm cách để tìm khoảng thời gian ngắn nhất, thì tôi xong rồi.
Vấn đề là nơi để đặt mũi tên FAIL của automata ...
ý tưởng Bất kỳ sẽ được đánh giá rất nhiều,
Trân
Nó sẽ không được 'S = (S '') (S ')^k' nếu' S''' là một tiền tố, hoặc là này ký hiệu phụ thêm vào phía trước? – Mikeb
@Mikeb: Không, hãy xem ví dụ: ở đây 'S = abcabcabcabca',' S '= abc' và 'S' '= a' ... vì' S''' là ký tự cuối cùng. – ron
vì vậy nếu 'S = qweabcabcabc', chuỗi không phải là định kỳ? Đoán tôi chỉ có một ngôn ngữ ngụy biện, trong ví dụ của bạn tôi muốn gọi là 'S''' một hậu tố. – Mikeb