Course Info
Welcome to CSCI 3212.
In this course, students will engage deeply with core concepts in algorithms, data structures, and problem-solving techniques. They will tackle classic problems in computer science, such as searching, sorting, and optimization challenges like the Traveling Salesman Problem, using classic data structures like hashing and heaps. Through a mix of lectures, interactive lab assignments, and group projects, students will learn to write clean, efficient code and apply these concepts to real-world problems. Assessments will include a combination of assignments, projects, and exams. Pre-requisites include CS 1112, CS 1311 and CS 2113 (or equivalents) - see undergraduate curriculum. Working knowledge of Java. Resources will be available to support your learning journey. The course is designed to be inclusive and cater to diverse learning styles, with ample opportunity for one-on-one guidance during office hours.
Please be aware that many elements on the course website will change throughout the semester, including the course schedule.
It is your responsibility to review the course website periodically for updates.
We value any and all student feedback. Please be constructive in any comments so that we can adjust the course as best possible. This semester, we are using Blackboard to manage course grading and announcements.
Lecture Times:
Section | Days | Time | Room | Instructor |
---|---|---|---|---|
1 |
MW |
03:45 PM - 05:00 PM |
1957 E 313 |
Lab Times:
Section | Days | Time | Room | Instructor |
---|---|---|---|---|
1 |
T |
09:35 AM - 10:50 AM |
TOMP 406 |
Support Staff & Office Hours
Name | Office Hours | Location |
---|---|---|
Xiaodong Qu |
By Appointment |
|
Aditya Singh |
By Appointment |
Zoom |
Freya Rosenstein |
By Appointment |
Zoom |
Course Goals
By the end of the course, we hope that you will have developed the following skills:
-
Demonstrate understanding of algorithmic specification and pseudocode through implementation.
-
Strengthen some software development skills: writing to specs, testing and debugging.
-
Be able to implement a complex data structure.
-
Be able to implement a complex algorithm.
-
Be able to analyze the execution time of an algorithm
-
Demonstrate, through homeworks and implementations, an understanding of standard topics in algorithms: sorting, searching, trees, hashing, graph algorithms, dynamic programming, combinatorial optimization, NP-completeness, heuristic search.
Grading Policies
Textbook
The course does not need a textbook because all the needed material is available to you on this site. However, if you’d like to have one, I recommend one of the following OPTIONAL textbooks:
Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne: This comprehensive resource is available at Princeton's website. It covers a wide range of topics including fundamentals, sorting, searching, graphs, and strings. The site provides excerpts from the book, curated online videos suitable for remote instruction, Java code for the algorithms and clients in the textbook, selected exercises with solutions, and creative programming assignments.
Algorithms by Jeff Erickson: This textbook is a free electronic version of Jeff Erickson's self-published book. It is comprehensive and covers various topics in theoretical computer science. The full-color electronic version is available indefinitely on his website. It's worth noting that the book assumes knowledge of discrete math and basic data structures and algorithms.
Think Data Structures: Algorithms and Information Retrieval in Java by Allen Downey. This textbook is suitable for a CS course and is available in both PDF and HTML formats. It covers key topics commonly found in CS courses such as linked lists, stacks, queues, binary trees, graphs, searching, sorting, and complexity analysis. The book is very Java-centric and uses real Java code examples throughout. It adopts an applied approach to teaching data structures and algorithms, focusing on practical applications. The content is well-organized and clear, making it accessible for students with some background in Java programming​.
Algorithms. By S.Dasgupta, C.Papadimitriou and U.Vazirani (McGraw-Hill). This is an elegant, small-ish textbook with just the right material for a first course in algorithms. Explanations of algorithmic ideas use excellent examples and proofs are easy to follow. It is not, however, as comprehensive as the one below.
Introduction to Algorithms. T.H.Cormen, C.E.Leiserson and R.L.Rivest. (McGraw-Hill). This book covers much more material than can be handled in a single-semester course. It’s advantages are that it makes a useful desktop reference, algorithms are fleshed out in detail with examples and accurate pseudocode, and the book is up-to-date in most areas. Disadvantages: it’s bulky, and can initially be intimidating.
Foundations of Algorithms. R.Neapolitan and K.Naimpour (Jones and Bartlett). This book is a compromise between the sweeping coverage of the Cormen book and the tight, condensed Dasgupta book. The book covers some topics, such as backtracking and branch-and-bound, that are hard to find in other books. Overall, a nice book with solid coverage of topics that are well-presented.
Schedule
WEEK | DAY | ANNOUNCEMENTS | TOPIC & READING | NOTES & LABS |
1 | Jan 15 | Course Introduction
| ||
Jan 17 | ||||
2 | Jan 22 | Sorting
| ||
Jan 24 | ||||
3 | Jan 29 | Ordered Search
| ||
Jan 31 | ||||
4 | Feb 05 | Equality Search, Hashing, Trie
| ||
Feb 07 | ||||
5 | Feb 12 | Pattern Search
| ||
Feb 14 | ||||
6 | Feb 19 | Graphs, part I
| ||
Feb 21 | ||||
7 | Feb 26 | Graphs, part II
| ||
Feb 28 | ||||
8 | Mar 04 | Performance testing
| ||
Mar 06 | ||||
Mar 11 | Spring Break | |||
Mar 13 | ||||
9 | Mar 18 | Shortest Paths and Dynamic Programming
| ||
Mar 20 | ||||
10 | Mar 25 | Problems, solution spaces and local search
| ||
Mar 27 | ||||
11 | Apr 01 | Problem complexity and NP-Completeness
| ||
Apr 03 | ||||
12 | Apr 08 | Bio-inspired problems and algorithms
| ||
Apr 10 | ||||
13 | Apr 15 | The Discrete Fourier Transform
| ||
Apr 17 | ||||
14 | Apr 22 | Probability and Algorithms
| ||
Apr 24 |