Algorithms and System Design with GenAI
Course description
This course focuses on developing the skills needed to write programs that solve problems for software projects. Students will learn to formulate solutions from problem descriptions by understanding requirements, decomposing problems into manageable pieces, and rigorously testing solutions. This course will also explore how to effectively leverage GenAI tools throughout the design and coding process. The curriculum provides instruction through lectures and in-class activities, practice through labs, and assessment through unit projects. The unit projects require students to synthesize various skills while developing larger programs. Students will learn best practices for using GenAI tools for writing larger programs. Use of any GenAI tool is acceptable. In each unit, there are additional problem sets for each unit to provide extra practice and deepen students’ understanding.
Pre-requisites: This course requires prior experience with Python and fundamental computer science concepts, including:
- Data structures fundamentals (lists, sets, dictionaries, and user-defined classes).
- Control flow (functions, loops, conditionals).
- Some familiarity with time complexity, trees, and graphs is recommended as the course moves quickly through these introductory topics.
Course Language: Python
What students will learn
- Algorithms and system design concepts, focused on problem decomposition for software projects, evaluating the efficiency of algorithms and data structures using Big O notation, and understanding the use and application of tree and graph data structures, including various graph algorithms.
- Programming skills, such as formulating solutions from problem descriptions, designing and implementing unit and integration tests, debugging and modifying complex Python code, and working with existing codebases.
- Best practices for using GenAI, including critically evaluating when and how to leverage LLMs as a problem-solving tool, developing effective prompts, assessing LLM output for accuracy and relevance, and using AI to aid in reflection and evaluation during the programming process.
Units
The total course is designed for a 15-week semester. Materials may be adapted to other schedules.
Unit 1: Problem solving and system design
Unit 1 provides a foundational understanding of problem solving and system design principles and introduces the integration of Large Language Models (LLMs) as a powerful tool for problem-solving and code generation. Students will learn how to decompose complex problems into smaller, manageable components, write effective test cases, and leverage LLMs to generate code snippets and assist in debugging. By the end of this unit, students will have a strong foundation in object-oriented programming and be able to effectively integrate LLMs into their problem-solving and coding practices.
- Module 1: Problem decomposition
- Module 2: Testing & tracing
- Module 3: Software systems
Unit 2: Analysis
Unit 2 introduces students to the critical aspects of algorithm analysis and optimization. Students explore time and space complexity, learn to evaluate different algorithms and data structures, and apply their knowledge to problems they may see on the job. Additionally, they'll continue to leverage Large Language Models (LLMs) as a valuable tool for code generation, analysis, and optimization. By the end of this unit, students will have a strong understanding of algorithm analysis and optimization, equipping them to design efficient and effective solutions to complex problems.
- Module 1: Time and Space Complexity
- Module 2: Sorting algorithms
- Module 3: Making decisions about data structures
Unit 3: Tree Data Structures
Unit 3 introduces students to the intricacies of advanced data structures, exploring linked lists, trees, and their variations. They'll learn to manipulate node references, solve recursive tree problems, and apply Big-O notation to analyze their performance. Additionally, they'll continue to leverage Large Language Models (LLMs) as a powerful tool for code generation, analysis, and problem-solving. By the end of this unit, students will have a strong understanding of advanced data structures and their applications, equipping them to design efficient and effective solutions to complex problems.
- Module 1: Node-based data structures: Trees & linked lists
- Module 2: Advanced trees: Heaps & priority queues
- Module 3: Advanced trees: Tries & quadtrees
Unit 4: Graphs
Unit 4 introduces the concept of graphs, a fundamental data structure used to represent networks and relationships. Students will explore various graph representations, traversal algorithms, and their applications. Additionally, they'll continue to leverage Large Language Models (LLMs) for code generation, analysis, and problem-solving in the context of graph algorithms. By the end of this unit, students will have a strong understanding of graphs and graph algorithms, equipping them to solve complex problems that involve networks and relationships.
- Module 1: Graph representation & breadth first search
- Module 2: BFS and DFS
- Module 3: Backtracking
- Module 4: Dijkstra’s algorithm
Related resources
Navigate the course: Algorithms and System Design with GenAI
Overview of course assets and guide to GenAI use
Introduction to Algorithms & System Design with GenAI - Navigate the course: A guide to assets and GenAI use.