-
Department Info
-
-
Admissions
-
-
Academics
-
-
-
Research
-
-
-
Main navigation | Main content
4041 is a required course for computer science and computer engineering majors. It is a useful course for other students who desire to learn some core material in computing. We expect computer science and computer engineering students to take 4041 in their junior year. 4041 builds upon material from 2011 (Discrete Structures) and 1902 (CS II), and is a prerequisite for many CSci elective courses. Upon successfully completing this course students should know many fundamental algorithms and data structures commonly used in computer science. Moreover, they should be able to use these algorithms and data structures both in programming, and in problem analysis. Also, they should be familiar with other related topics such as NP-completeness.
Rigorous analysis of algorithms and their implementation. Topics such as algorithm analysis, sorting algorithms, binary trees, heaps, priority queues, heapsort, balanced binary search trees, AVL trees, hash tables and hashing, graphs, graph traversal, single source shortest path, minimum cost spanning trees.
| WEEKS 1-2: | INTRODUCTION AND REVIEW: Elements of algorithm analysis. Review of mathematical background: proof by induction, big-O notation. Review of basic data structures: stacks, queues, linked lists. |
|---|---|
| WEEKS 3-4: | SORTING: Review of insertion sort. Analysis of mergesort and Quicksort. Lower bound results on sorting. Radix Sort and Bucket Sort. |
| WEEKS 5-6: | BINARY TREES: Review of general properties, traversals, and binary search trees. Applications such as prefix codes and Huffman's algorithm. Heaps. Priority queues. Heapsort. Balanced Binary Search trees. Red-Black Trees. Optional: AVL trees. Splay trees. |
| WEEK 7: | HASHING: Hash Tables and Hashing. |
| WEEK 8: | DISJOINT SETS: Equivalence problems and disjoint sets. |
| WEEKS 9-10: | ALGORITHM DESIGN: Greedy algorithms and Dynamic Programming |
| WEEKS 11-12: | GRAPHS: Review of definitions, traversal, topological sorting, single source shortest path, minimum cost spanning trees. Maximum flow problems. Connected components. Strong components. Biconnectivity. |
| WEEKS 13-14: | NP-COMPLETENESS: Classes P and NP, polynomial-time reductions, NP-Hardness, NP-Completeness, Proving hardness. Approximation algorithms for dealing with hardness (set-cover, vertex-cover, TSP) |
Familiarity with fundamental algorithms, and the ability to use them to analyze problems and to implement solutions, is crucial in many computer science applications.
4041 has 2011 (Discrete Structures) and 1902 (CS II) as prerequisites. In 2011 students should have become adept with tools such as various proof and analysis techniques, and have obtained an introduction to topics such as big-O notation, trees, and graphs. 4041 builds on this knowledge. Part of 4041 will be a brief review of these concepts and tools, but the course will assume that students already have some knowledge of them.
In 1902 students learn some basic data structures (e.g., queues and stacks) and algorithms (e.g., binary search), as well as Java programming. 4041 will briefly review the algorithms and data structures, but will assume that students already have some knowledge of them, as well as good Java programming skills.
Numerous elective classes have 4041 as a prerequisite. Examples include 4107/5107 (Graphics), 5115 (Human-Computer Interaction), 5403 (Computational Complexity), 5421 (Advanced Algorithms and Data Structures), 5451 (Parallel Algorithms), and 4707/5707 (Databases). In all of these classes familiarity with algorithms and data structures and analysis tools are important. For example, the parallel algorithms class requires the ability to modify algorithms to run on parallel machines, and the ability to obtain time bounds for parallel algorithms.
4 credits, 3 large class + 1 recitation hour per week. Recitation can be used for problem solving and review, or more in-depth discussion of topics and examples given in the large class. Since many students struggle with topics like analyzing algorithms, identifying what algorithms/data structures are appropriate to use in given situations, etc., the practice given in recitation will be valuable.
Introduction to Algorithms, 2nd ed., Cormen, Leiserson, Rivest, and Stein. McGraw-Hill, 2001.