Vấn đề là đáng ngạc nhiên không tầm thường. Đầu tiên, hai thuật toán vũ phu. Một hình vuông ( "mô hình lặp đi lặp lại") được cho bởi nó dài ℓ và vị trí p , và đòi hỏi thời gian Ô ( ℓ ) để xác minh. Nếu chúng ta đi khắp nơi ℓ và p , chúng ta có được một Ô ( n3) thuật toán. Chúng tôi có thể cải thiện vào đó bằng cách đầu tiên Looping trên ℓ , và sau đó quét chuỗi với hai con trỏ chạy ở khoảng cách ℓ . Bằng cách này, người ta có thể xác minh xem một hình vuông có độ dài 2 ℓ tồn tại trong thời gian tuyến tính, đưa ra một tổng thời gian chạy Ô ( n2) .
Kolpakov và Kucherov đã phát triển một thuật toán để tìm tất cả các lần lặp tối đa trong một từ trong thời gian Ô ( n ) [1], và thuật toán của chúng có thể được sử dụng để tìm tất cả các bình phương tối đa trong thời gian Ô ( n ) . Một lặp lại là một subword dạng wkx , nơi k ≥ 2 và x là một tiền tố thích hợp của w . Quảng trường lớn nhất chứa trong lặp lại đó là ( w⌊ k / 2 ⌋)2. Sử dụng công thức này, với tất cả các lần lặp tối đa trong một từ (trong đó chỉ có Ô ( n ) nhiều), người ta có thể tìm thấy hình vuông lớn nhất.
[1] Kolpakov, R., & Kucherov, G. (1999). Tìm sự lặp lại tối đa trong một từ trong thời gian tuyến tính . Trong nền tảng của Khoa học máy tính, 1999. Hội nghị chuyên đề hàng năm lần thứ 40 về (trang 596-604). IEEE.
142857
không phải là thời gian dài nhất vì đó là một vài lần142857142857
. Tôi nghĩ rằng bạn nên chỉnh sửa câu hỏi để làm rõ những gì bạn muốn nói về mô hình lặp đi lặp lại.