Bài 19 - Tìm kiếm nội suy trong cấu trúc dữ liệu & giải thuật

Tìm mò mẫm nội suy

Tìm mò mẫm nội suy (Interpolation Search) là đổi mới thể nâng cấp của mò mẫm kiếm nhị phân (Binary Search). Để giải thuật mò mẫm kiếm này thao tác làm việc đúng chuẩn thì luyện tài liệu cần được bố trí.

Bạn đang xem:

Binary Search chất lượng tốt thế rộng lớn về phỏng phức tạp thời hạn Lúc đối chiếu với Linear Search. Linear Search có tính phức tạp tình huống xấu xí nhất là Ο(n) trong lúc Binary Search là Ο(log n).

Có một số trong những trường hợp nhưng mà địa điểm của tài liệu cần thiết mò mẫm hoàn toàn có thể đã và đang được biết trước. Ví dụ: vô tình huống danh bạ điện thoại cảm ứng, nếu như Shop chúng tôi ham muốn mò mẫm kiếm số điện thoại cảm ứng của Morphius. Ở phía trên, mò mẫm kiếm tuyến tính và thậm chí là mò mẫm kiếm nhị phân sẽ có được vẻ chậm trễ vì thế tất cả chúng ta hoàn toàn có thể thẳng nhảy vô không khí bộ lưu trữ điểm những thương hiệu chính thức kể từ 'M' được tàng trữ.

Định vị vô Tìm mò mẫm nhị phân

Trong mò mẫm kiếm nhị phân, nếu như không nhìn thấy tài liệu mong ước thì phần sót lại của list được tạo thành nhì phần, thấp rộng lớn và cao hơn nữa. Việc mò mẫm tìm kiếm được tiến hành ở 1 trong các nhì.

Ngay cả Lúc tài liệu được bố trí, mò mẫm kiếm nhị phân ko tận dụng tối đa nhằm thăm hỏi thám thính địa điểm của tài liệu mong ước.

Tìm mò mẫm nội suy mò mẫm kiếm một thành phần ví dụ bằng sự việc đo lường và tính toán địa điểm thám thính (Probe Position). Ban đầu thì địa điểm thám thính là địa điểm của thành phần nằm ở vị trí thân ái nhất của luyện tài liệu.

Nếu nhìn thấy liên kết thì chỉ mục của thành phần được trả về. Để phân tách list trở thành nhì phần, tất cả chúng ta dùng cách thức sau:

mid = Lo + ((Hi - Lo) / (A[Hi] - A[Lo])) * (X - A[Lo])

where −

   A    = list

   Lo   = Lowest index of the list

   Hi   = Highest index of the list

   A[n] = Value stored at index n in the list

Nếu mục ở thân ái to hơn mục, thì địa điểm thăm hỏi thám thính lại được xem vô mảng phụ ở phía bên phải của mục thân ái. Mặt không giống, mục này được mò mẫm kiếm vô phân đoạn phía bên trái của mục thân ái. Quá trình này nối tiếp bên trên mảng con cái cho tới Lúc độ dài rộng của phân đoạn hạ xuống vì chưng ko.

Độ phức tạp thời hạn chạy của thuật toán mò mẫm kiếm nội suy là Ο (log (log n)) so với Ο (log n) của BST trong số trường hợp tiện lợi.

Thuật toán

Vì đó là một phần mềm của thuật toán BST hiện tại đem, Shop chúng tôi đang được nhắc đến quá trình nhằm mò mẫm kiếm chỉ số độ quý hiếm tài liệu của 'mục tiêu', dùng thăm hỏi thám thính địa điểm -

Step 1 − Start searching data from middle of the list.

Step 2 − If it is a match, return the index of the item, and exit.

Step 3 − If it is not a match, probe position.

Step 4 − Divide the list using probing formula and find the new midle.

Step 5 − If data is greater than thở middle, tìm kiếm in higher sub-list.

Step 6 − If data is smaller than thở middle, tìm kiếm in lower sub-list.

Step 7 − Repeat until match.

Mã giả

A → Array list

N → Size of A

X → Target Value

Procedure Interpolation_Search()

   Set Lo  →  0

   Set Mid → -1

   Set Hi  →  N-1

   While X does not match

      if Lo equals to tướng Hi OR A[Lo] equals to tướng A[Hi]

         EXIT: Failure, Target not found

      kết thúc if     

      Set Mid = Lo + ((Hi - Lo) / (A[Hi] - A[Lo])) * (X - A[Lo])

      if A[Mid] = X

         EXIT: Success, Target found at Mid

      else

         if A[Mid] < X

            Set Lo to tướng Mid+1

         else if A[Mid] > X

            Set Hi to tướng Mid-1

         kết thúc if

      kết thúc if

   End While

End Procedure

- Hiếu Kiều -