এই আর্টিকেলে আমরা নিচের সমস্যা সমাধানের কথা শিখব।
সমস্যা: একটি অ্যারেতে নন-নেগেটিভ ইন্টিজারগুলোর একটি সেট এবং একটি ভ্যালু sum দেওয়া আছে, আমাদের নির্ধারণ করতে হবে যে দেয়া সেটের कोई সাবসেট আছে কিনা যার যোগফল দেওয়া sum-এর সমান।
চলুন নিচের ইমপ্লিমেন্টেশনে সমাধানটি পর্যবেক্ষণ করি।
# নেইভ পদ্ধতি
উদাহরণ
def SubsetSum(set, n, sum) :
# বেস কেস
if (sum == 0) :
return True
if (n == 0 and sum != 0) :
return False
# লাস্ট এলিমেন্ট sum থেকে বড় হলে উপেক্ষা
if (set[n - 1] > sum) :
return SubsetSum(set, n - 1, sum)
# অন্যথায়, যোগফল চেক করুন
# (১) লাস্ট এলিমেন্ট অন্তর্ভুক্ত করে
# (২) লাস্ট এলিমেন্ট বাদ দিয়ে
return SubsetSum(set, n-1, sum) or SubsetSum(set, n-1, sum - set[n-1])
# মেইন
set = [2, 14, 6, 22, 4, 8]
sum = 10
n = len(set)
if (SubsetSum(set, n, sum) == True) :
print("Found a subset with given sum")
else :
print("No subset with given sum")
আউটপুট
Found a subset with given sum
# ডাইনামিক পদ্ধতি
উদাহরণ
# একটি ব্যক্তি দ্বারা করা যাব সর্বোচ্চ এক্টিভিটির সংখ্যা
def Activities(s, f):
n = len(f)
print("The selected activities are:")
# প্রথম এক্টিভিটি সবসময় সিলেক্টেড
i = 0
print(i, end=" ")
# বাকি এক্টিভিটিগুলোর জন্য
for j in range(n):
# যদি স্টার্ট টাইম আগের এক্টিভিটির ফিনিশ টাইম থেকে বড় বা সমান হয়
if s[j] >= f[i]:
print(j, end=" ")
i = j
# মেইন
s = [1, 2, 0, 3, 2, 4]
f = [2, 5, 4, 6, 8, 8]
Activities(s, f)
আউটপুট
Found a subset with given sum
উপসংহার
এই আর্টিকেলে আমরা শিখেছি কিভাবে সাবসেট সাম সমস্যার পাইথন প্রোগ্রাম লিখতে হয়।