CSCI 3104: Algorithms
In this course, students will
- become familiar with ``standard'' algorithms for abstract problem solving;
- learn how to mathematically prove properties of algorithms, including their correctness;
- analyze the time and space complexity of algorithms;
- understand the relative merits or demerits of different algorithms in practice;
- adapt and combine algorithms to solve problems that may arise in practice; and,
- learn common strategies in the design of new algorithms for emerging applications.
Roughly, we will cover the following topics (some of them may be skipped depending on the time available).
- Introduction to Algorithms: Complexity analysis
- Divide and Conquer Algorithms
- Sorting and Order Statistics
- Greedy Algorithms
- Hash functions and Probabilistic Analysis
- Dynamic Programming
- Graph Algorithms: Search, Minimum Spanning Trees, Shortest Paths, Network Flows
- Matching algorithms
- Basic Computational Complexity: P, NP, reductions and open problems
Surveys data management, including file systems, database management systems design, physical data organizations, data models, query languages, concurrency, and database protection. Requisites: Requires prerequisite course of CSCI 3104 (minimum grade C-).
- Teacher: Sreesha Nath
Software Engineering Methods and Tools will introduce you to methods and tools required to engineer a software from the ground up. It will provide you with a set of state-of-the-art skills that will not only help you do your work in your other programming classes but will also give you a very useful vocabulary to use on job applications and during interviews. You will learn the tools and practices for software development with a strong focus on best practices used in industry and professional development, such as agile methodologies, pair-programming and test-driven design. You will be exposed to a variety of tools of each tool class as well as how to choose the best tool for use in a specific situation. You will apply what you learn as in the context of a small group 5-week long project.