Đối với những người không quen thuộc với tìm kiếm nội suy, đó là phương pháp tìm kiếm một giá trị trong một mảng được sắp xếp có khả năng tìm kiếm nhanh hơn tìm kiếm nhị phân. Bạn nhìn vào phần tử đầu tiên và cuối cùng và (giả sử rằng nội dung của mảng được phân bố đồng đều) nội suy tuyến tính để dự đoán vị trí.Tìm kiếm nội suy trên các chuỗi
Ví dụ: chúng tôi có một mảng có độ dài 100 với mảng [0] = 0 và mảng [99] = 99. Nếu chúng ta đang tìm kiếm 80, nó là trực quan để thử mảng [80] trên mảng [50], và nếu mảng gần phân phối đồng đều, thời gian chạy dự kiến sẽ giảm xuống log(log(N))
Để biết số, vị trí cần kiểm tra được xác định theo phương trình: low + ((toFind - sortedArray[low]) * (high - low + 1))/(sortedArray[high] - sortedArray[low])
.
Một ví dụ phổ biến được sử dụng để thể hiện bản chất trực quan của tìm kiếm nội suy là: hãy tưởng tượng cố gắng tìm từ 'vàng' trong từ điển. Bạn sẽ không sử dụng tìm kiếm nhị phân và đi đến một nửa điểm. Thay vào đó, bạn sẽ đi đến vị trí mong đợi.
Con người có thể tự nội suy tuyến tính chuỗi, nhưng tôi không thể tìm ra cách mã nó lên. Làm cách nào để chúng ta nội suy tuyến tính?
Những điểm tốt xung quanh. +1 –
Độ phức tạp thêm là 2 mult/div + 5 add/sub. Tôi đã thử nghiệm nó và, có, nó là một chút chậm hơn so với tìm kiếm nhị phân (nếu N không phải là vô lý). Nhưng nếu so sánh là không tầm thường (như trong trường hợp dây) thì nó có thể trở nên đáng giá. – user108088
@ user108088, độ phức tạp cũng nằm trong khoảng cách tính toán, điều này cũng sẽ không nhỏ trong trường hợp chuỗi. Xem chỉnh sửa của tôi. –