Welcome to my MIT Computer Science Portfolio! This repository contains detailed notes, summaries, and projects based on MIT courses for Computer Science and AI Engineering. Below you will find comprehensive overviews of each course and its topics, providing insights into the foundational and advanced concepts covered in these prestigious courses.
This course provides an introduction to fundamental algorithms, focusing on both the theoretical and practical aspects of algorithm design and analysis.
- Basic Data Structures
- Arrays, linked lists, stacks, queues
- Usage and implementation in algorithms
- Sorting
- Comparison-based sorting: Merge sort, quicksort, heapsort
- Analysis of time and space complexity
- Hashing
- Hash functions, collision resolution techniques
- Applications and performance considerations
- Linear Sorting
- Counting sort, radix sort, bucket sort
- Analysis and use cases
- Binary Trees
- Binary search trees (BST)
- Tree traversals: In-order, pre-order, post-order
- Binary Trees and AVL
- Self-balancing BSTs: AVL trees
- Rotations and balancing algorithms
- Binary Heaps
- Min-heaps, max-heaps
- Priority queues and heap operations
- Breadth-First Search (BFS)
- BFS algorithm and applications
- Graph traversal and shortest path in unweighted graphs
- Depth-First Search (DFS)
- DFS algorithm and applications
- Topological sorting, cycle detection
- Weighted Shortest Paths
- Shortest path problems in weighted graphs
- Bellman-Ford and Dijkstra’s algorithms
- Bellman-Ford Algorithm
- Single-source shortest path in graphs with negative weights
- Dynamic programming approach
- Dijkstra’s Algorithm
- Greedy algorithm for shortest paths in non-negative weighted graphs
- Priority queue implementation
- Johnson’s Algorithm
- All-pairs shortest path algorithm
- Re-weighting technique to handle negative weights
- Dynamic Programming (DP)
- Part 1: Recursive Algorithms
- Part 2: Subproblems and overlapping subproblems
- Part 3: All-pairs shortest path (APSP), matrix chain multiplication, piano cost problem
- Part 4: Pseudopolynomials and approximation algorithms
- Complexity
- Time and space complexity analysis
- Big O, Big Theta, Big Omega notations
This course delves into advanced algorithm design techniques and their analysis, emphasizing efficient and effective problem-solving strategies.
- Interval Scheduling
- Greedy algorithms for optimal scheduling
- Divide & Conquer
- Convex hull algorithms, median finding, FFT (Fast Fourier Transform)
- Van Emde Boas Trees for efficient searching
- Amortization
- Amortized analysis of data structures and algorithms
- Randomization
- Techniques for randomized algorithms
- Applications in matrix multiplication, quicksort, skip lists
- Universal and perfect hashing
- Augmentation
- Range trees and data structure augmentation
- Dynamic Programming (Advanced DP)
- Advanced DP techniques and their applications
- All-pairs shortest paths algorithms
- Greedy Algorithms
- Minimum spanning tree algorithms
- Incremental Improvement
- Max flow and min cut algorithms
- Matching algorithms and baseball elimination
- Linear Programming
- LP formulations, reductions, simplex algorithm
- Complexity
- P, NP, NP-completeness, and reductions
- Approximation algorithms and fixed-parameter algorithms
- Distributed Algorithms
- Synchronous and asynchronous distributed algorithms
- Symmetry-breaking, shortest-paths, spanning trees
- Cryptography
- Hash functions, encryption techniques
- Cache-oblivious Algorithms
- Searching, sorting, medians, and matrices
This course provides a rigorous mathematical foundation for understanding and developing machine learning algorithms.
- Introduction
- Overview of the mathematical principles underlying machine learning
- Binary Classification
- Mathematical formulation and analysis of binary classification problems
- Concentration Inequalities
- Probabilistic inequalities and their applications in ML
- Fast Rates and VC Theory
- Vapnik-Chervonenkis theory and learning rates
- The VC Inequality
- Detailed study of the VC inequality
- Covering Numbers
- Concepts and applications of covering numbers in ML
- Chaining
- Chaining techniques for controlling empirical processes
- Convexification
- Convexification methods for machine learning algorithms
- Boosting
- Boosting algorithms and their mathematical foundations
- Support Vector Machines (SVMs)
- Theory and application of SVMs in classification tasks
- Gradient Descent
- Optimization techniques using gradient descent
- Projected Gradient Descent
- Projected gradient methods for constrained optimization
- Mirror Descent
- Mirror descent algorithms and their applications
- Stochastic Gradient Descent (SGD)
- Stochastic approximation techniques for large-scale ML
- Prediction with Expert Advice
- Algorithms for learning from expert predictions
- Follow the Perturbed Leader
- Online learning algorithms based on perturbation
- Online Learning with Structured Experts
- Advanced online learning techniques
- Stochastic Bandits
- Multi-armed bandit problems and algorithms
- Prediction of Individual Sequences
- Techniques for predicting individual sequences
- Adversarial Bandits
- Algorithms for adversarial bandit problems
- Linear Bandits
- Linear bandit problems and solutions
- Blackwell’s Approachability
- Blackwell’s approachability theorem and its implications
- Potential Based Approachability
- Potential-based methods for approachability
This course introduces the fundamentals of deep learning, covering both theoretical concepts and practical applications.
- Introduction
- Overview of deep learning, its applications, and its impact on various fields.
- Introduction to neural networks, backpropagation, and optimization techniques.
- Practical exercises and projects to apply deep learning concepts.