CS 91.404 (Section 201)

Analysis of Algorithms

Fall, 2008


General Information

Level: Advanced Undergraduate
Category: Required for Computer Science Majors
Credits: 3
Location: OS 401
Time: Tu, Th 1:00-2:15

Acknowledgement: Courtesy of Prof. Karen Daniels. Many of the materials used in this course are adapted from Prof. Daniels's previous course.
Instructor: Prof. Benyuan Liu
Email: bliu@cs.uml.edu
Office Hours: Thursday 3:00-4:30pm, Friday 10:30-12:00pm,
or by appointment; in Olsen Hall 210
TA: Anwar Saipulla
Email: asaipull@cs.uml.edu
Office Hour: Wed 1:30 - 2:30 pm, in OS 219A (student lounge)



General Description:

This is a required course for Computer Science majors. It builds on the introduction to data types and data structures that students receive in CSII (91.102).

Learning Outcomes: in Word format.

In this course (91.404) we distinguish between an abstract data type (such as a list, stack, queue, tree, or hash table) and a data structure that represents how the abstract data type is represented and stored in the computer's memory. We learn about algorithms for manipulating information in a variety of fundamental abstract data types and data structures.

Information tasks such as searching, retrieving, inserting, updating, sorting and deleting arise frequently in Computer Science problems that are central to many computer applications. We focus on algorithms to correctly and efficiently accomplish these types of core tasks.

What do we mean by "efficiently?" We measure efficiency in terms of speed and space (storage) usage. We use techniques from theoretical computer science and discrete mathematics for our analyses.

Why does efficiency matter in computing environments in which processors are very fast and storage space is abundant? Here are two reasons that have significant practical impact:
- The amount of information continues to explode quickly, and for large amounts of information the differences in speed and storage requirements across different algorithm/data structure combinations can be huge.
- Some types of problems are inherently difficult and we cannot expect to solve them as efficiently as we can solve easier ones. It is important to learn to recognize such problems and be familiar with ways to tackle them.

The algorithms we study represent a variety of important Computer Science problem-solving strategies, or algorithmic paradigms. We examine major characteristics of several algorithmic paradigms.


Topics: Algorithms, Data Structures, Time and Space Complexity Analysis

Prerequisites: Computing III (91.201), Discrete Math I & II (92.321, 92.322), Statistics for Scientists and Engineers (92.386), Calculus I-II (92.131-231).

Required Textbook :

Grading:  The course will have 2 exams: one midterm exam and one final exam (see syllabus for expected dates).  Each exam is cumulative and open book.  Grades will be calculated approximately as follows:

Homework 30%
Midterm Exam 30%
Final Exam 30%
Discretionary 10%(attendance, participation)

Homework: This is primarily a "paper-and-pencil" course whose homework and exams involve writing algorithms using "pseudo-code", establishing their correctness and analyzing their efficiency. Although programming will not be required, programs will be provided whenever possible to illustrate and reinforce concepts. Students are also encouraged to implement their algorithms.