Sponsor

পাইথনে বাইনারি সার্চ

0
5

একটা সর্টেড লিস্টে একটা আইটেম আছে কিনা, তা খুঁজে দেখার জন্য বাইনারি সার্চ ব্যবহার করা হয়। যদি থেকে থাকে, তাহলে ঐ আইটেমের ইনডেক্স রিটার্ণ করে। এর আগে আমরা লিনিয়ার সার্চ সম্পর্কে জেনেছি। বাইনারি সার্চ লিনিয়ার সার্চ থেকে দ্রুত কাজ করে।

যেমন 1, 3, 4, 5 , 7 , 9 , 12 এই লিস্টে 7 বা ধরে নেই x আছে কিনা, তা খুঁজে বের করব।

লিস্টের প্রথম ইনডেক্সকে lo এবং শেষ ইনডেক্সকে hi ধরে দুইটা পয়েন্টার সেট করি।

এরপর লিস্টের মধ্যের ইনডেক্স বের করি এভাবেঃ mid = lo + (hi – low) // 2।  এই ক্ষেত্রে mid = 0+ ( 6 – 0)//2 = 3। মানে উক্ত লিস্টে 3 হচ্ছে মধ্যের ইনডেক্স এবং 5 হচ্ছে এই ইনডেক্সে থাকা আইটেম।

এখন যদি এই mid ইনডেক্সে 7 পেয়ে যাই, তাহলে এই mid ভ্যালুটা রিটার্ণ করবে। মানে mid ইনডেক্সে 7 রয়েছে। যদি না হয়, তাহলে এই মিড পয়েন্টকে ধরে লিস্টকে দুই ভাগ করে নিতে হবে।

ভাগ করার ক্ষেত্রে x যদি মিড থেকে বড় হয় তাহলে লিস্টের ডান পাশের অংশে উপরের স্টেপ গুলো ফলো করবে। আর x যদি মিড থেকে ছোট হয়, তাহলে লিস্টের বাম পাশের অংশে উপরের স্টেপ ফলো করবে।

যদি x মধ্য ইনডেক্সে থাকা আইটেম থেকে ছোট হত, তাহলে hi পয়েন্টারের ভ্যালু পরিবর্তন করতে হত। সেই ক্ষেত্রে নতুন hi পয়েন্টারের ভ্যালু হবে mid -1।

আমাদের ক্ষেত্রে 7 হচ্ছে মধ্য ইনডেক্সে থাকা আইটেম 5 থেকে বড়। তাই সার্চ করবে লিস্টের ডান পাশের অংশে। এই ক্ষেত্রে নতুন lo পয়েন্টারের ভ্যালু হবে mid + 1।

নতুন lo এবং hi এর মাধ্যমে নতুন লিস্টে আবার মধ্য ইনডেক্স খুঁজে বের করবে। এই ক্ষেত্রে হচ্ছে 4 + (6-4)//2 = 5। এর মানে হচ্ছে নতুন mid ইনডেক্স হচ্ছে 5 এবং এর ভ্যালু হচ্ছে 9।

এরপর এই ধাপে আবারও দেখবে যে mid ইনডেক্সে থাকা ভ্যালুটি 7 কিনা। যেহেতু mid ইনডেক্সে থাকা সংখ্যাটি 7 নয়, তাই মিড ভ্যালুর সাথে তুলনা করে দেখবে 7 বড় না কি ছোট। এই ক্ষেত্রে দেখবে 7 হচ্ছে 9 থেকে ছোট। তাই এই mid ভ্যালুকে ধরে লিস্টের বামে অংশে সার্চ করবে।

এই ক্ষেত্রে নতুন hi ভ্যালু হবে mid – 1 = 5 – 1 = 4। অর্থাৎ নতুন hi ভ্যালু হচ্ছে লিস্টের 4 ইনডেক্স। এই  সময় এসে দেখবে lo এবং hi একই ইনডেক্সে পয়েন্ট করবে। যদি ঐ ইনডেক্সে 7 থাকে, তাহলে আমরা রিটার্ণ করব যে 7 পাওয়া গেছে। যদি না পাওয়া যায়, তাহলে প্রোগ্রাম জানাবে যে সংখ্যাটি লিস্টে পাওয়া যায় নি।

