Tôi đã luôn nghe nói rằng tìm kiếm tuyến tính là một cách tiếp cận ngây thơ và tìm kiếm nhị phân tốt hơn so với hiệu suất do độ phức tạp tiệm cận tốt hơn. Nhưng tôi không bao giờ hiểu tại sao nó tốt hơn tìm kiếm tuyến tính khi cần sắp xếp trước khi tìm kiếm nhị phân?
Tìm kiếm tuyến tính là O(n)
và tìm kiếm nhị phân là O(log n)
. Đó dường như là cơ sở để nói rằng tìm kiếm nhị phân là tốt hơn. Nhưng tìm kiếm nhị phân yêu cầu sắp xếp đó là O(n log n)
cho các thuật toán tốt nhất. Vì vậy, tìm kiếm nhị phân không nên thực sự nhanh hơn vì nó yêu cầu sắp xếp.
Tôi đang đọc CLRS trong đó tác giả ngụ ý rằng trong sắp xếp chèn thay vì sử dụng phương pháp tìm kiếm tuyến tính ngây thơ, tốt hơn là sử dụng tìm kiếm nhị phân để tìm vị trí phải chèn mục. Trong trường hợp này, điều này có vẻ hợp lý vì tại mỗi lần lặp lại có một danh sách được sắp xếp theo đó tìm kiếm nhị phân có thể được áp dụng. Nhưng trong trường hợp chung không có gì đảm bảo về tập dữ liệu mà chúng ta cần tìm kiếm không sử dụng tìm kiếm nhị phân thực sự tồi tệ hơn tìm kiếm tuyến tính do yêu cầu sắp xếp?
Có bất kỳ cân nhắc thực tế nào mà tôi đang xem xét giúp tìm kiếm nhị phân tốt hơn tìm kiếm tuyến tính không? Hoặc là tìm kiếm nhị phân được coi là tốt hơn so với tìm kiếm tuyến tính mà không xem xét thời gian tính toán cần thiết để sắp xếp?