- Trending Categories
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
Physics
Chemistry
Biology
Mathematics
English
Economics
Psychology
Social Studies
Fashion Studies
Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Parallel Courses in Python
Suppose there are N courses, and these are labelled from 1 to N. We also gave a relation array, where relations[i] = [X, Y], is representing a prerequisite relationship between course X and course Y. So, this means course X has to be studied before course Y.
In one semester we can study any number of courses as long as we have studied all the prerequisites for the course we are studying. We have to find the minimum number of semesters needed to study all courses. And if there is no way to study all the courses, then return -1.
So, if the input is like N = 3, relations = [[1,3],[2,3]], then the output will be 2 as In the first semester, courses 1 and 2 are studied. In the second semester, course 3 is studied.
To solve this, we will follow these steps −
courses := n
visited := an array of size n+1, and fill this with false
queue := a new list
graph := a list of n+1 sublists
in_degree := an array of size n+1, and fill this with 0
for each i in relations, do
insert i[1] at the end of graph[i[0]]
in_degree[i[1]] := in_degree[i[1]] + 1
semeseter := 1
for i in range 1 to n+1, do
if in_degree[i] is zero, then
insert i at the end of queue
visited[i] := True
semester := 1
courses := courses - size of queue
while queue is not empty and courses is non-zero, do
current_size := size of queue
while current_size is non-zero, do
current_course := queue[0]
delete first element from queue
current_size := current_size - 1
for each i in graph[current_course], do
in_degree[i] := in_degree[i] - 1
if i is not visited and in_degree[i] is zero, then
courses := courses - 1
insert i at the end of queue
visited[i]:= True
semester := semester + 1
return semester if courses is 0 otherwise -1
Let us see the following implementation to get better understanding −
Example
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]]))
Input
3, [[1,3],[2,3]]
Output
-1
- Related Articles
- Program to count minimum semesters to cover all different courses in Python
- Program to check whether we can take all courses or not in Python
- Launching parallel tasks in Python
- What are the most promising technical courses in India?
- What are the different IT Career courses in India?
- Program to find maximum number of courses we can take based on interval time in Python?
- What are the courses offered to get a PG Diploma in Psychology?
- Drawing multiple figures in parallel in Python with Matplotlib
- How can I iterate through two lists in parallel in Python?
- Resistors in Parallel
- Capacitors in Parallel
- In the figure, $AB parallel CD parallel EF$ and $GH parallel KL$. Find $angle HKL$."
- Parallel Array in C++
- Resistors in Series Parallel
- Are certified courses undertaken from Coursera are worthy from a Job and Interview point of view?
