Course Title: Fundamentals of Algorithms
Module 1: Introduction to Algorithms
Understanding Algorithms
Definition and importance of algorithms
Characteristics of a good algorithm
Historical context and evolution of algorithms
Algorithm Design and Analysis
Steps in designing an algorithm
Analyzing algorithm efficiency
Big O notation, time complexity, and space complexity
Basic Data Structures
Arrays and linked lists
Stacks and queues
Trees and graphs
Lab Activities
Implementing basic algorithms (e.g., searching, sorting)
Analyzing the time and space complexity of simple algorithms
Exploring and manipulating basic data structures
Module 2: Sorting and Searching Algorithms
Sorting Algorithms
Bubble sort, insertion sort, selection sort
Merge sort, quick sort, heap sort
Comparison of sorting algorithms
Searching Algorithms
Linear search and binary search
Depth-first search (DFS) and breadth-first search (BFS)
Search efficiency in different data structures
Advanced Sorting and Searching
Radix sort, bucket sort
Interpolation search, exponential search
Practical applications and optimization
Lab Activities
Implementing and comparing sorting algorithms
Implementing and comparing searching algorithms
Analyzing and optimizing sorting and searching techniques
Module 3: Recursive Algorithms
Introduction to Recursion
Definition and principles of recursion
Base case and recursive case
Pros and cons of recursive algorithms
Classic Recursive Algorithms
Factorial and Fibonacci sequence
Tower of Hanoi
Recursive tree traversal (pre-order, in-order, post-order)
Recursion vs. Iteration
When to use recursion vs. iteration
Converting recursive algorithms to iterative
Tail recursion and optimization
Lab Activities
Implementing classic recursive algorithms
Converting recursive algorithms to iterative
Analyzing the performance of recursive algorithms
Module 4: Divide and Conquer
Principles of Divide and Conquer
Concept and methodology
Advantages and applications
Analyzing divide and conquer algorithms
Classic Divide and Conquer Algorithms
Merge sort and quick sort
Binary search
Closest pair of points
Advanced Applications
Strassen’s matrix multiplication
Fast Fourier Transform (FFT)
Karatsuba algorithm for fast multiplication
Lab Activities
Implementing divide and conquer algorithms
Analyzing and optimizing merge sort and quick sort
Exploring advanced divide and conquer applications
Module 5: Dynamic Programming
Introduction to Dynamic Programming
Principles and techniques
Memoization vs. tabulation
When to use dynamic programming
Classic Dynamic Programming Problems
Fibonacci sequence and factorial
Knapsack problem
Longest common subsequence (LCS)
Advanced Dynamic Programming
Matrix chain multiplication
Shortest path problems (Floyd-Warshall, Bellman-Ford)
Optimal binary search trees
Lab Activities
Implementing basic dynamic programming algorithms
Solving classic dynamic programming problems
Exploring advanced dynamic programming techniques
Module 6: Greedy Algorithms
Understanding Greedy Algorithms
Principles and methodology
Characteristics of greedy algorithms
When to use greedy algorithms
Classic Greedy Algorithms
Activity selection problem
Fractional knapsack problem
Huffman coding
Advanced Greedy Techniques
Prim’s and Kruskal’s algorithms for minimum spanning tree
Dijkstra’s algorithm for shortest path
Job sequencing problem
Lab Activities
Implementing basic greedy algorithms
Solving classic greedy problems
Analyzing the performance and correctness of greedy algorithms
Module 7: Graph Algorithms
Introduction to Graph Theory
Graph terminology and representation
Types of graphs (directed, undirected, weighted, unweighted)
Applications of graph algorithms
Classic Graph Algorithms
Depth-first search (DFS) and breadth-first search (BFS)
Topological sorting
Shortest path algorithms (Dijkstra, Bellman-Ford)
Advanced Graph Algorithms
Minimum spanning tree (Prim, Kruskal)
Network flow (Ford-Fulkerson)
Graph coloring and traversal
Lab Activities
Implementing graph traversal algorithms
Solving shortest path and minimum spanning tree problems
Exploring advanced graph algorithms and applications
Module 8: Final Project and Review
Project Planning and Proposal
Choosing a topic related to algorithm design and analysis
Defining project scope and objectives
Creating a project plan and timeline
Implementation and Development
Designing and implementing the chosen algorithm(s)
Testing and debugging
Optimizing and refining the algorithm
Final Presentation and Evaluation
Preparing a project presentation
Demonstrating the algorithm and its applications
Receiving and incorporating feedback
Review and Reflection
Reflecting on the learning experience
Identifying key takeaways and skills acquired
Planning for future learning and application of algorithms
Lab Activities
Developing a project proposal and plan
Implementing and testing the final project
Preparing and delivering the final presentation
Admission Open for this course
Contact Number: 03307615544