# Fundamental Algorithms

## Recitation: Th 5:10-6:00, Room 109

Please note that the recitation is in a different room
Office Hours: Th 6-7, Th 2-3 and by appointment
Phone: 998-3122

This course covers the design and analysis of combinatorial algorithms. The curriculum is concept-based and emphasizes the art of problem-solving. The class features weekly exercises designed to strengthen conceptual understanding and problem solving skills. Students are presumed to have adequate programming skills and to have a solid understanding of basic data structures and their implementation in the programming languages of their choice. Although some mathematical sophistication is very helpful for this course, the necessary mathematics is contained within the curriculum.

In some recitation sessions, sophisticated problems will be solved by the class in closely supervised individual, collaborative, and group efforts. Other recitation sessions will be used for additional lecture.

# Course Topics

Recursion
Depth-First-Search
The Greedy Method
Divide-and-Conquer
Dynamic Programming
Sorting- and Selection-based processing
Randomization
Problem Transformations

## The Analysis of Algorithmic Performance

Asymptotic Growth
Recurrence Equations
The Recursion Tree Solution Method
Probabilistic Analysis
Structural Analysis
Lower Bounds

## Managing Data for Efficient Processing

Lists, Stacks, Queues, Priority Queues, Trees and Graphs
Tarjan's Categorization of Data Structures
Search Trees and their Enhancement
Union-Find
Sorting, Selection, and Hashing

## Selected Representative Algorithms/problems

Topological Sort
Connected Components
Biconnected Components and Strong Components
Representative styles of Dynamic Programming and their applications
Standard Sorting and Selection Algorithms
Selected topics in Hashing
Minimum Spanning Trees
Shortest Path Problems

## An approximate schedule of topics can be found here.

It will change as the lectures and organization are adapted to fit the current time constraints.

## Homework

• There will be approximately 11 written homework assignments that contain 10 to 15 multi-part exercises. Perhaps one-third to one-half of these problems will be extremely challenging. That is, the necessary concepts will have already been taught, but significant thought will be needed to figure out how to apply these techniques to solve the more challenging exercises.
• Students are not required to solve even the majority of the difficult problems, but they are expected to write down what ideas/methods they used, and where their solution method seems to have broken down.
• Students are also expected to compare their own answers with the solution handouts to identify the concepts and techniques were overlooked. In particular, students are required to keep a copy of every homework assignment, and submit a self-grading of that copy in the first class day that follows the due date for the assignment.
• Because more than a third of the course is embedded in the exercises, students are expected to study the answers as a vehicle for mastering the material.