পুরো ধাপ গুলো একটা ইমেজেঃ

উপরের স্টেপ গুলো পাইথনে নিচের মত করে ইমপ্লিমেন্ট করতে পারিঃ

def b_s(lst, x):
    lo = 0
    hi = len(lst) -1
 
# repeat until lo & hi meet
    while lo <= hi:
       
        mid = lo + ( hi - lo ) // 2
        if lst[mid] == x:
            return mid
        elif x < lst[mid]:
            hi = mid - 1
        else:
            lo = mid + 1
    return -1
 
 
result = b_s([3, 4, 5, 6, 7, 8, 9], 7)
 
if result != -1:
    print("item is at index: " + str(result))
else:
    print("not found in the list")

উপরের প্রোগ্রামে b_s বা binary_search ফাংশনটি দুইটা প্যারামিটার ইনপুট নিবে। একটা হচ্ছে লিস্ট, আরেকটা হচ্ছে ঐ লিস্টে যে আইটেমটা খুঁজে বের করতে হবে, তা।
যেমন আমরা লিস্ট হিসেবে পাস করেছি [3, 4, 5, 6, 7, 8, 9] এবং যে আইটেম খুঁজে দেখব, তা হিসেবে পাস করেছি 7।

প্রোগ্রামটি রান করলে আউটপুট দিবেঃ

item is at index: 4

এখন 7 এর পরিবর্তে অন্য কোন সংখ্যা যদি পাস করি, যেটা লিস্টে নেই, যেমন 14, তাহলে প্রোগ্রামটি আউটপুট দিতঃ
not found in the list

Sponsor
Sponsor
Căutare
Categorii
Citeste mai mult
Tech
ChatGPT এর মতো AI চালিত Bing Search কী গুগলকে পরাজিত করতে পারে? | Techtunes | টেকটিউনস
এক ডেস্কটপেই ৬ ডেস্কটপের কাজ করুন 3D ডেস্কটপ এখন আপনার হাতের নাগালেই হাসান যোবায়ের
By Nettumi 2026-09-25 04:04:00 0 56
Hacking Course
এন্ড্রয়েডে বড় পরিবর্তন আনছে গুগল - Banglatech24.com
গুগল তাদের জনপ্রিয় অপারেটিং সিস্টেম এন্ড্রয়েড-এ আনতে যাচ্ছে একটি বড় পরিবর্তন। এটি কেবলমাত্র...
By Nettumi 2026-09-25 09:38:13 0 49
Nulled
ASUS ROG অবশেষে সরাসরি Desktop Memory Market এ পা রাখলো! 48GB Capacity, DDR5 6000 Speed আর মাথা নষ্ট করা CL26 Timings সমৃদ্ধ এই Memory Kit টি Hardware দুনিয়ায় এক সুনামি! | Techtunes | টেকটিউনস
অ্যাপল মানুষকে ফিরিয়ে নিচ্ছে হাত ঘড়ির যুগে… অসামান্য প্রাযুক্তিক উৎকর্ষতায়! একটি Apple...
By Nettumi 2026-09-21 05:26:40 0 55
Hacking Course
ভিপিএন চালাতে বললেন ইলন মাস্ক! কারণটা অভিনব! - Banglatech24.com
ইলন মাস্ক টেসলা, স্পেসএক্স, স্টারলিংক, এক্সএআই, আর এখন X (পূর্বের টুইটার)-এর মালিক। তার প্রতিটি...
By Nettumi 2026-09-25 09:37:48 0 43
Hacking Course
৫০ টাকা নগদ বোনাস নিন এই নতুন অফার থেকে - Banglatech24.com
নগদ দিচ্ছে ৫০টাকা বোনাস নেওয়ার সুযোগ। ব্যাংক টু নগদ ফিচার ব্যবহার করে নগদ একাউন্টে নির্দিষ্ট...
By Nettumi 2026-09-25 10:01:27 0 52
Sponsor
Sponsor
Advertisement
Ad starting...
‎ ‎ ‎
Nettumi https://nettumi.com