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.
142857khô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.