CSC 310: Algorithms and Complexity
Analysis
Module 1: Introduction to Algorithms
1.1 What is an Algorithm?
1.2 Characteristics of a Good Algorithm
1.3 Algorithm Specification and Pseudocode
1.4 Basic Operations and Control Structures
1.5 Introduction to Algorithm Design Techniques
Module 2: Mathematical Foundations
2.1 Asymptotic Notations
2.2 Mathematical Induction
2.3 Summations and Recurrences
2.4 Growth of Functions and Comparison
2.5 Proof Techniques in Complexity Analysis
Module 3: Algorithm Design Techniques
3.1 Divide and Conquer
3.2 Greedy Algorithms
3.3 Dynamic Programming
3.4 Backtracking
3.5 Branch and Bound
Module 4: Data Structures in Algorithm Analysis
4.1 Arrays and Linked Lists
4.2 Stacks and Queues
4.3 Trees and Binary Search Trees (BST)
4.4 Heaps and Priority Queues
4.5 Graphs: Representations and Basic Operations
Module 5: Sorting and Searching Algorithms
5.1 Bubble Sort, Selection Sort, and Insertion Sort
5.2 Merge Sort and Quick Sort
5.3 Heap Sort
5.4 Binary Search
5.5 Counting Sort and Radix Sort
Module 6: Graph Algorithms
6.1 Graph Traversal: BFS and DFS
6.2 Minimum Spanning Trees (Prim’s and Kruskal’s Algorithms)
6.3 Shortest Path Algorithms (Dijkstra’s and Floyd-Warshall)
6.4 Topological Sorting
6.5 Network Flow (Ford-Fulkerson Algorithm)
Module 7: Complexity Theory
7.1 Time and Space Complexity
7.2 Complexity Classes: P, NP, NP-Complete, NP-Hard
7.3 Reductions and Cook-Levin Theorem
7.4 Introduction to Approximation Algorithms
7.5 Lower Bound Theory
Module 8: Case Studies and Applications
8.1 Real-life Applications of Algorithms
8.2 Algorithmic Problem Solving Strategies
8.3 Performance Analysis of Selected Algorithms
8.4 Ethical Considerations in Algorithm Design
8.5 Open Problems in Algorithms and Complexity