[toc:ul]
- Ý tưởng: chia đôi dần để tìm một số trong một dãy số
- Ví dụ: Tìm x = 44 trong dãy 8 phần tử đã sắp xếp thứ tự không giảm
a1 | a2 | a3 | a4 | a5 | a6 | a7 | a8 | |
Xuất phát | 6 | 12 | 18 | 42 | 44 | 55 | 67 | 94 |
Bước 1 | 42 | 44 | 55 | 67 | 94 | |||
Bước 2 | 44 | 55 | ||||||
Bươc 3 | 44 |
- Giải thích:
+ Chia đôi lần 1: Phạm vi tìm kiếm là dãy từ a1 đến a8. Lấy a4 là số có vị trí giữa dãy. Vì x > a4 nên nửa đầu dãy chắc chắn không chứa x = 44, tiếp theo chỉ cần tìm trong nửa sau của dãy. Như vậy, phạm vi tìm kiếm tiếp theo là dãy con từ a5 đến a8.
+ Chia đôi lần 2: Phạm vi tìm kiếm là dãy từ a5 đến a8. Lấy a6 là số có vị trí giữa dãy. Vì x < a6 nên nửa sau chắc chắn không chứa x = 44, tiếp theo chỉ cần tìm trong nửa đầu của dãy. Như vậy, phạm vi tìm kiếm tiếp theo là dãy con chỉ còn một số a5
=> Phạm vi tìm kiếm chỉ còn 1 số kết thúc thuật toán với kết quả: Tìm thấy x ở vị trí thứ 5
- Thuật toán tìm kiếm nhị phân là thuật toán tìm kiếm x trong dãy đã sắp thứ tự với ý tưởng chia đôi dần để giảm nhanh phạm vi tìm kiếm.
- Mô tả thuật toán:
- Chú ý: Thuật toán tìm kiếm nhị phân chỉ áp dụng được cho dãy đã sắp thứ tự
- Để giải một bài toán lớn, người ta tìm cách chia bài toán ban đầu ra thành các bài toán nhỏ hơn rồi giải những bài toán nhỏ hơn sẽ dễ hơn. Cách làm này gọi là “chia để trị”
- Thuật toán tìm kiếm nhị phân chia bài toán ban đầu thành hai bài toán con nhỏ hơn và chỉ phải tiếp tục giải một trong hai bài toán con đó. Áp dụng liên tiếp cách này cho đến khi nhận được kết quả.