Tìm kiếm nhị phân là một cách nhanh để tìm một giá trị mục tiêu trong danh sách đã sắp xếp. Bạn kiểm tra phần tử ở giữa, loại bỏ một nửa các giá trị còn lại, rồi lặp lại. Nếu danh sách chưa được sắp xếp, logic đó không còn đúng.
Với danh sách tăng dần, quy tắc rất đơn giản: nếu giá trị ở giữa nhỏ hơn mục tiêu thì tìm sang phải; nếu lớn hơn thì tìm sang trái. Vì phạm vi liên tục thu hẹp khoảng một nửa, tìm kiếm nhị phân chạy trong thời gian .
Cách tìm kiếm nhị phân hoạt động trên danh sách đã sắp xếp
Dùng danh sách đã sắp xếp sau:
Giả sử giá trị cần tìm là .
Bắt đầu với toàn bộ phạm vi. Giá trị ở giữa là . Vì , mọi phần tử bên trái của đều có thể bị loại bỏ, nên việc tìm kiếm tiếp tục trong
Bây giờ giá trị ở giữa là . Vì , mọi phần tử bên phải của đều có thể bị loại bỏ, nên phạm vi trở thành
Lúc này giá trị ở giữa là , nên việc tìm kiếm dừng lại. Ý tưởng quan trọng không chỉ là đã tìm thấy mục tiêu. Chỉ trong hai lần so sánh, phạm vi ứng viên đã giảm từ giá trị xuống còn .
Vì sao tìm kiếm nhị phân là
Mỗi lần so sánh loại bỏ khoảng một nửa số ứng viên còn lại. Sau một bước, còn khoảng phần tử. Sau hai bước, còn khoảng phần tử. Sau bước, kích thước còn lại xấp xỉ
Việc tìm kiếm kết thúc khi lượng đó xấp xỉ , nên số bước thỏa mãn
Lấy hai vế, ta được
Đó là lý do tìm kiếm nhị phân mở rộng rất tốt khi dữ liệu lớn lên. Tìm kiếm tuyến tính có thể cần tới lần kiểm tra, nhưng tìm kiếm nhị phân chỉ cần đủ số lần kiểm tra để liên tục chia đôi phạm vi.
Ví dụ mã tìm kiếm nhị phân
Đây là một phiên bản lặp tiêu chuẩn trong Python:
Cần trợ giúp giải bài?
Tải câu hỏi lên và nhận lời giải từng bước đã được xác minh trong vài giây.
Mở GPAI Solver →