# Csci 2200: Introduction to Algorithms (Fall'14)

Lecture: Tu, Thu 10-11:25, Searles 126 | Lab: Wed 2:30 - 3:55, Searles 126

Professor: Laura Toma
Office: Searles 219
Contact: ltoma at bowdoin dot edu, (207) - 725 - 3569

Prerequisites: csci 101 (Intro to CS) and csci 2101 (Data Structures). Generally speaking, a good mathematical background and good QR skills are not required, but are helpful.

Textbook (required): Cormen, Leiserson, Rivest and Stein, Introduction to Algorithms, 3rd Edition, McGraw Hill, New York, 1990. (bugs).

Class webpage: http://www.bowdoin.edu/~ltoma/teaching/cs231/fall14/. Note that this is a link from my personal website at Bowdoin. This site will contain all class-related material along the semester. The class does not have a Blackboard site (I believe class information and materials shoud be public, not hidden behind logins).

Schedule: For useful links and detailed class schedule, check Syllabus.

## Course overview

This course is an introduction to the design and analysis of algorithms. We talk about the mathematical model for analysing the efficiency of algorithms and introduce asymptotic notation and recurrence relations. We discuss fundamental data structures such as search trees and augmented search trees, priority queues, skip lists and union-find data structures. We introduce major algorithmic problems such as searching, sorting and selection, matrix multiplication, optimization, graph problems, networks, string matching and NP-completeness. We discuss a variety of solutions to these problems, while illustrating techniques such as divide-and-conquer, dynamic programming and greedy. The class is theoretical and involves no programming.

Course goals:

• To be able to analyze the asymptotic performance of algorithms using big-oh and big-theta notation
• To be able to compare multiple algorithms for a problem and predict performance
• To be able to argue informally that an algorithm is correct
• To be familiar with the fundamental algorithms and data structures
• To be familiar with the major design paradigms
• To be able to apply these techniques to new problems
• To get an appreciation of algorithms and an understanding of their importance and impact in Computer Science and beyond
• To improve problem solving skills and power of abstraction
• To develop a database of algorithms and techniques which you'll use as building blocks to solve new problems

## Office hours, TAs and study groups

Office hours (Toma): Tu, Th 2:30-4pm

For quick questions you can drop by any time the door is open. If you cannot come during these times, send me an email to make an appointment. For specific questions on the assigments, I encourage you to talk to the TAs first and attend at least one of the study groups. They hold study groups for YOU!

TAs: Andrew Daniels, Anthony Todesco

Study groups:

• Sundays 8-10pm (Anthony), Tuesdays 8-10pm (Andrew) in 224

## Labs

The lab time is dedicated to problem sets. A lab will usually contain a set of problems do be done in the lab, and a problem set that becomes the homework assignment for the next week. The course relies heavily on group work and peer instruction, so it is crucial that you attend all classes and all labs.

## Homeworks, Exams and Grading policy

Homework: The weekly lab will contain some problems to be solved in the lab, and a set that constitues the homework for the subsequent week. The homeworks will generally be due a week later (unless specified otherwise). Late assignments are not accepted (except in case of medical reasons).

Exams: There will be two exams, one half-way through the semester (precise date TBD), and the second one during the final exam period. The exams will be take-home, open book and open notes, and non-cumulative.

Homework collaboration policy: You are encouraged to work on problems in a group. You will find that you will gain a better understanding of the material by discussing the problems with your partners. However, you must write up the solutions individually. Limit your collaborators to three or less, and list the names of the collaborators on the homework.

• Homework assignments (40%).
• 2 exams (2 x 30 = 60%).
• Class participation (5%)

## Topics

The following general topics will be covered, which correspond to chapters in your textbook and will be studied approximately in the same order as they appear in the textbook. For a precise schedule, check the syllabus.
• Mathematical foundation (growth of functions, summations, recurrences, induction)
• Sorting algorithms (insertion sort, selection sort, mergesort, quicksort, heapsort, sorting lower bounds, bucket sort, radix sort)
• Searching and data structures (binary search trees, red-black trees, augmented search trees, skip lists)
• Priority queues (binary heap)
• Selection
• Paradigms (divide-and-conquer, greedy, dynamic programming)
• Graph Algorithms (traversal, minimum spanning trees, shortest paths)
• Network algorithms (network flow)
• String matching algorithms
• NP-completeness