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

पायथन में सभी विभिन्न पाठ्यक्रमों को कवर करने के लिए न्यूनतम सेमेस्टर की गणना करने का कार्यक्रम

मान लीजिए कि हमारे पास एक संख्या n है, यह दर्शाता है कि 1 से n तक के लेबल वाले n विभिन्न पाठ्यक्रम हैं। हमारे पास संबंध नामक एक सरणी भी है जहां संबंध [i] में एक जोड़ी (prevCourse_i, nextCourse_i) शामिल है, जो पाठ्यक्रम prevCourse_i और पाठ्यक्रम nextCourse_i के बीच एक पूर्वापेक्षा संबंध का प्रतिनिधित्व करता है:इसलिए पाठ्यक्रम prevCourse_i को अगले पाठ्यक्रम से पहले लिया जाना है। और हमारे पास जो अंतिम पैरामीटर है वह k है। एक सेमेस्टर में, हम अधिक से अधिक k संख्या में पाठ्यक्रम ले सकते हैं, जब तक कि हम अपने द्वारा लिए जा रहे पाठ्यक्रमों के लिए पिछले सेमेस्टर में सभी पूर्वापेक्षाएँ ले चुके हैं। हमें सभी पाठ्यक्रमों में भाग लेने के लिए आवश्यक न्यूनतम सेमेस्टर की संख्या ज्ञात करनी होगी।

तो, अगर इनपुट पसंद है

पायथन में सभी विभिन्न पाठ्यक्रमों को कवर करने के लिए न्यूनतम सेमेस्टर की गणना करने का कार्यक्रम

तो आउटपुट 3 होगा क्योंकि पहले सेमेस्टर में हम कोर्स 1 और 2 ले सकते हैं, अब हम कोर्स 3, 4 और 5 के लिए पात्र हैं, इसलिए अगर हम दूसरे सेमेस्टर के लिए 5 और 3 या 4 में से कोई एक लेते हैं, तो हम अगले सेमेस्टर में सभी पाठ्यक्रम समाप्त कर सकते हैं। तो हमें कुल 3 सेमेस्टर चाहिए

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

  • लिया :=एक नया सेट

  • g1 :=n खाली सूचियों वाली एक सूची

  • g2 :=आकार n की एक नई सूची और 0 से भरें

  • w :=आकार n की एक नई सूची और 0 से भरें

  • सेमेस्टर :=0

  • संबंधों में प्रत्येक x के लिए, करें

    • g1[x[1]-1]

      . के अंत में x[0]-1 डालें
    • g2[x[0]-1]

      . के अंत में x[1]-1 डालें
  • वजन :=g1 में सभी मदों की लंबाई से एक नई सूची

  • मैं के लिए 0 से n -1 की सीमा में, करो

    • g1[i] में प्रत्येक x के लिए, करें

      • w[x] :=अधिकतम w[x] और वजन[i]

  • जबकि लिया का आकार

    • पाठ्यक्रम :=एक नई सूची

    • मैं के लिए 0 से n -1 की सीमा में, करो

      • अगर g1[i] खाली है और मैं शामिल नहीं हूं, तो

        • पाठ्यक्रम के अंत में (i, w[i]) डालें

      • यदि पाठ्यक्रम का आकार> k, तो

        • पाठ्यक्रम =दूसरे पैरामीटर के आधार पर पाठ्यक्रमों को उल्टे क्रम में क्रमबद्ध करें

        • पाठ्यक्रम :=प्रथम k पाठ्यक्रमों की सूची

      • सेमेस्टर :=सेमेस्टर + 1

      • पाठ्यक्रमों में प्रत्येक x के लिए, करें

        • g2[x[0]] में प्रत्येक y के लिए, करें

          • x[0] को g1[y]

            . से हटाएं
        • g2[x[0]] :=खाली सूची

        • x[0] को लिया में डालें

  • वापसी सेमेस्टर

उदाहरण

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

def solve(n, relations, k):
   taken = set()
   g1 = [[] for _ in range(n)]
   g2 = [[] for _ in range(n)]
   w = [0] * n
   semester = 0
   for x in relations:
      g1[x[1]-1].append(x[0]-1)
      g2[x[0]-1].append(x[1]-1)

   weight = list(map(len, g1))
   for i in range(n):
      for x in g1[i]:
         w[x] = max(w[x], weight[i])


   while len(taken) < n:
      courses = []
      for i in range(n):
         if (not g1[i]) and (i not in taken):
            courses.append([i,w[i]])
      if len(courses) > k:
         courses = sorted(courses, key = lambda x:x[1],reverse=True)
         courses = courses[:k]

      semester += 1

      for x in courses:
         for y in g2[x[0]]:
            g1[y].remove(x[0])
         g2[x[0]] = []
         taken.add(x[0])
   return semester

n = 6
relations = [(1,3),(2,5),(2,4),(5,6)]
k = 2
print(solve(n, relations, k))

इनपुट

6, [(1,3),(2,5),(2,4),(5,6)], 2

आउटपुट

3

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

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

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

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

  1. एक सरणी में व्युत्क्रमों की गणना करने के लिए पायथन कार्यक्रम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक सूची दी गई है, हमें आवश्यक व्युत्क्रम की गणना करने और उसे प्रदर्शित करने की आवश्यकता है। सरणी को क्रमबद्ध करने के लिए कितने चरणों की आवश्यकता है, इसकी गणना करके उलटा गणना प्राप्त की जाती है। आइए अब नीचे दिए