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

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


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

  • एक असाइनी को केवल सन्निकट कार्य सौंपे जा सकते हैं।

  • दो असाइनी एक ही कार्य को साझा या निष्पादित नहीं कर सकते।

तो, यदि इनपुट k = 4, t = 5, job = {12, 6, 9, 15, 5, 9} की तरह है, तो आउटपुट 75 होगा क्योंकि हमें यह समय [12], [6, 9], [15] और [5, 9] असाइन करके मिलता है।

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

  • एक फ़ंक्शन is_valid() परिभाषित करें। यह time, K, job लेगा

  • n := job का आकार

  • count := 1, curr_time := 0, i := 0

  • जब i < n, करें

    • यदि curr_time + job[i] > time, तो

      • curr_time := 0

      • count := count + 1

    • अन्यथा,

      • curr_time := curr_time + job[i]

      • i := i + 1

  • count <= K होने पर true वापस करें

  • मुख्य विधि से, निम्नलिखित करें <

  • n := job का आकार

  • end := 0, begin := 0

  • i के लिए 0 से n की सीमा में, करें

    • end := end + job[i]

  • res := end

  • job_max := job का अधिकतम

  • जब begin <= end, करें

    • mid := ((begin + end) / 2) पूर्णांक भाग लें

    • यदि mid >= job_max और is_valid(mid, K, job) true है, तो

      • res := res, mid का न्यूनतम

      • end := mid - 1

    • अन्यथा,

      • begin := mid + 1

  • res * T वापस करें

उदाहरण

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

def is_valid(time, K, job):     n = len(job)     count = 1     curr_time = 0     i = 0     while i < n:         if curr_time + job[i] > time:             curr_time = 0             count += 1         else:             curr_time += job[i]             i += 1     return count <= K def get_minimum_time(K, T, job):     n = len(job)     end = 0     begin = 0     for i in range(n):         end += job[i]     res = end     job_max = max(job)     while begin <= end:         mid = int((begin + end) / 2)         if mid >= job_max and is_valid(mid, K, job):             res = min(res, mid)             end = mid - 1         else:             begin = mid + 1     return res * T job = [12, 6, 9, 15, 5, 9] k = 4 T = 5 print(get_minimum_time(k, T, job))

इनपुट

4, 5, [12, 6, 9, 15, 5, 9]

आउटपुट

75

  1. Python में सभी बिंदुओं को जोड़ने की न्यूनतम लागत खोजने का प्रोग्राम Python में सभी बिंदुओं को जोड़ने की न्यूनतम लागत खोजने का प्रोग्राम

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

  1. - Python - दी गई ऐरे में सभी गुड इंडेक्स ढूंढना

    मान लीजिए हमारे पास संख्याओं की एक ऐरे A है, हमें इस ऐरे के सभी इंडेक्स ढूंढने हैं ताकि ऐरे से i-th एलिमेंट को डिलीट करने के बाद, ऐरे एक गुड ऐरे बन जाए। हमें ध्यान रखना है कि: गुड ऐरे एक ऐसा ऐरे है जिसमें एक एलिमेंट होता है जो अन्य सभी एलिमेंट्स के योग के बराबर होता है। यहां 1-बेस्ड इंडेक्सिंग उपयो

  1. - पायथन में दी गई स्ट्रिंग के सभी संभावित क्रमपरिवर्तन कैसे खोजें?

    दी गई स्ट्रिंग के सभी संभावित क्रमपरिवर्तन खोजने के लिए, आप itertools मॉड्यूल का उपयोग कर सकते हैं जिसमें एक उपयोगी मेथड permutations(iterable[, r]) होता है। यह मेथड इटरेबल में तत्वों के क्रमिक r-लंबाई क्रमपरिवर्तनों को टुपल्स के रूप में लौटाता है। सभी क्रमपरिवर्तनों को स्ट्रिंग के रूप में प्राप्त क