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

पायथन में k अलग-अलग रंगों से बाड़ रंगने की न्यूनतम लागत ज्ञात करने का प्रोग्राम


मान लीजिए हम N बाड़ों की एक पंक्ति को K अलग-अलग रंगों से रंगना चाहते हैं। हम लागत को न्यूनतम करना चाहते हैं जबकि यह सुनिश्चित करते हैं कि कोई भी दो पड़ोसी बाड़ एक ही रंग के न हों। यदि हमारे पास एक N x K मैट्रिक्स है जहां nवीं पंक्ति और kवां कॉलम nवीं बाड़ को kवें रंग से रंगने की लागत दर्शाता है, तो हमें न्यूनतम लागत ज्ञात करनी है जो इस लक्ष्य को प्राप्त करती है।

उदाहरण के लिए, यदि मैट्रिक्स है:

645
327
345
544
तो आउटपुट 14 होगा (रंग सूचकांक: 5 → 2 → 3 → 4)।

एल्गोरिदम (O(N*K) समय, O(1) स्पेस)

  • प्रत्येक पंक्ति के लिए, न्यूनतम लागत (fc, ft) और दूसरी न्यूनतम लागत (sc, st) वाले रंग को ट्रैक करें
  • अगली पंक्ति के लिए, प्रत्येक रंग के लिए लागत की गणना करें: यदि रंग पिछली न्यूनतम लागत वाले रंग से अलग है तो ft जोड़ें, अन्यथा st जोड़ें
  • नई न्यूनतम और दूसरी न्यूनतम लागत अपडेट करें
  • अंत में ft (न्यूनतम कुल लागत) वापस करें

उदाहरण

class Solution:
    def solve(self, matrix):
        n = len(matrix)
        fc, ft = 0, 0
        sc, st = 1, 0
        inf = int(1e18)
        for row in matrix:
            nfc, nft = -1, inf
            nsc, nst = -1, inf
            for i, t in enumerate(row):
                ct = t + (ft if i != fc else st)
                if ct <= nft:
                    nsc, nst = nfc, nft
                    nfc, nft = i, ct
                elif ct <= nst:
                    nsc, nst = i, ct
            fc, ft = nfc, nft
            sc, st = nsc, nst
        return ft

ob = Solution()
matrix = [[6,4,5],[3,2,7],[3,4,5],[5,4,4]]
print(ob.solve(matrix))

इनपुट

[[6, 4, 5], [3, 2, 7], [3, 4, 5], [5, 4, 4]]

आउटपुट

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

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

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

    मान लीजिए हमारे पास रंगों (R, G, B) की एक लिस्ट है। अब यदि दो अलग-अलग रंग अगल-बगल हैं तो वे तीसरे रंग के एकल रंग आइटम में बदल सकते हैं। हमें किसी भी संभावित परिवर्तन अनुक्रम के बाद शेष सबसे छोटी संख्या ढूंढनी है।उदाहरण के लिए, यदि इनपुट colors = [G, R, G, B, R] है, तो आउटपुट 1 होगा क्योंकि यह नीचे द

  1. पायथन में न्यूनतम लागत से शहरों को जोड़ना पायथन में न्यूनतम लागत से शहरों को जोड़ना

    मान लीजिए 1 से N तक नंबर वाले N शहर हैं। हमारे पास कनेक्शन्स हैं, जहां प्रत्येक कनेक्शन [i] [city1, city2, cost] है जो city1 और city2 को एक साथ जोड़ने की लागत दर्शाता है। हमें न्यूनतम लागत ढूंढनी है ताकि शहरों के प्रत्येक जोड़े के लिए, कनेक्शन्स का एक पथ मौजूद हो (संभवतः लंबाई 1 का) जो उन दो शहरों क