Data Structures and Algorithms
Course Description
Summary
How do we organize data to solve complex problems efficiently? This course studies the fundamental structures and algorithms that form the cornerstone of computational problem-solving. Building upon the programming foundations established in CS1, we will explore how algorithmic thinking and sophisticated data organization enables us to tackle increasingly challenging computational problems.
In this course, you will analyze algorithm efficiency through complexity analysis, gaining crucial skills for optimizing solutions. You will implement and evaluate classic data structures such as arrays, lists, hash tables, trees, graphs, and stacks, and understand their strengths and appropriate applications. Through exercises, you will develop the ability to select and apply the right algorithmic approaches to diverse scenarios.
This course emphasizes both theoretical understanding and practical implementation. You will strengthen your programming abilities while developing a deeper appreciation for algorithmic elegance and efficiency. The analytical skills gained here are highly transferable, valued across disciplines, and essential for advanced study in computer science.
Topics include: algorithmic complexity, sorting algorithms, recursion, hash tables, searching algorithms, greedy algorithms, and dynamic programming
Evaluation will be based on active engagement, a midterm, and a comprehensive final examination.
Learning Outcomes
- Use complexity analysis to evaluate and compare different algorithmic solutions.
- Implement fundamental data structures including arrays, lists, hash tables, trees, graphs, and stacks to organize and manipulate data efficiently.
- Apply appropriate data structures and algorithms to solve computational problems based on their specific requirements and constraints.
- Design solutions using algorithmic paradigms such as recursion, greedy algorithms, and dynamic programming.
- Evaluate the trade-offs between different data structures and algorithms through theoretical analysis and practical implementation.