রিকার্শন ছাড়া বাইনারি সার্চ ইমপ্লিমেন্ট করতে একটি মেথড সংজ্ঞায়িত করা হয় যা লিস্টের ফার্স্ট এবং লাস্ট ইনডেক্স চেক করে, এবং লিস্টের মাঝখানের ভ্যালু বের করে।
তারপর এটি চেক করার ভ্যালুটির সাথে কম্পেয়ার করা হয়। যদি পাওয়া যায়, তবে ভ্যালুটি রিটার্ন করা হয়। অন্যথায়, -1 রিটার্ন করা হয়।
মনে রাখা গুরুত্বপূর্ণ যে বাইনারি সার্চ শুধু সর্টেড এলিমেন্টের ওপর কাজ করে, আর্ডার আর্ডার বা ডিসেন্ডিং আর্ডার।
একটি লিস্ট হেটেরোজিনাস ভ্যালু সংরক্ষণ করতে ব্যবহার করা যায়।
নিচে ডেমোстран্স্ট্রেশন দেওয়া হলো:
উদাহরণ
def binary_search(my_list, elem):
low = 0
high = len(my_list) - 1
mid = 0
while low <= high:
mid = (high + low) // 2
if my_list[mid] < elem:
low = mid + 1
elif my_list[mid] > elem:
high = mid - 1
else:
return mid
return -1
my_list = [1, 9, 11, 21, 34, 54, 67, 90]
elem_to_search = 1
print("The list is")
print(my_list)
my_result = binary_search(my_list, elem_to_search)
if my_result != -1:
print("Element found at index ", str(my_result))
else:
print("Element not found!")
আউটপুট
The list is [1, 9, 11, 21, 34, 54, 67, 90] Element found at index 0
ব্যাখ্যা
- 'binary_search' নামে একটি মেথড সংজ্ঞায়িত করা হয়েছে যা লিস্ট এবং সার্চ করার এলিমেন্টকে প্যারামিটার হিসেবে নেয়।
- একটি 'low' ভেরিয়েবল ০-এ এবং 'mid' ভেরিয়েবল ০-এ অ্যাসাইন করা হয়েছে।
- 'high' ভেরিয়েবলে লিস্টের দৈর্ঘ্য-১ অ্যাসাইন করা হয়েছে।
- বিটওয়াইজ ফ্লোর ডিভিশন ব্যবহার করে 'mid' ভেরিয়েবলের ভ্যালু বের করা হয়েছে, শুধু যদি 'low' ভ্যালু 'high'-এর চেয়ে কম বা সমান হয়।
- প্রথমে এলিমেন্টটি 'low' থেকে 'mid' ইনডেক্স পর্যন্ত সার্চ করা হয়, যদি ভ্যালু 'mid' ইনডেক্সের ভ্যালুর চেয়ে কম হয়।
- অন্যথায়, এলিমেন্টটি 'mid' থেকে 'high' ইনডেক্স পর্যন্ত সার্চ করা হয়, যদি ভ্যালু 'mid'-এর চেয়ে বড় এবং 'high'-এর চেয়ে কম হয়।
- এখন, একটি লিস্ট সংজ্ঞায়িত করা হয়েছে।
- মেথডটি উপরের লিস্ট পাস করে কল করা হয়েছে।
- এই অপারেশনের ডেটা একটি ভেরিয়েবলে সংরক্ষিত হয়েছে।
- এই ভেরিয়েবলটি আউটপুট হিসেবে কনসোলে ডিসপ্লে করা হয়েছে।