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

Python-এ নির্দিষ্ট যোগফল (Sum) দেওয়া সাবসেটগুলো খুঁজে বের করা

Python-এ একটি লিস্ট থেকে নির্দিষ্ট যোগফল (s) 가진 সকল সাবসেট খুঁজে বের করতে itertools.combinations ব্যবহার করা হয়। এটি সমস্ত সম্ভাব্য কবিনেশন তৈরি করে এবং যোগফল মিলিয়ে ফিল্টার করে।

উদাহরণ কোড

from itertools import combinations

def sub_set_sum(size, my_array, target_sum):
    for i in range(size + 1):
        for my_sub_set in combinations(my_array, i):
            if sum(my_sub_set) == target_sum:
                print(list(my_sub_set))

my_size = 6
my_list = [21, 32, 56, 78, 45, 99, 0]
print("The list is:")
print(my_list)

subset_sum = 53
print("The result is:")
sub_set_sum(my_size, my_list, subset_sum)

আউটপুট

The list is: [21, 32, 56, 78, 45, 99, 0]
The result is:
[21, 32]
[21, 32, 0]

ব্যাখ্যা

  • combinations(my_array, i) — i দৈর্ঘ্যের সকল কবিনেশন তৈরি করে।
  • লুপ range(size + 1) — ০ থেকে size দৈর্ঘ্যের সব কবিনেশন চেক করে।
  • sum(my_sub_set) == target_sum — যোগফল মিললে প্রিন্ট করে।
  • উদাহরণে 0 থাকায় [21, 32] এবং [21, 32, 0] দুটোই যোগফল ৫৩ দেয়।

নোট

বড় লিস্টের জন্য এই পদ্ধতি ধীর হতে পারে (exponential complexity)। সেক্ষেত্রে ডাইনামিক প্রোগ্রামিং বা ব্যাকট্র্যাকিং ব্যবহার করা ভালো।

  1. লিস্টের কিউমুলেটিভ সাম বের করার পাইথন প্রোগ্রাম

  2. পাইথনে লিস্টের এলিমেন্টগুলোর যোগফল বের করা

  3. পাইথনে লিস্টের সব পেয়ারের অ্যাবসোলিউট ডিফারেন্সের যোগফল

  4. পাইথনে একটি লিস্টের সব সাবলিস্ট প্রিন্ট করার প্রোগ্রাম