http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va-‐giai-‐thuat/index.jsp Copyright © vietjack.com Giải thuật tìm kiếm nhị phân (Binary Search) Giải thuật tìm kiếm nhị phân (Binary Search) ? Binany Search (Tìm kiếm nhị phân) giải thuật tìm kiếm nhanh với độ phức tạp thời gian chạy Ο(log n) Giải thuật tìm kiếm nhị phân làm việc dựa nguyên tắc chia để trị (Divide and Conquer) Để giải thuật làm việc cách xác tập liệu nên dạng xếp Binary Search tìm kiếm phần tử cụ thể cách so sánh phần tử vị trí tập liệu Nếu tìm thấy kết nối mục phần tử trả Nếu phần tử cần tìm lớn giá trị phần tử phần tử cần tìm tìm mảng nằm bên phải phần tử giữa; khơng tìm mảng nằm bên trái phần tử Tiến trình tiếp tục mảng tìm hết phần tử mảng Cách Binary Search làm việc Để Binary Search làm việc mảng phải cần xếp Để tiện cho việc theo dõi, cung cấp thêm hình minh họa tương ứng với bước Giả sử cần tìm vị trí giá trị 31 mảng bao gồm giá trị hình sử dụng Binary Search: Đầu tiên, chia mảng thành hai nửa theo phép toán sau: chỉ-mục-giữa = ban-đầu + (cuối + ban-đầu)/ Với ví dụ + (9 – 0)/ = (giá trị 4.5) Do mục mảng 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 Bây so sánh giá trị phần tử với phần tử cần tìm Giá trị phần tử 27 phần tử cần tìm 31, khơng kết nối Bởi giá trị cần tìm lớn nên phần tử cần tìm nằm mảng bên phải phần tử Chúng ta thay đổi giá trị ban-đầu thành chỉ-mục-giữa + lại tiếp tục tìm kiếm giá trị chỉmục-giữa ban-đầu = chỉ-mục-giữa + chỉ-mục-giữa = ban-đầu + (cuối + ban-đầu)/ Bây mục Chúng ta so sánh giá trị mục với giá trị cần tìm Giá trị mục khơng kết nối, ngồi giá trị cần tìm nhỏ giá trị mục cần tìm mảng bên trái mục Tiếp tục tìm chỉ-mục-giữa lần Lần có giá trị 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 So sánh giá trị mục với giá trị cần tìm thấy kết nối Do kết luận giá trị cần tìm 31 lưu giữ vị trí mục Binary Search chia đơi lượng phần tử cần tìm giảm số lượng phép so sánh cần thực nên giải thuật tìm kiếm thực nhanh Giải thuật mẫu cho Binary Search Dưới code mẫu cho giải thuật tìm kiếm nhị phân: Giải thuật tìm kiếm nhị phân (Binary Search) n ← kích cỡ mảng x ← giá trị để tìm kiếm mảng gán upperBound = n while x not found EXIT: x không tồn lowerBound ) / midPoint gán midPoint = lowerBound + ( upperBound gán lowerBound = if A[midPoint] > x if A[midPoint] = x kết thúc while gán lowerBound = if upperBound < lowerBound if A[midPoint] < x midPoint + midPoint - A ← mảng xếp gán upperBound = EXIT: x tìm thấy kết thúc giải thuật Để tìm hiểu triển khai code đầy đủ giải thuật tìm kiếm nhị phân ngơn ngữ C, mời bạn click chuột vào chương: Tìm kiếm nhị phân (Binary Search) 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... sẻ các bài học online miễn phí http://vietjack.com/cau-‐truc-‐du-‐lieu-‐va- giai- thuat/ index.jsp Copyright