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 |
TOMP 306 |
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 |
|
Shyama Arunachalam |
By Appointment |
Zoom |
Sebastian Driskell |
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 13 | Course Introduction
| ||
Jan 15 | ||||
2 | Jan 20 | Sorting
| ||
Jan 22 | ||||
3 | Jan 27 | Ordered Search
| ||
Jan 29 | ||||
4 | Feb 03 | Equality Search, Hashing, Trie
| ||
Feb 05 | ||||
5 | Feb 10 | Pattern Search
| ||
Feb 12 | ||||
6 | Feb 17 | Graphs, part I
| ||
Feb 19 | ||||
7 | Feb 24 | Graphs, part II
| ||
Feb 26 | ||||
8 | Mar 03 | Performance testing
| ||
Mar 05 | ||||
Mar 11 | Spring Break | |||
Mar 13 | ||||
9 | Mar 17 | Shortest Paths and Dynamic Programming
| ||
Mar 19 | ||||
10 | Mar 24 | Problems, solution spaces and local search
| ||
Mar 26 | ||||
11 | Mar 31 | Problem complexity and NP-Completeness
| ||
Apr 02 | ||||
12 | Apr 07 | Bio-inspired problems and algorithms
| ||
Apr 09 | ||||
13 | Apr 14 | The Discrete Fourier Transform
| ||
Apr 16 | ||||
14 | Apr 21 | Probability and Algorithms
| ||
Apr 23 |