Programming, Data Structures and Algorithms using Python (IIT Madras)
A university-level, 12-week sequence that starts with a Python recap and algorithm timing, then covers complexity analysis, sorting and searching, graph algorithms, heaps and search trees, greedy, divide-and-conquer and dynamic programming, string matching, and a closing block on linear programming, network flows and NP. It suits learners with some Python who want a rigorous, theory-backed grounding in DSA. It is more academic and broader than a typical interview-prep course.
Lessons by IIT Madras - B.S. Degree Programme on YouTubeCurated by YodaHut. These lessons are hosted on YouTube and produced by their original creators, who are not affiliated with YodaHut. You still earn YodaCoins, keep your streak and track progress here.
What You'll Learn
- Estimate the running time of an algorithm and compare orders of magnitude (O-notation), and time Python code to check it
- Implement and analyse searching and sorting algorithms: binary search, selection, insertion, merge sort and quicksort
- Explain how Python lists and dictionaries work internally, and how lists differ from arrays
- Represent graphs and apply BFS, DFS, topological sort, Dijkstra, Bellman-Ford, Floyd-Warshall, Prim and Kruskal
- Use union-find, priority queues and heaps inside algorithms
- Solve problems with greedy methods, divide and conquer (inversions, closest pair, quickselect) and dynamic programming (memoization, grid paths, edit distance, subsequences)
- Apply string-matching algorithms (Boyer-Moore, Rabin-Karp, KMP) and tries, and describe P vs NP and reductions at an introductory level
Prerequisites
- Basic Python: variables, loops, functions and lists (the first week is only a quick recap)
- Comfort with school-level mathematics such as logarithms and simple recurrences
Course Curriculum
- 1Introduction to Jupyter Notebooks and Google Colab15:17
- 2Implementing Python Code: Part 18:47
- 3Python Recap I9:58
- 4Python Recap II19:52
- 5Python Recap III13:04
- 6Exception Handling16:38
- 7Classes and Objects18:43
- 8Implementing Python Code: Part 27:04
- 9Timing Our Code5:43
- 10Implementing Python Code: Part 36:09
- 11Why Efficiency Matters20:56
- 12Implementing Python Code: Part 45:01
- 13Analysis of Algorithms35:05
- 14Comparing Orders of Magnitude24:01
- 15Calculating Complexity: Examples18:09
- 16Searching in a List11:11
- 17Selection Sort15:43
- 18Insertion Sort15:15
- 19Merge Sort12:43
- 20Analysis of Merge Sort9:50
- 21Implementing Searching and Sorting Algorithms10:14
- 22Quicksort17:58
- 23Analysis of Quicksort10:19
- 24Implementing Quicksort3:57
- 25Concluding Remarks on Sorting Algorithms6:42
- 26Lists vs Arrays (Theory)17:19
- 27Designing a Flexible List and Its Operations19:29
- 28How Lists Are Implemented in Python18:19
- 29How Dictionaries Are Implemented in Python15:26
- 30Lists vs Arrays (Implementation)14:12
- 31Introduction to Graphs24:57
- 32Representing Graphs18:05
- 33Breadth First Search (BFS)33:53
- 34Depth First Search (DFS)17:19
- 35Applications of BFS and DFS31:34
- 36Introduction to Directed Acyclic Graphs (DAGs)8:18
- 37Topological Sorting20:19
- 38Longest Path in DAGs10:17
- 39Shortest Paths in Weighted Graphs9:00
- 40Single-Source Shortest Paths: Dijkstra's Algorithm24:17
- 41Shortest Paths with Negative Weights: Bellman-Ford Algorithm18:22
- 42All-Pairs Shortest Paths: Floyd-Warshall Algorithm24:01
- 43Minimum Cost Spanning Trees8:57
- 44Spanning Trees: Prim's Algorithm23:53
- 45Spanning Trees: Kruskal's Algorithm23:36
- 46Union-Find Data Structure29:50
- 47Priority Queues18:45
- 48Heaps39:20
- 49Using Heaps in Algorithms28:07
- 50Search Trees37:45
- 51Balanced Search Trees45:53
- 52Greedy Algorithms: Interval Scheduling35:01
- 53Greedy Algorithms: Minimizing Lateness29:10
- 54Greedy Algorithms: Huffman Coding42:19
- 55Divide and Conquer: Counting Inversions25:26
- 56Divide and Conquer: Closest Pair of Points29:30
- 57Divide and Conquer: Integer Multiplication28:28
- 58Divide and Conquer: Recursion Trees19:55
- 59Divide and Conquer: Quick Select27:28
- 60Implementing Quick Select and Fast Select8:28
- 61Dynamic Programming19:00
- 62Memoization21:32
- 63Grid Paths25:00
- 64Common Subwords and Subsequences27:11
- 65Edit Distance26:08
- 66Matrix Multiplication29:21
- 67String Matching11:55
- 68String Matching: Boyer-Moore Algorithm15:52
- 69String Matching: Rabin-Karp Algorithm16:53
- 70String Matching Using Automata17:11
- 71String Matching: Knuth-Morris-Pratt Algorithm18:56
- 72String Matching: Tries34:18
- 73String Matching: Regular Expressions27:42
- 74Linear Programming27:57
- 75Linear Programming: Production Planning19:52
- 76Linear Programming: Bandwidth Allocation11:59
- 77Network Flows24:41
- 78Reductions14:39
- 79Intractability: Checking Algorithms27:22
- 80Intractability: P and NP17:13
- 81Revision: Weeks 1 to 315:53
- 82Revision: Weeks 4 to 619:34
- 83Revision: Weeks 7 to 923:25
- 84Revision: Weeks 10 to 1120:20
About the Instructor
IIT Madras - B.S. Degree Programme
YouTube creator
The lessons in this course were produced by IIT Madras - B.S. Degree Programme and are published on YouTube. YodaHut selected and sequenced them into this course; we did not make them, and IIT Madras - B.S. Degree Programme is not affiliated with YodaHut.
Visit the channel on YouTubeMore in the Library: Development

Data Structures and Algorithms in Python for Coding Interviews (Hindi)

Data Structures and Algorithms in Python for Coding Interviews

TypeScript for Beginners: Types, Interfaces, Classes and Generics

React with TypeScript: Typing Props, Hooks and Reusable Components

Git and GitHub in Hindi: From First Commit to Pull Requests and Rebase

Git and GitHub for Beginners: Commits, Branches, Pull Requests and Collaboration

- 84 lessons
- 27h 59m of video
- Earns YodaCoins & streaks
- Timestamped notes
- Free — hosted on YouTube
No certificate is issued for Library courses.