CS 3212: Algorithms

Course overview, policies



About
Announcements
Modules
Coursework
FAQ


Java API

  • Instructor: Prof. Rahul Simha

  • Time/place: Spring 2026
    • Class: Tuesdays/Thursdays 4.40 - 6.00pm, SEH 1300/1400
    • Lab, section 30: Wednesdays, 3.30 - 5.30pm, Tompkins 405.

  • Office Hours: (2nd week onwards)
    • Mondays 4.00-5.00pm online.
    Zoom link will posted in Blackboard.
    Note: If nobody shows up in the first 10 minutes, the online session will be terminated.

  • TAs/LAs:
    • Adarsh Singh (grading)
    • Jie Hou (grading and office hours)
    • Derek Chen (UTA, labs, office hours)
    • Han Chen (LA, labs, office hours)

  • TA/LA Office Hours: (TBD)

  • Prerequisites: CS-1311 and CS 2113 (or equivalents) - see undergraduate curriculum. Working knowledge of Java.

  • What to purchase before class starts:
    • One blue 3-ring binder for narrative notes (described below).
    • One any-other-color 3-ring binder for module content.

  • 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. 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.

  • Course description: In this course, students will learn core concepts in algorithms, data structures, and problem-solving techniques. Students will be exposed to classic problems in computer science (such as searching and sorting), classic data structures (hashing, heaps) and classic optimization problems (such as the Traveling Salesman Problem). Students will be encouraged to write clean, efficient code for their assignments. The course will be conducted lab-style with a mix of lecture, lab assignments and projects.

  • Learning outcomes: By the end of this course, students will:
    • 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.

  • Programming load: The course will be fairly programming-intensive, comparable with CS-2113 or CS-3411. If you are taking TWO OTHER programming-intensive courses, you could be in for a rough semester. Stop by office hours and discuss the issue with me.

  • Java: The course will make strong use of Java, especially in the assignments.

  • Coursework and grading: (Approximate, subject to some change)
    Points Submission / assessment
    1400 Attendance and participation (class and lab)
    1400 Narrative notes (submit in BB)
    1200 4 In-class quizzes CQ1, CQ2, CQ3, CQ4 (open narrative notes)
    4000 2 Exams (closed-everything)
    1200 5 Homeworks HW1, HW2,...,HW5 (submit zip files in BB)
    1500 3 Assignments A1, A2, A3 (submit zip files in BB)
    3000 6 In-lab homework/assignment quizzes LQ1, LQ2, etc (closed-everything)
    300 Commitment points (see below)
    • The weightage may change depending on how the course evolves.
    • There are NO absolute ranges for letter grades; the overall score at the end is scaled and there will be curving.
    • To pass the class, you have to at least pass the quizzes (as a total score) and the exams (as a total exam score), on top of getting reasonable scores in the homeworks and assignments. The only way to do well on the quizzes and exams is to invest in doing the assigned work.
    • Important: Please use the above points and ignore the default points inserted by BB in BB.

  • Device policy:
    • The use of laptops, phones and other electronic devices is prohibited in both the class and the lab, unless otherwise specified.
    • Devices must be completely put away (not seen) in class and lab. Put them away before entering class or lab.
    • The only exception is during the optional "office hours" part of the lab where you can seek help with programming. For this part, you can open your laptop but not any other device.
    • If permission to use devices is given, it will be only for a specific purpose, and the devices must be put away after use.
    • Non-compliance will result in penalties that will affect grades.

  • Attendance and participation:
    • You are expected to attend class and lab, strictly adhering to the device policy above. Attendance will not count otherwise.
    • Participation is expected, via fully-engaged attention and contribution to in-class activities.
    • For attendance to count, you need to bring along the printed course material (which will be given to you each week).

  • Lab:
    • Attendance is mandatory in lab, and there will be lab quizzes as well.
    • The labs will serve multiple purposes:
      • Covering some material we won't get to in class.
      • New examples to help solidify understanding.
      • Help with homeworks and assignments.
      • Lab quizzes (both pen-and-paper, and programming).
    • Long and short labs. When a lab quiz (LQ1, LQ2, etc) is scheduled, the lab will use the full time scheduled. On other days, if everything is going well, we'll have the latter part optional (for those who seek individual help).

  • Narrative notes:
    • One of the best ways to learn for the long term is to make good notes, by hand. You will make handwritten notes in a notebook, scan these periodically and upload them to BB.
    • Why do this? The most common kind is what occurs in the classroom: short notes to copy down what occurs in class, with the aim of substituting for perfect memory. But the better kind is handwritten narrative note-taking in which you build an entire narrative, a story, about the material you are studying. By telling yourself the full story, in a kind of dear-diary format, you have the best shot at "bringing it all together" and retaining for the long-term.
    • Important: You can bring these (and only these) notes to the in-class quizzes. So, it's worth doing these well.
    • Notebook organization:
      • Please use a blue 3-ring binder for your notebook. The 3-ring binder should be just for this course (no other courses in it).
      • Start each module on a fresh sheet.
      • You will scan your notes into PDF for each module (one PDF per module) and upload to BB.

  • In-class quizzes:
    • These will be short and will be held in class, towards the end. You can refer to your own narrative notes (in the 3-ring binder) for each quiz.
    • The best way to prepare is to make good notes and study ahead of time.
    • We will drop the lowest quiz score.
    • If you miss one quiz, then that quiz score is the dropped score. There will be no make-up quizzes.

  • Exams:
    • These will be closed-everything and slightly longer than the quizzes.
    • There will be no make-up exams.

  • Homeworks:
    • These will be one-week-due and will feature both pen-and-paper problems and programming problems.
    • Create a folder for every such homework (called hw1, hw2 etc.)
    • The programming parts should be included in the folder.
    • The pen-and-paper problems should be handwritten, scanned into PDF, and included in the homework folder.
    • Make a zip file of the folder and upload to BB.
    • Important: Only a randomly selected subset of problems will be graded. It is in your best interest to do all of the problems.

  • Assignments:
    • These will be due in two weeks, but otherwise, they are similar to the homeworks above.

  • In-lab (homework and assignment) quizzes:
    • These quizzes will test understanding of the homeworks and assignments.
    • As with the in-class quizzes, we will drop the lowest score.
    • There will be no make-up in-lab quizzes.

  • Module exercises:
    • Each module has small exercises called in-class exercises.
    • We will be doing many of these in class but will not get to all of them.
    • You are well-advised to try and do them because they help you understand the material and prepare you for quizzes and exams.
    • A few of these will be required for submission; these will be included in some of the homeworks and assignments.

  • Submission:

  • Late work policy:
    • Every student will get to use four extensions in the semester:
      • A single one-time-use 1-day extension.
      • A single one-time-use 2-day extension.
      • A single one-time-use 3-day extension.
      • A single one-time-use 6-day extension.
    • Each extension can be used only once, and the entire extension will be applied. (That is, you can't submit something three days late, and claim that you've used only part of the 6-day extension.) You do NOT need to tell us you are using an extension, we will merely apply the best fit in the order we get the submissions. You also cannot pick and choose which extension to apply.
    • Thus, a submission is considered on time if it's submitted by the deadline or if one of the extensions above are applied. Otherwise, it's late.
    • For any homework that is late inspite of extension, or if extensions are used up, no points will be awarded.
    • For any assignment that is late inspite of extension, or if extensions are used up, points will be taken off as follows: 33% for each 24-hour period after the due date/time. These points will not be pro-rated hourly. Thus, if an assignment is due 5pm Oct 19th, a submission at 5.05pm Oct 19th loses 25 percent.
    • It is best to save the 6-day extension for illness. If an illness requires more than 6 days of recovery during which doing school work is very difficult, a doctor will need to clarify that more than 6 days are needed.

  • Commitment points: Read and stick to these commitment principles. You get commitment points for effort in the following way:
    • No late extensions used.
    • Near perfect attendance in class and lab.
    • Excellent narrative notes.

  • Recovery points:
    • Drop-One. For both class and lab quizzes, we will use best N-1 of N scores.
    • Exam-Boost. If you score extremely well on the exams, we will find ways for you to recover some points lost on some homeworks or assignments.

  • Email policy: You can send email to my GW email address or to the TAs. We will answer most class email during specific times set aside during the week for this purpose - so do not expect an instantaneous response. Since this is an advanced class, you may not perform "debugging by email". That is, do not send us code snippets and ask us to identify the problem. If you want us to look at your code, you have to stop by in person during office hours and bring your laptop along. Email is typically used for clarification regarding coursework.

  • Teams and groupwork: See this page

  • Academic Integrity policy: See this page

  • If you have a disability that may effect your participation in this course and wish to discuss academic acommodations, please contact me as soon as possible.

  • Directory structure on your laptop:
    • Create a directory (folder) called cs3212 off of your home directory. All your course materials, programming assignments and in-class exercises will be inside this folder.
    • Under cs3212, create one folder for each module, such as module1, module2 ... etc. Inside module1 is where you will have your answers to the in-class exercises for Module 1.
    • You will similarly create folders for the assignments and exercises as we proceed in the course.

  • Coding standards:
    • Having completed CS-2113, you are expected to submit well-written code:
      • Include high-level documentation.
      • Comments must be substantive and must follow pseudocode where appropriate (more about this later).
      • Select readable variable names and method names.
    • Use consistent Java style:
      • Consistent indentation (preferred: two or four spaces).
      • Variable and method names start lowercase.
      • Class names start uppercase.
      • Capitalize multi-word names instead of using underscores.
    • You will learn to write efficient code in this course, but also need to pay attention to the three golden principles of coding: simplicity, clarity and generality.
    • Points may be taken off for "ugly code" even if correct and efficient.

  • Stress reduction See these guidelines.

  • If needed, see the GW emergency preparedness guide.

  • Minimum course load: In a 15-week semester, including exam week, students are expected to spend a minimum of 100 minutes of out-of-class work for every 50 minutes of direct instruction, for a minimum total of 2.5 hours a week. A 3-credit course includes 2.5 hours of direct instruction and a minimum of 5 hours of independent learning, or a minimum of 7.5 hours per week. More information about GW’s credit hour policy can be found at: provost.gwu.edu/policies-forms

  • Statement on inclusive teaching. It is my intent that students from all backgrounds and perspectives be well-served by this course, and that the diversity that the students bring to this class be viewed as a resource, strength and benefit. Your suggestions are encouraged and appreciated. Please let me know ways to improve the effectiveness of the course for you personally, or for other students or student groups.

  • Finally, note that course policies may be adjusted or modified during the course of the semester.