কম্পিউটার

পাইথনে সব কাজ শেষ করার জন্য ন্যূনতম সময় বের করার প্রোগ্রাম


ধরুন আমাদের কাছে কাজ নামে একটি অ্যারে আছে, যেখানে jobs[i] ith কাজটি সম্পূর্ণ করার জন্য প্রয়োজনীয় সময়ের পরিমাণ নির্দেশ করে। আমাদের আরও একটি মান আছে, তাদের আমরা কাজ বরাদ্দ করতে পারি। প্রতিটি কাজ ঠিক একজন কর্মীকে বরাদ্দ করা উচিত। এবং একজন শ্রমিকের কাজের সময় হল তাদের জন্য নির্ধারিত সমস্ত কাজ সম্পূর্ণ করতে মোট সময়। আমাদের যেকোন অ্যাসাইনমেন্টের সর্বনিম্ন সম্ভাব্য সর্বাধিক কাজের সময় খুঁজে বের করতে হবে।

সুতরাং, যদি ইনপুটটি jobs =[2,1,3,8,5], k =2 এর মত হয়, তাহলে আউটপুট হবে 10 কারণ, আমরা কাজ বরাদ্দ করতে পারি যেমন:

  • কর্মী1:2 + 5 + 3 =10

  • কর্মী2:1 + 8 =9

তাই সর্বোচ্চ সময় 10।

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

  • তালিকার কাজগুলিকে বিপরীত ক্রমে সাজান

  • বরাদ্দ করুন :=প্রথম k কাজের তালিকা

  • চাকরি :=বাকি চাকরির তালিকা

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

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

    • অ্যাসাইন সর্বাধিক ফেরত

  • উত্তর :=অসীম

  • 0 থেকে k - 1 রেঞ্জের x এর জন্য, করুন

    • assign :=assign থেকে একটি নতুন তালিকা

    • বরাদ্দ [x] :=বরাদ্দ [x] + কাজ[i]

    • উত্তর :=সর্বনিম্ন উত্তর এবং dp(i+1, assign)

    • assign [x] :=বরাদ্দ [x] - কাজ[i]

  • উত্তর ফেরত দিন

  • মূল পদ্ধতি থেকে dp(0, assign)

    রিটার্ন করুন

উদাহরণ

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

def solve(jobs, k):
   jobs.sort(reverse=True)
   assign = tuple(jobs[:k])
   jobs = jobs[k:]

   def dp(i, assign):
      if i == len(jobs):
         return max(assign)

      ans = float('inf')
      for x in range(k):
         assign = list(assign)
         assign[x] += jobs[i]
         ans = min(ans, dp(i+1, tuple(assign)))
         assign[x] -= jobs[i]

      return ans

   return dp(0, assign)

jobs = [2,1,3,8,5]
k = 2
print(solve(jobs, k))

ইনপুট

[2,1,3,8,5], 2

আউটপুট

10

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

  2. পাইথন ব্যবহার করে সমস্ত নোডে পৌঁছানোর জন্য ন্যূনতম সংখ্যক শীর্ষবিন্দু খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে সমস্ত ভাল পারফর্মারদের ন্যূনতম পরিমাণ অর্থ প্রদানের প্রয়োজন খুঁজে বের করার জন্য প্রোগ্রাম

  4. পাইথনে প্রদত্ত সীমাবদ্ধতার সাথে সমস্ত কাজ শেষ করার জন্য সর্বনিম্ন সময় খুঁজুন