Cho hai ký hiệu và b , hãy xác định chuỗi Fib- k thứ k như sau:
với biểu thị chuỗi nối.
Do đó, chúng ta sẽ có:
- ...
Với một chuỗi được hình thành bởi n ký hiệu, chúng tôi định nghĩa một chuỗi con Fibonacci là bất kỳ chuỗi con nào của S cũng là một chuỗi Fibonacci cho sự lựa chọn phù hợp của a và b .
Vấn đề
Với , chúng tôi muốn tìm chuỗi con Fibonacci dài nhất của nó.
Một thuật toán tầm thường
Đối với mỗi vị trí của chuỗi S , giả sử rằng F ( 2 ) bắt đầu từ đó (đủ để kiểm tra các ký hiệu thứ i và ( i + 1 ) có khác biệt không). Nếu đó là trường hợp, kiểm tra xem nó có thể được mở rộng đến F ( 3 ) , sau đó F ( 4 ) , v.v. Sau đó, bắt đầu lại từ vị trí i + 1 . Lặp lại cho đến khi bạn đạt đến vị trí n .
Chúng ta phải nhìn vào mỗi biểu tượng ít nhất một lần, vì vậy nó là . Chỉ có hai vòng lặp liên quan, vì vậy chúng ta có thể nói thêm rằng đó là O ( n 2 ) .
Tuy nhiên (hơi ngạc nhiên) thuật toán ngây thơ này hoạt động tốt hơn nhiều so với thuật toán bậc hai thông thường (nếu nó hoạt động nhiều ở vị trí thứ , nó sẽ không làm được nhiều việc ở các vị trí tiếp theo).
Làm cách nào tôi có thể sử dụng các thuộc tính Fibonacci để tìm giới hạn chặt hơn cho thời gian thực hiện của thuật toán này?