Thuật toán tìm kiếm nhị phân với EXAMPLE

⚡ Tóm tắt thông minh

Thuật toán tìm kiếm nhị phân tìm một phần tử trong một danh sách đã được sắp xếp bằng cách liên tục chia đôi phạm vi tìm kiếm và so sánh phần tử cần tìm với phần tử ở giữa. Còn được gọi là tìm kiếm nửa khoảng hoặc tìm kiếm logarit, nó nhanh hơn nhiều so với việc quét từng phần tử.

  • ???? Dữ liệu đã được sắp xếp: Thuật toán tìm kiếm nhị phân chỉ hoạt động trên danh sách các mục đã được sắp xếp.
  • Giảm một nửa: Mỗi bước so sánh mục tiêu với điểm giữa và loại bỏ một nửa phạm vi.
  • Lôgarit: Quá trình tìm kiếm diễn ra trong thời gian O(log n), nhanh hơn nhiều so với tìm kiếm tuyến tính.
  • 🎯 Mục lục giữa: Điểm giữa được tìm thấy bằng phần nguyên của (trái + phải) chia cho hai.
  • 🔁 Lặp lại: Quá trình này lặp lại cho đến khi tìm thấy phần tử hoặc phạm vi trống.

Thuật toán tìm kiếm nhị phân kèm ví dụ

Trước khi tìm hiểu về tìm kiếm nhị phân, chúng ta hãy cùng tìm hiểu tìm kiếm là gì.

Tìm kiếm là gì?

Tìm kiếm là một tiện ích cho phép người dùng tìm tài liệu, tệp, phương tiện hoặc bất kỳ loại dữ liệu nào khác được lưu giữ trong cơ sở dữ liệu. Tìm kiếm hoạt động theo nguyên tắc đơn giản là khớp tiêu chí với bản ghi và hiển thị nó cho người dùng. Bằng cách này, chức năng tìm kiếm cơ bản nhất sẽ hoạt động.

Tìm kiếm nhị phân là gì?

Tìm kiếm nhị phân là một loại thuật toán tìm kiếm nâng cao, tìm và truy xuất dữ liệu từ một danh sách các mục đã được sắp xếp. Nguyên tắc hoạt động cốt lõi của nó là chia dữ liệu trong danh sách thành hai phần bằng nhau cho đến khi tìm thấy giá trị cần thiết và hiển thị cho người dùng trong kết quả tìm kiếm. Tìm kiếm nhị phân thường được biết đến như một thuật toán tìm kiếm nhị phân. tìm kiếm nửa khoảng thời gian hoặc một tìm kiếm logarit.

Tìm kiếm nhị phân hoạt động như thế nào?

Tìm kiếm nhị phân hoạt động theo cách sau:

  • Quá trình tìm kiếm bắt đầu bằng việc xác định phần tử ở giữa của mảng dữ liệu đã được sắp xếp.
  • Sau đó, giá trị khóa được so sánh với phần tử.
  • Nếu giá trị khóa nhỏ hơn phần tử ở giữa, thì thuật toán tìm kiếm sẽ phân tích các giá trị lớn hơn phần tử ở giữa để so sánh và đối khớp.
  • Trong trường hợp giá trị khóa lớn hơn phần tử ở giữa, thì quá trình tìm kiếm sẽ phân tích các giá trị nhỏ hơn phần tử ở giữa để so sánh và đối khớp.

Thuật toán tìm kiếm nhị phân (Mã giả)

Thuật toán tìm kiếm nhị phân có thể được viết dưới dạng một quy trình lặp ngắn. Nó giữ hai con trỏ, thấp và cao, và thu hẹp phạm vi cho đến khi tìm thấy mục tiêu hoặc phạm vi trở nên trống.

binarySearch(array, target)
    low = 0
    high = length(array) - 1
    while low <= high
        mid = (low + high) / 2      // floor value
        if array[mid] == target
            return mid
        else if array[mid] < target
            low = mid + 1
        else
            high = mid - 1
    return -1              // target not found

Thủ tục này trả về chỉ số của mục tiêu khi thành công và -1 khi giá trị không tồn tại. Vì phạm vi giảm đi một nửa sau mỗi lần lặp, vòng lặp chạy tối đa log₂(n) lần.

Ví dụ tìm kiếm nhị phân

Hãy xem ví dụ về một từ điển. Nếu bạn cần tìm một từ nào đó, không ai duyệt qua từng từ theo trình tự mà sẽ ngẫu nhiên tìm những từ gần nhất để tìm từ cần tìm.

Ví dụ tìm kiếm nhị phân

Hình ảnh trên minh họa những điều sau:

  1. Bạn có một mảng gồm 10 chữ số và cần tìm phần tử 59.
  2. Tất cả các phần tử được đánh số từ 0 đến 9. Bây giờ, vị trí giữa của mảng được tính toán. Để làm điều đó, bạn lấy giá trị đầu tiên bên trái và bên phải của chỉ số rồi chia cho 2. Kết quả là 4.5, nhưng chúng ta lấy giá trị làm tròn xuống. Do đó, vị trí giữa là 4.
  3. Thuật toán loại bỏ tất cả các phần tử từ giữa (4) đến giới hạn thấp nhất, vì 59 lớn hơn 24, và bây giờ mảng chỉ còn lại 5 phần tử.
  4. Bây giờ, 59 lớn hơn 45 và nhỏ hơn 63. Số ở giữa là 7. Do đó, giá trị chỉ số bên phải trở thành số ở giữa trừ đi 1, bằng 6, và giá trị chỉ số bên trái vẫn giữ nguyên như trước, là 5.
  5. Tại thời điểm này, bạn biết rằng 59 đứng sau 45. Do đó, chỉ số bên trái là 5 cũng trở thành trung bình.
  6. Các lần lặp này tiếp tục cho đến khi mảng được giảm xuống chỉ còn một phần tử hoặc mục được tìm thấy trở thành phần giữa của mảng.

