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

पायथन में समानांतर पाठ्यक्रम

मान लीजिए कि एन पाठ्यक्रम हैं, और इन्हें 1 से एन तक लेबल किया गया है। हमने एक संबंध सरणी भी दी है, जहां संबंध [i] =[एक्स, वाई], पाठ्यक्रम एक्स और पाठ्यक्रम वाई के बीच एक पूर्वापेक्षा संबंध का प्रतिनिधित्व कर रहा है। तो, इसका मतलब है पाठ्यक्रम X का अध्ययन पाठ्यक्रम Y से पहले किया जाना है।

एक सेमेस्टर में हम कितने भी पाठ्यक्रमों का अध्ययन कर सकते हैं, जब तक कि हम जिस पाठ्यक्रम का अध्ययन कर रहे हैं, उसके लिए सभी पूर्वापेक्षाओं का अध्ययन कर लिया है। हमें सभी पाठ्यक्रमों का अध्ययन करने के लिए आवश्यक न्यूनतम सेमेस्टर की संख्या ज्ञात करनी होगी। और यदि सभी पाठ्यक्रमों का अध्ययन करने का कोई तरीका नहीं है, तो -1 लौटें।

इसलिए, यदि इनपुट एन =3, संबंध =[[1,3], [2,3]] जैसा है, तो आउटपुट 2 होगा क्योंकि पहले सेमेस्टर में, पाठ्यक्रम 1 और 2 का अध्ययन किया जाता है। दूसरे सेमेस्टर में, पाठ्यक्रम 3 का अध्ययन किया जाता है।

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

  • पाठ्यक्रम :=n

  • विज़िट किया गया :=आकार n+1 की एक सरणी, और इसे असत्य से भरें

  • कतार :=एक नई सूची

  • ग्राफ़ :=n+1 उपन्यासकारों की सूची

  • in_degree :=आकार n+1 की एक सरणी, और इसे 0 से भरें

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

    • ग्राफ़ के अंत में i[1] डालें[i[0]]

    • in_degree[i[1]] :=in_degree[i[1]] + 1

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

  • 1 से n+1 की श्रेणी में i के लिए, करें

    • अगर in_degree[i] शून्य है, तो

      • कतार के अंत में i डालें

      • दौरा किया [i] :=सच

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

  • पाठ्यक्रम:=पाठ्यक्रम - कतार का आकार

  • जबकि कतार खाली नहीं है और पाठ्यक्रम शून्य नहीं है, करें

    • current_size :=कतार का आकार

    • जबकि current_size गैर-शून्य है, करें

      • current_course :=कतार[0]

      • कतार से पहला तत्व हटाएं

      • current_size :=current_size - 1

      • ग्राफ़ में प्रत्येक i के लिए[current_course], करें

        • in_degree[i] :=in_degree[i] - 1

        • अगर मैं नहीं गया और in_degree[i] शून्य है, तो

          • कोर्स :=कोर्स - 1

          • कतार के अंत में i डालें

          • विज़िट किया गया[i]:=सच

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

  • वापसी सेमेस्टर अगर पाठ्यक्रम 0 है अन्यथा -1

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

उदाहरण

class Solution(object):
   def minimumSemesters(self, n, relations):
      courses = n
      visited = [False for i in range(n+1)]
      queue = []
      graph = [[] for i in range(n+1)]
      in_degree = [0 for i in range(n+1)]
      for i in relations:
         graph[i[0]].append(i[1])
         in_degree[i[1]]+=1
      semeseter = 1
      for i in range(1,n+1):
         if not in_degree[i]:
            queue.append(i)
            visited[i] = True
         semester = 1
         courses -= len(queue)
         while queue and courses:
            current_size = len(queue)
            while current_size:
               current_course = queue[0]
               queue.pop(0)
               current_size-=1
               for i in graph[current_course]:
                  in_degree[i]-=1
                  if not visited[i] and not in_degree[i]:
                     courses-=1
                     queue.append(i)
                  visited[i]=True
            semester+=1
         return semester if not courses else -1

ob = Solution()
print(ob.minimumSemesters(3,[[1,3],[2,3]]))

इनपुट

3, [[1,3],[2,3]]

आउटपुट

-1

  1. issuperset () पायथन में

    इस लेख में, हम पायथन में issuperset() और विभिन्न क्षेत्रों में इसके कार्यान्वयन के बारे में जानेंगे। यह विधि बूलियन ट्रू लौटाती है यदि एक सेट बी के सभी तत्वों में सभी तत्व सेट ए होते हैं जो एक तर्क के रूप में पारित होते हैं और यदि ए के सभी तत्व बी में मौजूद नहीं होते हैं तो झूठा रिटर्न देता है। इस

  1. पायथन में क्विन

    क्विन एक प्रोग्राम है, जो कोई इनपुट नहीं लेता है, लेकिन यह आउटपुट का उत्पादन करता है। यह इसका अपना सोर्स कोड दिखाएगा। इसके अतिरिक्त, क्विन की कुछ शर्तें हैं। हम प्रोग्राम के अंदर सोर्स कोड फ़ाइल नहीं खोल सकते। उदाहरण कोड a=a=%r;print (a%%a);print (a%a) आउटपुट a=a=%r;print (a%%a);print (a%a) य

  1. मैं पायथन में समानांतर में दो सूचियों के माध्यम से कैसे पुनरावृति कर सकता हूं?

    यह मानते हुए कि दो सूचियां असमान लंबाई की हो सकती हैं, सामान्य सूचकांकों पर समानांतर ट्रैवर्सल न्यूनतम लंबाई की सीमा से अधिक लूप का उपयोग करके किया जा सकता है >>> L1 ['a', 'b', 'c', 'd'] >>> L2 [4, 5, 6] >>> l=len(L1) if len(L1)<=len(L2)e