কম্পিউটার

পাইথনে পুনরাবৃত্ত পূর্ণসংখ্যা বিতরণ করার জন্য প্রোগ্রাম


ধরুন আমাদের একটি অ্যারের সংখ্যা আছে, সেখানে সর্বাধিক 50টি অনন্য মান রয়েছে। আমাদের কাছে কোয়ান্টিটি নামে আরেকটি অ্যারে আছে, যেখানে quantity[i] গ্রাহকের অর্ডারকৃত মানের পরিমাণকে নির্দেশ করে। আমাদের পরীক্ষা করতে হবে যে এইরকম সংখ্যা বিতরণ করা সম্ভব কিনা

  • ith গ্রাহক সঠিক পরিমাণে [i] আইটেম পায়,

  • ith গ্রাহক যে মান পায় তা সবই সমান, এবং

  • সমস্ত গ্রাহকরা সন্তুষ্ট৷

সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[5,1,2,2,3,4,4,3,3] পরিমাণ =[2,2,3], তাহলে আউটপুটটি সত্য হবে কারণ দুই গ্রাহক দুটি উপাদান চায়। প্রতিটি, যাতে তারা [2,2] এবং [4,4] পেতে পারে, এবং তৃতীয়টি তিনটি আইটেম চায়, তারা [3,3,3] পেতে পারে, তাই সবাই সন্তুষ্ট৷

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন util() সংজ্ঞায়িত করুন। এটি i, cntr

    লাগবে
  • যদি আমি পরিমাণের আকারের সমান হয়, তাহলে

    • রিটার্ন ট্রু

  • temp_counter :=cntr এর একটি অনুলিপি তৈরি করুন

  • cntr-এ প্রতিটি cnt-এর জন্য, করুন

    • যদি cnt>=পরিমাণ[i], তাহলে

      • temp_counter[cnt] :=temp_counter[cnt] - 1

      • যদি temp_counter[cnt] 0 এর মত হয়, তাহলে

        • temp_counter

          থেকে cnt-th উপাদান মুছুন
      • rem :=cnt - পরিমাণ[i]

      • temp_counter[rem] :=temp_counter[rem] + 1

      • যদি util(i+1, temp_counter) সত্য হয়, তাহলে

        • রিটার্ন ট্রু

      • temp_counter[rem] :=temp_counter[rem] - 1

      • যদি temp_counter[rem] 0 এর মত হয়, তাহলে

        • temp_counter

          থেকে rem-th উপাদান মুছুন
    • temp_counter[cnt] :=temp_counter[cnt] + 1

  • রিটার্ন ফলস

  • প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন

  • cnt :=সংখ্যায় উপস্থিত সংখ্যার সমস্ত ফ্রিকোয়েন্সির ম্যাপ হোল্ডিং ফ্রিকোয়েন্সি

  • বিপরীত ক্রমে বাছাই পরিমাণ

  • util(0, cnt)

    ফেরত দিন

উদাহরণ

আসুন আরও ভালভাবে বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি

from collections import Counter
def solve(nums, quantity):
   def util(i, cntr):
      if i == len(quantity):
         return True

      temp_counter = cntr.copy()
      for cnt in cntr:
         if cnt >= quantity[i]:
            temp_counter[cnt] -= 1
            if temp_counter[cnt] == 0:
               temp_counter.pop(cnt)
         rem = cnt - quantity[i]
         temp_counter[rem] += 1

         if util(i+1, temp_counter):
            return True

         temp_counter[rem] -= 1
         if temp_counter[rem] == 0:
            temp_counter.pop(rem)
         temp_counter[cnt] += 1

      return False

   cnt = Counter(Counter(nums).values())
   quantity.sort(reverse=True)
   return util(0, cnt)

nums = [5,1,2,2,3,4,4,3,3]
quantity = [2,2,3]
print(solve(nums, quantity))

ইনপুট

[0,1,2,3,4], [[3,1],[1,3],[5,6]]

আউটপুট

True

  1. পাইথন প্রোগ্রাম কিভাবে চালাবেন?

  2. পাইথন প্রোগ্রামে ক্যালেন্ডার

  3. QuickSort-এর জন্য পাইথন প্রোগ্রাম

  4. পাইথন প্রোগ্রামে সহজ আগ্রহ