Ví dụ 2

Hãy xem ví dụ sau để hiểu cách hoạt động của thuật toán tìm kiếm nhị phân.

Ví dụ tìm kiếm nhị phân

  1. Bạn có một mảng các giá trị được sắp xếp từ 2 đến 20 và cần xác định vị trí 18.
  2. Trung bình cộng của giới hạn dưới và giới hạn trên là (l + r) / 2 = 4. Giá trị cần tìm lớn hơn giá trị trung bình, tức là 4.
  3. Các giá trị trong mảng nhỏ hơn giá trị trung bình sẽ bị loại bỏ khỏi quá trình tìm kiếm, và các giá trị lớn hơn giá trị trung bình là 4 sẽ được tìm kiếm.
  4. Đây là quá trình phân chia lặp đi lặp lại cho đến khi tìm thấy mục thực sự cần tìm.

Tại sao chúng ta cần tìm kiếm nhị phân?

Những lý do sau đây khiến tìm kiếm nhị phân trở thành lựa chọn tốt hơn để sử dụng làm thuật toán tìm kiếm:

  • Thuật toán tìm kiếm nhị phân hoạt động hiệu quả trên dữ liệu đã được sắp xếp, bất kể kích thước của dữ liệu.
  • Thay vì thực hiện tìm kiếm bằng cách duyệt qua dữ liệu theo trình tự, thuật toán nhị phân truy cập ngẫu nhiên dữ liệu để tìm phần tử cần thiết. Điều này làm cho chu kỳ tìm kiếm ngắn hơn và chính xác hơn.
  • Tìm kiếm nhị phân thực hiện so sánh dữ liệu đã được sắp xếp dựa trên nguyên tắc thứ tự thay vì sử dụng phép so sánh bằng nhau, vốn chậm hơn và hầu hết không chính xác.
  • Sau mỗi chu kỳ tìm kiếm, thuật toán sẽ chia kích thước của mảng thành hai phần bằng nhau; do đó, trong lần lặp tiếp theo, nó sẽ chỉ hoạt động trên phần mảng còn lại.

Hãy cùng tìm hiểu bài hướng dẫn tiếp theo của chúng tôi về... Tìm kiếm tuyến tính: Python, C++ Ví dụ.

Tìm kiếm nhị phân so với tìm kiếm tuyến tính

Tìm kiếm nhị phân và tìm kiếm tuyến tính là hai phương pháp phổ biến nhất để tìm một giá trị trong một tập hợp. Bảng dưới đây nêu bật sự khác biệt giữa chúng:

Yếu tố Tìm kiếm nhị phân Tìm kiếm tuyến tính
Yêu cầu dữ liệu Yêu cầu dữ liệu đã được sắp xếp Hoạt động trên dữ liệu đã được sắp xếp hoặc chưa được sắp xếp.
Phương pháp Giảm một nửa phạm vi tìm kiếm sau mỗi bước. Kiểm tra từng phần tử theo trình tự.
Thời gian phức tạp O (log n) O (n)
Tốt nhất cho Các tập dữ liệu lớn, được sắp xếp Các tập dữ liệu nhỏ hoặc chưa được sắp xếp

Tóm lại, tìm kiếm nhị phân nhanh hơn nhiều trên các tập dữ liệu lớn đã được sắp xếp, trong khi tìm kiếm tuyến tính đơn giản hơn và là lựa chọn duy nhất khi dữ liệu chưa được sắp xếp.

Câu Hỏi Thường Gặp

Tìm kiếm nhị phân hỗ trợ tra cứu nhanh trong các cấu trúc được sắp xếp đằng sau các hệ thống AI, chẳng hạn như tìm ngưỡng, điều chỉnh siêu tham số trên một phạm vi hoặc định vị một giá trị trong chỉ mục được sắp xếp của các embedding. Tốc độ O(log n) của nó giúp các tra cứu này hoạt động hiệu quả.

Đúng vậy. Trợ lý AI có thể viết thuật toán tìm kiếm nhị phân lặp hoặc đệ quy. Python, Java, hoặc là C++ Từ một mô tả đơn giản. Hãy chú ý đến các lỗi kinh điển như sai lệch một đơn vị và tràn số khi tính toán chỉ số ở giữa, và kiểm tra với các trường hợp ngoại lệ.

Tìm kiếm nhị phân chạy trong thời gian O(log n) vì nó giảm một nửa phạm vi tìm kiếm với mỗi lần so sánh. Độ phức tạp không gian của nó là O(1) đối với phiên bản lặp và O(log n) đối với phiên bản đệ quy do ngăn xếp cuộc gọi.

Không. Tìm kiếm nhị phân dựa vào việc dữ liệu đã được sắp xếp để có thể quyết định loại bỏ một nửa nào. Với dữ liệu chưa được sắp xếp, bạn phải sắp xếp nó trước hoặc sử dụng tìm kiếm tuyến tính, phương pháp này kiểm tra từng phần tử theo trình tự.

Tóm tắt bài viết này với: