কম্পিউটার টিউটোরিয়াল

পাইথনে Bisect - অ্যারে বাইсекশন অ্যালগরিদম


একটি লং লিস্টে প্রতিটি ইনসারশনের পর সর্ট অপারেশন পারফর্ম করা প্রসেসরের টাইম কনসাম্পশনের দৃষ্টিতে ব্যয়বহুল হতে পারে। bisect মডিউল নিশ্চিত করে যে ইনসারশনের পর লিস্টটি অটোমেটিক্যালি সর্টেড থাকে। এই উদ্দেশ্যে এটি বাইсекশন অ্যালগরিদম ব্যবহার করে। মডিউলটির নিচের ফাংশনগুলো রয়েছে:

bisect_left()

এই মেথড একটি দেয়া এলিমেন্টের জন্য লিস্টে ইনসারশন পয়েন্ট লোকেট করে যাতে সর্টেড অর্ডার বজায় থাকে। যদি এটি ইতিমধ্যে লিস্টে উপস্থিত থাকে, ইনসারশন পয়েন্টটি বিদ্যমান এন্ট্রিগুলোর আগে (বাম পাশে) হবে। রিটার্ন ভ্যালু list.insert()-এর প্রথম প্যারামিটার হিসেবে ব্যবহার করা যেতে পারে।

bisect_right()

এই মেথড bisect_left()-এর সমান, কিন্তু একটি ইনসারশন পয়েন্ট রিটার্ন করে যা বিদ্যমান x-এর এন্ট্রিগুলোর পরে (ডান পাশে) আসে।

bisect.insort_left()

এই মেথড দেওয়া ভ্যালুটিকে a-তে সর্টেড অর্ডারে ইনসার্ট করে। এটি a.insert(bisect.bisect_left(a, x, lo, hi), x) সমতুল্য।

bisect.insort_right()

bisect.insort()

দুটি মেথডই insort_left()-এর সমান, কিন্তু একই ভ্যালুর যেকোনো বিদ্যমান এন্ট্রির পরে লিস্টে দেওয়া ভ্যালু ইনসার্ট করে।

উদাহরণ

>>> nums = [45,21,34,87,56,12,5,98,30,63]
>>> nums.sort()
>>> nums
[5, 12, 21, 30, 34, 45, 56, 63, 87, 98]
>>> import bisect
>>> p = bisect.bisect_left(nums, 50)
>>> p
6
>>> nums.insert(p, 50)
>>> nums
[5, 12, 21, 30, 34, 45, 50, 56, 63, 87, 98]
>>> bisect.insort(nums, 29)
>>> nums
[5, 12, 21, 29, 30, 34, 45, 50, 56, 63, 87, 98]

  1. পাইথনে Product of Array Except Self (নিজের বাদে সব উপাদানের গুণফল)

  2. পাইথনে অ্যারে পার্টিশন I

  3. পাইথনে অ্যারে রোটেট (Rotate Array)

  4. পাইথন অ্যারে বাইসেকশন অ্যালগরিদম