Pre-requisite: Knowledge and understanding of basic constructs of a programming language
Mathematics
- Basic Number theory
- Sets
- Venn diagrams
- Set builder notations
- subsets
- Union, intersections, difference, membership
- Set equality
- Empty, Universal sets
- Types of numbers and their symbols
- Relations and Functions
- Relations: Intuitive idea - member of set A is related to member of set B
- Relations: Bigger picture - subsets of cartesian products
- Concept of domain, co-domain of a relation
- Direction in a relation
- No pre-image can have more than one image
- Concept of functions
- Concept of domain, range of a function
- Functions: Dependent and Independent variables
- Intro to combinatorics
- Principle of counting
- Selection
- Permutation
- Factorials
- Combinations
- Logarithms
- Idea of what is exactly logarithm of a number.
- Properties.
- Examples
- Complexity Analysis
- Notions of efficiency
- How to measure efficiency - express runtime as a function of input size
- Examples of measuring efficiency of some problems
- Comparison of functions
- Big-O notation
Language Constructs - C++ - 1
- Introduction to C++
- What is C++?
- Why do we need another language?
- Basic Structure of a C++ program
- Data types
- Recap of data types in Python
- Declaring and initializing variables of different data types in C++.
- Primitives datatypes in C++
- int
- long long
- float
- double
- char
- Bool
- Overflow of values
- Arrays
- Motivation
- Arrays in C++ including implementation
- Difference between python lists and C++ array
- Control flow
- Decision Making statements
- if
- else if
- else
- and, or, not operators
- Loops
- for
- while
- Decision Making statements
- I / O
- Introduction(Motivation)
- Concept of Streams
- Input using cin
- Input using getline
- Output using cout
- Functions
- return types
- Parameters
- By value
- By reference
- Recursion
- Notion of Structs
- Basic Idea of an user defined data type.
- Motivational Problem
- Implementation in C++
Algorithms and data structures - 1
- Searching
- Motivational Problem
- Linear Search
- Binary Search
- Algorithm
- Complexity
- Code
- Think about implementing your own lower_bound().
- Sorting
- Insertion sort
- Algorithm
- Visualization
- Code
- Complexity Analysis
- Merge sort
- Merging two small sorted arrays to get another sorted array(Algorithm).
- The idea of Divide and Conquer
- Algorithm
- Visualization
- Code
- Complexity Analysis
- Insertion sort
Language Constructs - C++ 2
- STL - Containers(stack + queue + priority queue)
- Stack(Motivational Problem, some important functions, LIFO)
- Queues(Motivational Problem, some important functions, FIFO)
- Priority Queues(Motivational Problem, some important functions)
- STL - Containers(string + vector + pair)
- Strings(Basic idea, some important functions)
- Vector(Basic idea, some important functions)
- Pair(Basic idea, some important functions)
- Appendix: Iterators
- STL - Algorithms + Set + Map
- sort
- upper_bound
- lower_bound
- set(Basic idea, some important functions of set container)
- map(Basic idea, some important functions of map container)
- Structs - Using them as comparators
- Basic Idea of comparators
- Implementation in C++.
Algorithms and data structures - 2
- Dynamic Programming(DP)
- Concept of Subproblem of a problem and overlapping subproblems.
- DP as Recursion+Memoization
- Linear DPs
- Multi-dimensional DP
- Graphs and Graph Algorithms
- Modelling problems as graphs
- Types of Graphs
- Undirected Graphs
- Directed Graphs
- Representation of graphs
- Adjacency Matrix
- Adjacency list
- Depth First Search(Algorithm, Code, Visualization)
- Breadth First Search(Algorithm, Code, Visualization)
- (Optional) Shortest Path Algorithms(Algorithms, Codes, Visualizations)
- Sieves
- Sieve of Eratosthenes