http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Giải thuật Tìm kiếm nội suy (Interpolation Search) Giải thuật Tìm kiếm nội suy (Interpolation Search) ? Tìm kiếm nội suy (Interpolation Search) biến thể cải tiến Tìm kiếm nhị phân (Binary Search) Để giải thuật tìm kiếm làm việc xác tập liệu phải xếp Binary Search có lợi lớn độ phức tạp thời gian so sánh với Linear Search Linear Search có độ phức tạp trường hợp xấu Ο(n) Binary Search Ο(log n) Có số tình mà vị trí liệu cần tìm biết trước Ví dụ, trường hợp danh bạ điện thoại, muốn tìm số điện thoại Hương chẳng hạn Trong trường hợp này, Linear Search Binary Search chậm thực tìm kiếm, mà trực tiếp nhảy tới phần không gian nhớ có tên bắt đầu với H lưu giữ Xác định vị trí Binary Search Trong Binary Search, liệu cần tìm khơng tìm thấy phần lại danh sách phân chia thành hai phần: phần bên trái (chứa giá trị nhỏ hơn) phần bên phải (chứa giá trị lớn hơn) Sau tiến trình tìm kiếm thực hai phần http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Dò vị trí Tìm kiếm nội suy (Interpolation Search) Tìm kiếm nội suy tìm kiếm phần tử cụ thể việc tính tốn vị trí dò (Probe Position) Ban đầu vị trí dò vị trí phần tử nằm tập liệu Nếu tìm thấy kết nối mục phần tử trả Để chia danh sách thành hai phần, sử dụng phương thức sau: mid = Lo + ((Hi - Lo) / (A[Hi] - A[Lo])) * (X - A[Lo]) = danh sách Lo danh sách = mục thấp danh sách Hi Trong đó: A = mục cao A[n] = giá trị lưu giữ mục n danh sách Nếu phần tử cần tìm có giá trị lớn phần tử phần tử cần tìm mảng bên phải phần tử lại tiếp tục tính vị trí dò; khơng phần tử cần tìm mảng bên trái phần tử Tiến trình tiến tụp diễn mảng kích cỡ mảng giảm Độ phức tạp thời gian chạy Interpolation Search Ο(log (log n)), Binary Search Ο(log n) Giải thuật Tìm kiếm nội suy Bởi cải tiến giải thuật Binary Search nên đề cập tới bước để tìm kiếm mục giá trị cần tìm sử dụng vị trí dò Bước : Bắt đầu tìm kiếm liệu từ phần danh sách Bước : Nếu so khớp (một kết nối), trả mục phần tử, Bước : Nếu khơng phải so khớp, vị trí dò Bước : Chia danh sách sử dụng phép tính tìm vị trí dò tìm vị trí Bước : Nếu liệu cần tìm lớn giá trị vị trí giữa, tìm kiếm mảng bên phải Bước : Nếu liệu cần tìm nhỏ giá trị vị trí giữa, tìm kiếm mảng bên trái Bước : Lặp lại tìm thấy so khớp http://vietjack.com/ Trang chia sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Code mẫu cho giải thuật Tìm kiếm nội suy A : Mảng N : Kích cỡ Interpolation_Search() While X khơng so khớp EXIT: Thất bại, không Lo + ((Hi - Lo) / (A[Hi] EXIT: Thành cơng, tìm Thiết lập Lo thành Mid+1 thành Mid-1 kết thúc hàm A X : Giá trị cần tìm hàm tìm kiếm nội suy Gán Lo : Gán Mid : -1 Gán Hi : N-1 if Lo Hi OR A[Lo] A[Hi] tìm thấy X kết thúc if Gán Mid = - A[Lo])) * (X - A[Lo]) if A[Mid] = X thấy Mid else if A[Mid] < X else if A[Mid] > X Thiết lập Hi thúc if kết thúc if Kết thúc While Kết Để tìm hiểu code đầy đủ giải thuật Tìm kiếm nội suy (Interpolation Search) ngơn ngữ C, mời bạn click chuột vào chương: Tìm kiếm nội suy C http://vietjack.com/ Trang chia sẻ các bài học online miễn phí ...http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va- giai- thuat/ index.jsp Copyright © vietjack.com Dò vị trí Tìm kiếm nội suy (Interpolation... http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va- giai- thuat/ index.jsp Copyright © vietjack.com Code mẫu cho giải thuật Tìm kiếm nội suy A : Mảng... While Kết Để tìm hiểu code đầy đủ giải thuật Tìm kiếm nội suy (Interpolation Search) ngơn ngữ C, mời bạn click chuột vào chương: Tìm kiếm nội suy C http://vietjack.com/