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

पायथन में सभी जॉब्स को खत्म करने का न्यूनतम समय खोजने का प्रोग्राम


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

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

  • वर्कर1: 2 + 5 + 3 = 10
  • वर्कर2: 1 + 8 = 9

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

हल करने के चरण

  1. jobs सूची को रिवर्स ऑर्डर में सॉर्ट करें।
  2. assign := पहले k जॉब्स की सूची
  3. jobs := शेष जॉब्स की सूची
  4. dp() फ़ंक्शन परिभाषित करें। यह i, assign लेगा:
    • यदि i == len(jobs), तो max(assign) वापस करें।
    • ans := infinity
    • x को 0 से k - 1 तक लूप चलाएं:
      • assign := assign से नई सूची
      • assign[x] := assign[x] + jobs[i]
      • ans := min(ans, dp(i+1, assign))
      • assign[x] := assign[x] - jobs[i]
    • ans वापस करें।
  5. मुख्य मेथड से 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. Python में सभी बिंदुओं को जोड़ने की न्यूनतम लागत खोजने का प्रोग्राम Python में सभी बिंदुओं को जोड़ने की न्यूनतम लागत खोजने का प्रोग्राम

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

  1. Python से DAG में सभी नोड्स तक पहुंचने के लिए मिनिमम वर्टेक्स कैसे ढूंढें? Python से DAG में सभी नोड्स तक पहुंचने के लिए मिनिमम वर्टेक्स कैसे ढूंढें?

    डायरेक्टेड एसाइक्लिक ग्राफ (DAG) में जिन वर्टेक्सेज़ का इन-डिग्री 0 है, उनसे सभी नोड्स पहुंचे जा सकते हैं। एल्गोरिदम सभी नोड्स का सेट बनाएं (0 से n-1)। सभी एजेज़ के डेस्टिनेशन नोड्स (v) का सेट बनाएं। सोर्स नोड्स = सभी नोड्स - डेस्टिनेशन नोड्स (यानी इन-डिग्री 0 वाले)। यही मिनिमम वर्टेक्स सेट है। उद

  1. - Python में दिए गए प्रतिबंधों के साथ सभी कार्यों को पूरा करने का न्यूनतम समय ढूंढना

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