Students will delve into the foundational principles of algorithmic problem-solving and computational efficiency. The course explores a range of algorithms, from sorting and searching to graph traversal and dynamic programming while emphasizing analytical techniques for evaluating their time and space complexities. Students will gain hands-on experience designing, implementing, and critically assessing algorithms for various problems. The course introduces students to advanced topics such as NP-completeness and randomized algorithms using theoretical and practical approaches. Ideal for computer science majors and professionals interested in enhancing their programming skills, this course equips students with the computational thinking and analytical capabilities essential for solving complex problems in diverse domains.