Tìm kiếm là việc kiểm tra xem một đối tượng với một số thông tin cho trước (đối tượng cần tìm) có nằm trong một tập các đối tượng cho trước (không gian tìm kiếm) không. Việc tìm kiếm xảy ra thường xuyên trong lĩnh vực CNTT: Tìm kiếm với Google, tìm kiếm bài hát trên các trang âm nhạc, tìm kiếm file trong máy tính...Trong bài viết này, ICANTECH sẽ cùng bạn tìm hiểu một thuật toán tìm kiếm tối ưu nói chung, thuật toán tìm kiếm nhị phân nói riêng và cách áp dụng áp đối với trường hợp dữ liệu số đã sắp xếp.
Ví dụ:
Đầu vào :
Đầu ra:
2 (vị trí của số 6 trong dãy X)
“Thuật toán tìm kiếm nhị phân là gì?” là câu hỏi mà rất nhiều người quan tâm. Thuật toán tìm kiếm nhị phân (Binary Search) là một phương pháp hiệu quả để tìm kiếm một phần tử cụ thể trong một tập dữ liệu đã sắp xếp. Ý tưởng chính của thuật toán nhị phân là không phải kiểm tra từng phần tử một, mà là chia tập dữ liệu thành các phần nhỏ hơn và loại trừ một nửa của chúng sau mỗi bước.
Dưới đây là các bước cơ bản của thuật toán tìm kiếm nhị phân:
- Nếu phần tử giữa bằng giá trị cần tìm, thì tìm thấy và kết thúc tìm kiếm.
- Nếu phần tử giữa lớn hơn giá trị cần tìm, điều này có nghĩa rằng phần tử cần tìm nằm ở phía bên trái của phần tử giữa, vì tập dữ liệu đã sắp xếp. Do đó, thuật toán sẽ cập nhật phạm vi tìm kiếm cho phần bên trái của phần tử giữa và lặp lại quy trình trên phạm vi này.
- Nếu phần tử giữa nhỏ hơn giá trị cần tìm, tương tự, thuật toán sẽ cập nhật phạm vi tìm kiếm cho phần bên phải của phần tử giữa và tiếp tục tìm kiếm trên phạm vi này.
Thuật toán tìm kiếm nhị phân hiệu quả vì sau mỗi bước, nó loại trừ một nửa của phạm vi tìm kiếm, giảm đáng kể số lần so sánh cần thực hiện, và có độ phức tạp thời gian trung bình là O(log n), trong đó "n" là số phần tử trong tập dữ liệu.
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2 # Tính toán chỉ số giữa
if arr[mid] == target:
return mid # Tìm thấy giá trị, trả về chỉ số
elif arr[mid] < target:
left = mid + 1 # Cập nhật phạm vi tìm kiếm sang bên phải
else:
right = mid - 1 # Cập nhật phạm vi tìm kiếm sang bên trái
return -1 # Không tìm thấy giá trị, trả về -1
# Ví dụ sử dụng
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
target = 7
result = binary_search(arr, target)
if result != -1:
print(f"Giá trị {target} được tìm thấy tại vị trí {result}.")
else:
print(f"Giá trị {target} không tồn tại trong danh sách.")
Thuật toán tìm kiếm nhị phân là một công cụ quan trọng trong việc giải quyết các vấn đề tìm kiếm, và được ứng dụng rộng rãi trong lập trình.
Hi vọng rằng bài viết này của ICANTECH sẽ giúp bạn hiểu rõ cách hoạt động của thuật toán này và áp dụng vào các bài toán tương tự khác. Chúc các bạn thành công!
Nếu bạn đang quan đến học lập trình online thì hãy tham khảo ngay các khóa học lập trình tại ICANTECH nhé!
Nguồn ảnh: ICANTECH và Internet.