CPSC 327 | Data Structures and Algorithms | Spring 2023 |
On this page:
Course Description and Objectives |
At the heart of computer science is the development of efficient algorithms for solving problems. This course focuses on the design and analysis of data structures and algorithms, continuing the study of data structures begun in CPSC 225 with a focus on more advanced structures (hashtables, heaps, balanced binary trees, graphs, and building your own data structure for a particular application), common algorithmic approaches (iterative, recursive, divide-and-conquer, greedy, backtracking, branch-and-bound, dynamic programming), and covering topics such as correctness, efficiency, complexity, and NP-completeness. The course has three main goals (and several subgoals):
By the end of the course, the successful student should be able to:
|
---|---|
Prerequisites |
CPSC 225 is required. CPSC 229 is helpful, but not essential. |
Assignments and Evaluation |
Readings and Warmups: Readings are the first introduction for most material and warmups are geared to help you self-assess what concepts you understand from the reading and identify what needs further attention. Class meetings will address questions and build on this foundational material, and are more effective if they can be used to fill in the gaps and answer questions about things you have already started to think about. Readings and warmups are to be completed for the class period where they are listed on the schedule page - note that warmups are due the night before class. Homework and Programming Assignments: Hands-on practice is essential for learning and mastery, and homework problems provide an opportunity to tackle problems for yourself. To encourage timely engagement with the material and to support the process of skill-building, homeworks will typically be in the form of small chunks due frequently and can be revised and resubmitted for credit after they have been handed back. Most homework will involve written solutions, but there will also be a few programming tasks. Exams: Exams assess what you, individually, have mastered. There will be three midterm exams covering material from the first half of the course, and a final exam covering the material from the second half of the course. All will be take-home exams, and will emphasize applying concepts rather than simple recall. The dates of the exams are on the schedule page. More details about each exam will be announced prior to the exam. Grades: Final grades in this course will be computed as follows:
If you are concerned about your grade, you are strongly encouraged to come to office hours to get help with any material you may be struggling with and to take advantage of the revise and resubmit option for homework problems. Staying on top of things and seeking help as soon as possible when you need it is the best route to success. Extra Credit: There may be some opportunities to earn extra credit on homeworks, programming assignments, and exams by going above and beyond the requirements of the assignment and/or tackling some harder problems. You are encouraged to take advantage of these opportunities to challenge yourself! |
Time Expectations |
You are expected to attend all scheduled class meetings (3 hours per week) and should expect to spend approximately 8 hours per week (*) on average on additional work (readings and warmups, homework and programming assignments, exams, studying) outside of class. In addition, you are expected to attend 5 hours of problem sessions over the course of the semester. If you need additional help or can't make it to the scheduled problem sessions, this expectation can also be satisfied by coming to office hours. (5 hours = e.g. one problem session every three weeks or a 20-minute office hours visit every week) (*) The assigned work is intended to take about this much time, though your experience may vary. However, if you routinely spend much less time, you may not be successfully mastering the material, and if you routinely spend substantially more time, especially if you feel like you are spinning your wheels and not making progress, you should come to office hours for help. |
Required Materials |
TextbookThe Algorithm Design Manual (3rd ed) As of 1/21/23, all three formats are on sale for 50% off through the publisher: https://link.springer.com/book/10.1007/978-3-030-54256-6 This is both a textbook for learning how to design algorithms and data structures, and a useful reference with an extensive catalog of algorithmic problems that arise in practice. I hope that you will enjoy reading the book during the course and that you will want to hang on to the book afterwards to use in your future algorithmic endeavors. If you are buying the book on Amazon or elsewhere, note that the third edition has a very similar-looking cover to the second edition. Look for "Third Edition" on the cover and/or check the ISBN to make sure you are getting the right version. Additional material will be handed out or posted on the course webpage. SoftwareThere will be several programming assignments which involve programming in Java. The tools that you need (Java 17, JavaFX, Eclipse) are available on the lab computers in Rosenberg 009 (reboot them to Linux) and Lansing 310, or you can install them on your own computer. Information on how to set up your own computer will be provided in advance of the first programming assignment. |