Cindy Brown

Tim Sheard

**Current Catalog Description**

Application of algorithms to solving a variety of problems. Factors influencing choice of algorithms for a given problem. Students will work in groups and individually to solve problems in and outside of class.

**Prerequisite by Topic**

CS 350, Algorithms and Analysis.

**Course Goals**

Know and have programmed a variety of algorithms Be able to choose an appropriate algorithm to solve a problem.

Upon the successful completion of this course students will be able to:

- Solve at least half of typical programming contest problems within three hours, working in teams. Solve at least one fourth within six hours, working alone.
- Apply a repertoire of algorithms and approaches to solving problems, in at least four distinct areas (such as combinatorics, computational geometry, cyphers, balanced tree structures).
- Develop alternate approaches to solving a problem and evaluate them for speed, space consumption, and difficulty.
- Find relevant information for solving a problem in standard references on algorithms and on the web.
- Describe an algorithm both orally and in writing.
- Do back-of-the-envelope calculations to estimate time for various algorithms that might be used to solve a problem.

**Textbook**

"Programming Challenges," by Skiena and Revilla.

**Course References**

Introduction to Algorithms, by Cormen et al, and
"Programming Pearls," second edition, by Bentley.

**Major Topics Covered in the Course**

Graph Algorithms, including various searches, spanning trees, and path algorithms. Backtracking and Dynamic Programming. Combinatorics.

**Laboratory Projects**

There will be a variety of problems presented for solution each week.

Core | Advanced | |
---|---|---|

Data Structures | 1 | 1 |

Algorithms | 1 | 1 |

Software Design | ||

Computer Organization and Architecture | ||

Concepts of Programming Languages |

**Theoretical Content**

Algorithm analysis, problem abstraction, definition of invariants.

**Problem Analysis**

Students will analyze programming problems and puzzles, and devise approaches to solving them. The class will work on problems in groups and individually.

**Solution Design**

Students will design and implement solutions to a variety of programming problems and puzzles. This will be done both in groups and individually, and with problems at a variety of challenge levels.