Các cụm từ thời gian tối thiểu và thời gian tối đa có một chút sai lệch ở đây. Khi chúng ta nói về ký hiệu O lớn, đó không phải là thời gian thực sự mà chúng ta quan tâm, đó là thời gian tăng lên như thế nào khi kích thước đầu vào của chúng ta lớn hơn. Và đó thường là thời gian trung bình hoặc trường hợp xấu nhất mà chúng ta đang nói đến, không phải trường hợp tốt nhất , thường không có ý nghĩa trong việc giải quyết vấn đề của chúng ta.
Sử dụng tìm kiếm mảng trong câu trả lời được chấp nhận cho câu hỏi khác làm ví dụ. Thời gian cần thiết để tìm một số cụ thể trong danh sách có kích thước n là trung bình n / 2 * some_constant. Nếu bạn coi nó như một hàm f(n) = n/2*some_constant
, nó tăng không nhanh hơn g(n) = n
, theo nghĩa như Charlie đã đưa ra. Ngoài ra, nó tăng không chậm hơn g(n)
. Do đó, g(n)
thực sự là cả giới hạn trên và giới hạn dưới của f(n)
ký hiệu Big-O, vì vậy độ phức tạp của tìm kiếm tuyến tính chính xác là n , nghĩa là nó là Theta (n).
Về vấn đề này, lời giải thích trong câu trả lời được chấp nhận cho câu hỏi kia không hoàn toàn đúng, điều này khẳng định rằng O (n) là giới hạn trên vì thuật toán có thể chạy trong thời gian không đổi đối với một số đầu vào (đây là trường hợp tốt nhất mà tôi đã đề cập ở trên, mà không thực sự là những gì chúng tôi muốn biết về thời gian chạy).