Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन में सभी कार्यों को पूरा करने के लिए न्यूनतम समय खोजने का कार्यक्रम

मान लीजिए कि हमारे पास जॉब्स नामक एक सरणी है, जहां जॉब्स [i] ith जॉब को पूरा करने के लिए आवश्यक समय की मात्रा को इंगित करता है। हमारे पास एक और मूल्य k भी है, उन्हें हम कार्य सौंप सकते हैं। प्रत्येक कार्य ठीक एक कार्यकर्ता को सौंपा जाना चाहिए। और एक कार्यकर्ता का कार्य समय उसे सौंपे गए सभी कार्यों को पूरा करने में लगने वाला कुल समय है। हमें किसी भी नियत कार्य का न्यूनतम संभव अधिकतम कार्य समय ज्ञात करना है।

इसलिए, यदि इनपुट जॉब्स =[2,1,3,8,5], k =2 की तरह है, तो आउटपुट 10 होगा क्योंकि, हम जॉब असाइन कर सकते हैं जैसे:

  • कार्यकर्ता1:2 + 5 + 3 =10

  • कार्यकर्ता 2:1 + 8 =9

तो अधिकतम समय 10 है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • सूची कार्यों को उल्टे क्रम में क्रमबद्ध करें

  • असाइन करें:=पहली k नौकरियों की सूची

  • नौकरियां :=शेष नौकरियों की सूची

  • एक फ़ंक्शन को परिभाषित करें dp() । इसमें मुझे, असाइन करना होगा

  • अगर मैं नौकरियों के आकार के समान हूं, तो

    • अधिकतम असाइनमेंट लौटाएं

  • उत्तर:=अनंत

  • x के लिए 0 से k-1 की श्रेणी में, करें

    • असाइन करें :=असाइन से एक नई सूची

    • असाइन करें [x]:=असाइन करें [x] + नौकरियां [i]

    • उत्तर:=न्यूनतम उत्तर और डीपी (i+1, असाइन करें)

    • असाइन करें [x]:=असाइन करें [x] - नौकरियां [i]

  • वापसी उत्तर

  • मुख्य विधि से वापसी dp(0, असाइन करें)

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें

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. पायथन में सभी बिंदुओं को जोड़ने के लिए न्यूनतम लागत खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास बिंदु (x, y) के रूप में कुछ बिंदुओं के साथ बिंदु नामक एक सरणी है। अब दो बिंदुओं (xi, yi) और (xj, yj) को जोड़ने की लागत उनके बीच मैनहट्टन दूरी है, सूत्र है |xi - xj| + |yi - yj|। हमें सभी बिंदुओं को जोड़ने के लिए न्यूनतम लागत का पता लगाना होगा। इसलिए, यदि इनपुट पॉइंट्स की तरह

  1. पायथन का उपयोग करके सभी नोड्स तक पहुंचने के लिए न्यूनतम संख्या में कोने खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक निर्देशित चक्रीय ग्राफ है, जिसमें n कोने हैं और नोड्स 0 से n-1 तक गिने जाते हैं, ग्राफ को किनारे की सूची द्वारा दर्शाया जाता है, जहां किनारों [i] =(यू, वी) नोड यू से एक निर्देशित किनारे का प्रतिनिधित्व करता है। नोड वी। हमें शिखर का सबसे छोटा सेट ढूंढना है जिससे ग्राफ में सभ

  1. पायथन में दी गई बाधाओं के साथ सभी कार्यों को पूरा करने के लिए न्यूनतम समय खोजें

    मान लीजिए कि हमारे पास अलग-अलग समय की आवश्यकताओं के साथ नौकरियों की एक सरणी है, नौकरी सौंपने के लिए k अलग-अलग व्यक्ति हैं और हमारे पास यह भी है कि एक असाइनी को नौकरी की एक इकाई को पूरा करने में कितना समय लगता है। हमें निम्न बाधाओं के साथ सभी कार्यों को पूरा करने के लिए न्यूनतम समय निकालना होगा। ए