সমস্যা বিবরণ
একটি ইতিমধ্যে সর্ট করা লিস্টে নতুন একটি এলিমেন্ট ইনসার্ট করতে হবে যেন লিস্টটি সর্টেড অর্ডারে থাকে। পাইথনের বিল্ট-ইন bisect মডিউল এই কাজটি দক্ষতার সাথে করে।
বিসেক্ট মডিউল
bisect.insort(list, element) ফাংশনটি এলিমেন্টটিকে সঠিক পজিশনে ইনসার্ট করে যাতে লিস্ট সর্টেড থাকে। এটি বাইনারি সার্চ ব্যবহার করে O(log n) সময়ে ইনসার্ট পজিশন খুঁজে বের করে।
উদাহরণ
import bisect
# সর্টেড লিস্ট
numbers = [10, 23, 27, 32]
element = 25
# ইনসার্ট করুন
bisect.insort(numbers, element)
print(numbers) # আউটপুট: [10, 23, 25, 27, 32]
অন্যান্য উপযোগী ফাংশন
bisect.bisect_left(list, x)— x ইনসার্ট করার বাম পজিশন রিটার্ন করেbisect.bisect_right(list, x)— x ইনসার্ট করার ডান পজিশন রিটার্ন করেbisect.insort_left(list, x)— বাম পজিশনে ইনসার্ট (ডুপ্লিকেট হলে বামে)bisect.insort_right(list, x)— ডান পজিশনে ইনসার্ট (ডিফল্ট)
ম্যানুয়াল বনাম বিসেক্ট
ম্যানুয়ালি লুপ চালিয়ে পজিশন খুঁজলে O(n) সময় লাগে। bisect বাইনারি সার্চ দিয়ে O(log n) এ পজিশন খুঁজে দেয়, তবে লিস্টে ইন্সার্টশনের জন্য এলিমেন্ট শিফট করার কারণেই ওভারঅল O(n)। বড় লিস্টে অনেক দক্ষ।
উপসংহার
bisect.insort ব্যবহার করে সর্টেড লিস্ট মেইনটেইন করা সহজ ও দক্ষ। কাস্টম কমপারিজন কী দরকার হলে bisect.insort_left বা bisect.insort_right ব্যবহার করুন।