16.01.2015 Views

CS2013-final-report

CS2013-final-report

CS2013-final-report

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

COS 226: Algorithms and Data Structures, Princeton University<br />

Princeton, NJ<br />

Robert Sedgewick and Kevin Wayne<br />

rs@cs.princeton.edu wayne@cs.princeton.edu<br />

http://www.cs.princeton.edu/courses/archive/spring12/cos226/info.php<br />

http://algs4.cs.princeton.edu<br />

Knowledge Areas that contain topics and learning outcomes covered in the course<br />

Knowledge Area<br />

Total Hours of Coverage<br />

Algorithms and Complexity (AL) 29<br />

Software Development Fundamentals (SDF) 3<br />

Programming Languages (PL) 1<br />

Where does the course fit in your curriculum<br />

This course introduces fundamental algorithms in the context of significant applications in science, engineering,<br />

and commerce. It has evolved from a traditional “second course for CS majors” to a course that is taken by over<br />

one-third of all Princeton students. The prerequisite is a one-semester course in programming, preferably in Java<br />

and preferably at the college level. Our students nearly all fulfill the prerequisite with our introductory course. This<br />

course is a prerequisite for all later courses in computer science, but is taken by many students in other fields of<br />

science and engineering (only about one-quarter of the students in the course are majors).<br />

What is covered in the course<br />

Classical algorithms and data structures, with an emphasis on implementing them in modern programming<br />

environments, and using them to solve real-world problems. Particular emphasis is given to algorithms for sorting,<br />

searching, string processing, and graph algorithms. Fundamental algorithms in a number of other areas are covered<br />

as well, including geometric algorithms and some algorithms from operations research. The course concentrates on<br />

developing implementations, understanding their performance characteristics, and estimating their potential<br />

effectiveness in applications.<br />

• Analysis of algorithms, with an emphasis on using the scientific method to validate hypotheses about<br />

algorithm performance.<br />

• Data types, APIs, encapsulation.<br />

• Linked data structures, resizing arrays, and implementations of container types such as stacks and queues.<br />

• Sorting algorithms, including insertion sort, selection sort, shellsort, mergesort, randomized quicksort,<br />

heapsort.<br />

• Priority queue data types and implementations, including binary heaps.<br />

• Symbol table data types and implementations (searching algorithms), including binary search trees, redblack<br />

trees, and hash tables.<br />

• Geometric algorithms (searching in point sets and intersection).<br />

• Graph algorithms (breadth-first search, depth-first search, MST, shortest paths, topological sort, strong<br />

components, maxflow)<br />

• Tries, string sorting, substring search, regular expression pattern matching.<br />

• Data compression (Huffman, LZW).<br />

• Reductions, combinatorial search, P vs. NP, and NP-completeness.<br />

- 237 -

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!