Chương trình lấy một danh sách và khóa làm đầu vào và tìm chỉ mục của khóa trong danh sách bằng tìm kiếm nhị phân
Giải pháp vấn đề
1. Tạo một hàm binary_search lấy một danh sách và các biến bắt đầu, kết thúc và khóa làm đối số. Hàm tìm kiếm khóa trong phạm vi [bắt đầu… kết thúc – 1].
2. Trường hợp cơ sở bao gồm kiểm tra xem bắt đầu có nhỏ hơn kết thúc hay không. Nếu không, -1 được trả về.
3. mid được tính là sàn của mức trung bình của đầu và cuối.
4. Nếu phần tử tại chỉ số mid nhỏ hơn key, thì binary_search được gọi lại với start=mid + 1 và nếu nó lớn hơn key, nó được gọi với end=mid. Mặt khác, mid được trả về dưới dạng chỉ mục của phần tử được tìm thấy.
Chương trình/Mã nguồn
Đây là mã nguồn của chương trình Python để triển khai tìm kiếm nhị phân bằng đệ quy. Đầu ra chương trình được hiển thị dưới đây
Đệ quy có nghĩa là giải quyết vấn đề bằng cách chia một vấn đề phức tạp thành các vấn đề nhỏ hơn và sau đó giải quyết nó từng bước. Trong bài viết này, tôi sẽ hướng dẫn bạn cách triển khai tìm kiếm nhị phân đệ quy bằng Python, nghĩa là triển khai thuật toán tìm kiếm nhị phân bằng phương pháp đệ quy
Tìm kiếm nhị phân đệ quy
Tìm kiếm nhị phân có nghĩa là tìm một mục trong một mảng đã sắp xếp bằng cách chia khoảng thời gian tìm kiếm thành hai nửa liên tục và tìm kiếm nhị phân đệ quy có nghĩa là chia nhỏ toàn bộ quá trình tìm kiếm nhị phân thành các vấn đề nhỏ hơn. Nói một cách đơn giản, giải pháp đệ quy cho tìm kiếm nhị phân được gọi là tìm kiếm nhị phân đệ quy
Dưới đây là các thuộc tính mà tất cả các giải pháp đệ quy phải đáp ứng
- Một giải pháp đệ quy phải có trường hợp cơ sở
- Một giải pháp đệ quy phải có trường hợp đệ quy
- Một giải pháp đệ quy phải đạt được tiến bộ đối với trường hợp cơ sở
Trường hợp cơ sở là trường hợp cuối cùng đại diện cho phân mục nhỏ nhất của một vấn đề phức tạp. Như vậy theo tính chất đệ quy ở trên, để thực hiện tìm kiếm nhị phân đệ quy, thuật toán của chúng ta phải có trường hợp cơ sở và trường hợp đệ quy và trường hợp đệ quy phải tiến tới trường hợp cơ sở nếu không thuật toán sẽ không bao giờ dừng và sẽ dẫn đến một vòng lặp vô hạn
Tìm kiếm nhị phân đệ quy bằng Python
Thuật toán tìm kiếm nhị phân cải thiện thời gian tìm kiếm cần thiết để định vị một phần tử trong một mảng được sắp xếp. Thông thường, một cách tiếp cận lặp đi lặp lại được áp dụng để triển khai thuật toán tìm kiếm nhị phân, nhưng chúng ta cũng có thể triển khai nó theo cách đệ quy bằng cách triển khai nó trong các phiên bản nhỏ hơn
Để thực hiện thuật toán tìm kiếm nhị phân đệ quy, trước tiên chúng ta phải tìm mục tiêu theo thứ tự đã sắp xếp, giá trị ở giữa được kiểm tra để xác định xem đó có phải là mục tiêu không. Nếu giá trị ở giữa không phải là mục tiêu, thì chuỗi được chia làm đôi, sau đó nửa đầu hoặc nửa sau được kiểm tra để tìm giá trị đích bằng cách xem phần tử ở giữa. Đây là cách triển khai tìm kiếm nhị phân đệ quy bằng Python
Xem ý chính này trên GitHub
Bản tóm tắt
Đệ quy là một công cụ rất mạnh để lập trình và giải quyết vấn đề. Nó có thể được sử dụng để giải và thực hiện một loạt các thuật toán để giải các bài toán lặp cơ bản đến các bài toán quay lui nâng cao. Trong bài viết này, chúng tôi đã khám phá cách triển khai thuật toán tìm kiếm nhị phân đệ quy bằng ngôn ngữ lập trình Python
Tôi hy vọng bạn thích bài viết này về cách triển khai tìm kiếm nhị phân đệ quy bằng Python. Vui lòng đặt câu hỏi có giá trị của bạn trong phần bình luận bên dưới
Trong Tìm kiếm nhị phân, chúng tôi chia một tập hợp các phần tử thành hai nửa để giảm bớt sự so sánh khi tìm một phần tử. Nhưng có một điều kiện, tôi. e. , các phần tử trong mảng bắt buộc phải được sắp xếp trước. Bài viết này sẽ giải thích khái niệm về Tìm kiếm nhị phân cùng với việc triển khai Python Tìm kiếm nhị phân. Sẽ có các ví dụ cùng với các đoạn mã Python và kết quả đầu ra để hiểu rõ hơnMục lục
Thuật toán tìm kiếm nhị phân
Thuật toán tìm kiếm nhị phân tìm chỉ mục của một phần tử cụ thể trong danh sách. Đây là một trong những thuật toán nhanh nhất và phổ biến nhất. Các phần tử trong danh sách phải được sắp xếp để Thuật toán tìm kiếm nhị phân hoạt động
So với tìm kiếm tuyến tính, tìm kiếm nhị phân là thuật toán tìm kiếm hiệu quả hơn trong việc tìm kiếm chỉ mục của phần tử vì chúng ta không cần tìm kiếm từng chỉ mục của danh sách
Chúng tôi có thể tóm tắt hoạt động hoàn chỉnh của Thuật toán tìm kiếm nhị phân trong các bước sau
- Trong mảng đã sắp xếp, tìm phần tử ở giữa
- So sánh x với phần tử ở giữa
- Nếu x bằng phần tử ở giữa, thì chỉ số ở giữa được trả về. Nếu không, x sẽ được so sánh với mục ở giữa
- Ngược lại, nếu x lớn hơn mục ở giữa, thì nó sẽ được so sánh với các phần tử bên phải của chỉ mục
- Ngược lại, nếu x nhỏ hơn phần tử ở giữa, thì x sẽ chỉ được so sánh với các phần tử bên trái của chỉ mục
- Chúng tôi sẽ chọn một trong hai thuật toán để chạy cho nửa bên phải của danh sách hoặc nửa bên trái của danh sách các mục
Tìm kiếm nhị phân là một thuật toán hiệu quả. Nó có hai phương pháp để tìm vị trí của các phần tử. Hãy thảo luận điều này với sự trợ giúp của các ví dụ
1. Phương pháp đệ quy
Phương pháp đệ quy tuân theo cách tiếp cận chia để trị. Trong Tìm kiếm nhị phân đệ quy, một hàm gọi chính nó lặp đi lặp lại cho đến khi tìm thấy một phần tử trong danh sách
Thí dụ
def binary_search[array, low, high, x]:
if high >= low:
mid = [high + low] // 2
if array[mid] == x:
return mid
elif array[mid] > x:
return binary_search[array, low, mid - 1, x]
else:
return binary_search[array, mid + 1, high, x]
else:
return -1
array = [ 2, 4, 6, 8, 20, 40, 60, 80]
x = 20
result = binary_search[array, 0, len[array]-1, x]
if result != -1:
print["The index of the Element is", str[result]]
else:
print["This element is not present in your Array."]
đầu ra
2. Phương pháp lặp
Chúng tôi sử dụng Vòng lặp While trong phương thức Lặp lại để tìm vị trí chỉ mục của một phần tử. Một tập hợp các câu lệnh sẽ được lặp lại nhiều lần trong quá trình triển khai Lặp lại
Thí dụ
def binary_search[array, x]:
low = 0
high = len[array] - 1
mid = 0
while low x:
high = mid - 1
else:
return mid
return -1
array = [ 2, 4, 6, 8, 20, 40, 60, 80 ]
x = 20
result = binary_search[array, x]
if result != -1:
print["The index of the element is", str[result]]
else:
print["We do not have this element in the Array."]
đầu ra
phức tạp
Trong các khái niệm về Tìm kiếm nhị phân, chúng tôi có hai loại Độ phức tạp tìm kiếm nhị phân
- Ô[1]. Nó được gọi là độ phức tạp trường hợp tốt nhất khi so sánh đầu tiên bằng với mục đó mà chúng tôi đang tìm kiếm
- O[logn]. Nó được gọi là độ phức tạp trung bình và trường hợp xấu nhất vì phải mất khá nhiều thời gian với thời gian logarit để tìm kiếm mục thông qua danh sách
Sự kết luận
Chúng ta đã thảo luận ở trên, Tìm kiếm nhị phân là một kỹ thuật hiệu quả để tìm chỉ mục của một phần tử trong danh sách hoặc mảng. Có các ví dụ để phân biệt Tìm kiếm nhị phân đệ quy và Tìm kiếm nhị phân lặp lại. Tôi hy vọng nó đã giúp bạn hiểu đúng