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

পাইথনে বাইনারি রিপ্রেজেন্টেশনে ১-এর সর্বোচ্চ কনsekutিভ রান খুঁজে বের করার প্রোগ্রাম

একটি নন-নেগেটিভ সংখ্যা n দেওয়া আছে। এর বাইনারি রিপ্রেজেন্টেশনে সবচেয়ে লম্বা কনsekutিভ 1-এর রানের দৈর্ঘ্য বের করতে হবে।

উদাহরণ: n = 1469 হলে বাইনারি 10110111101। এখানে সর্বোচ্চ ৪টি কনsekutিভ 1 আছে। আউটপুট: 4।

সমাধানের পদ্ধতি

বিট ম্যানিপুলেশন ট্রিক: n = n & (n << 1) অপারেশন প্রতিটি ইটারেশনে প্রতিটি 1-এর রানের দৈর্ঘ্য ১ করে কমিয়ে দেয়। এই অপারেশন কতবার করা যায় তাওই সর্বোচ্চ কনsekutিভ 1-এর দৈর্ঘ্য।

পাইথন কোড

def solve(n):
    count = 0
    while n != 0:
        n = n & (n << 1)  # প্রতিটি ১-রান ছোট করুন
        count += 1
    return count

# টেস্ট
n = 1469
print(solve(n))  # আউটপুট: 4

কিভাবে কাজ করে

n = 1469 = 10110111101 (বাইনারি)

  • ইটারেশন ১: n & (n << 1) = 1010011100 (রান দৈর্ঘ্য ১ কমে)
  • ইটারেশন ২: 1000011000
  • ইটারেশন ৩: 100000000
  • ইটারেশন ৪: 0 — শূন্য হয়ে গেলে লুপ বন্ধ

মোট ৪ ইটারেশন → সর্বোচ্চ রান দৈর্ঘ্য ৪।

সময় জটিলতা

O(k) যেখানে k = সর্বোচ্চ কনsekutিভ ১-এর দৈর্ঘ্য (সর্বোচ্চ ৬৪ বিটের জন্য ৬৪)। খুব দ্রুত।

  1. পাইথনে বাইনারি ট্রির লংগেস্ট কনsekutিভ পথের দৈর্ঘ্য বের করার প্রোগ্রাম

  2. পাইথনে বাইনারি ট্রির সর্বোচ্চ অল্টারনেটিং পথের দৈর্ঘ্য বের করার প্রোগ্রাম

  3. পাইথনে বাইনারি ট্রির রুট থেকে লিফ পর্যন্ত সবচেয়ে লম্বা পাথের যোগফল খুঁজে বের করার প্রোগ্রাম

  4. পাইথনে বাইনারি ট্রিতে জোড় মান সম্বলিত সর্বোচ্চ পথ খুঁজে বের করার প্রোগ্রাম