3.1 Introduction3.2 Basic Notations3.2.1 Pseudo Code3.3 Types of Algorithms3.3.1 Brute Force Algorithms3.3.2 Divide and Conquer Algorithms3.3.3 Dynamic Programming Algorithms3.3.4 Greedy Algorithms3.3.5 Branch and Bound Algorithms3.3.6 Recursive Algorithms3.3.7 Back Tracking Algorithms3.3.8 Randomized Algorithms3.3.9 Hill Climbing Algorithms3.4 Performance Analysis3.4.1 Properties of the Best Algorithms3.5 Space Complexity3.5.1 Instruction Space3.5.2 Text Section of a Program3.5.3 Data Space3.5.4 Stack Space3.5.5 Calculating the Instruction Space3.5.6 Calculating the Data Space3.5.7 Size of Data Section3.5.8 Size of Rodata Section3.5.9 Size of bss Section3.6 Apriori Analysis3.7 Asymptotic Notation3.7.1 Big oh Notation (O)3.7.2 Omega Notation (Ω)3.7.3 Theta Notation (θ)3.7.4 Little oh Notation(o)3.8 Time Complexity3.8.1 Time Complexity Analysis of Bubble Sort3.8.2 Time Complexity Analysis of Selection Sort3.9 Worst Case, Average Case and Best Case Complexity3.9.1 Worst Case3.9.2 Average Case3.9.3 Best CaseSummaryExercises