CSCI 3104: Algorithms

Course Objectives

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.

Topics Covered

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-).

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.