Skip to main content


Welcome to CSC 301.01! The official course description for this class is:

Study of structures used to organize data and of the algorithms used to manipulate these structures. Assignments to implement data structures and to use them in computer science and other applications programs. Emphasis on mathematical principles behind the data structures.

I have no idea where that came from. It’s not at all how I think of the course. We will be considering algorithms, data structures, and abstract data types, and implementing all three. We will certainly emphasize mathematical principles.

Learning outcomes

By the time you finish this course, you should be able to

  • Employ a variety of techniques for designing algorithms, including
    • Greed
    • Divide and conquer
    • Dynamic programming / memoization
  • Analyze the asymptotic behavior of deterministic algorithms using Big-O notation.
  • Prove certain characteristics of algorithms (e.g., correctness, lower bounds, running time).
  • Describe and implement a variety of classic algorithms.
  • Describe a variety of classic ADTs.
  • Describe and implement a variety of classic data structures.

Class Format

I firmly believe that you learn by doing. While I do not expect to make this a full workshop-style course, akin to CSC 151 or CSC 161, I will do my best to regularly give you the opportunity to work together and individually on problems during class time. I am also likely to conduct many class sessions using my standard “pseudo recitation” style - I will randomly select students and ask a series of questions. You should do your best to answer those questions, but you should feel free to say “I’m not sure” or to ask me your own questions. I employ that style not only because I find that it helps model problem solving processes, but also because it exposes you to other ways of thinking about problems.

Important Notices

  • As always, I am overcommitted. I apologize in advance.
  • There are two sections of CSC 301 this semester. While we originally planned to keep the two sections synchronized, it appears that we will take somewhat different approaches to the material.

Accommodations and adjustments

Please read my policy on accommodations and adjustments and my statement on accessiblity.

Textbooks / references


Cormen, Thomas H., Leiserson, Charles E., Rivest, Ronald L., and Stein, Clifford (2009). Introduction to Algorithms, 3rd Edition. MIT Press.

A classic (and somewhat exhaustive) text on algorithms. This text is an excellent reference, but is also somewhat dense.

As a professional computer scientist, you’ll want CLRS on your bookshelf, but we’ve purchased a number of copies for the library just in case.

Rebelsky, Samuel A. (2017). The CSC 301 Course Web

The hypertext that you are currently reading. Many of these materials (particularly those under Readings and Labs are required. You should make it a point to load the page of the day at the beginning of each class to check announcements and such.

Skiena, Steven S. (2008). The Algorithm Design Manual, 2nd Edition. Springer-Verlag.

I like the Skiena book because it helps you think carefully through algorithm design and it’s not quite as overwhelming as the CLRS text. Unfortunately, Skiena does not cover all of the important data structures in depth, which is why we do not rely on it alone.

An electronic version of Skienna is available as part of a student ACM membership.

Skiena, Steven S. (n.d.). Web Site for The Algorithm Design Manual, 2nd Edition.

The Web site includes lecture slides and some audio/video material. We may experiment with some “flipped classroom” days in which you watch a video and then do problems in class.

Knuth, Donald E. (2011). The Art of Computer Programming, Volumes 1-4a. Addison-Wesley.

If you think CLRS is exhaustive, you should look at Knuth. If I were braver, I’d make this the required text for the course. These texts are dense, thorough, and classic. As you progress in CS, you’ll find yourself turning to these volumes to challenge yourself to think more carefully, more deeply, and more clearly.


My goal is for everyone taking this course to be able to demonstrate familiarity, fluency, and excellence with the course concepts. I would be very happy if you all met the goals above and received “A”s. The following weighting of individual activities will provide a basis for evaluation.

Penalty only
40% (20% each)
10% (best of average exam and final)

Some work may be graded by someone other than the instructor. However, any questions or concerns about grading should only be directed to the instructor.

The grading scale for this course will be:


You may note that there are some gaps between ranges. I reserve the right to make decisions about which direction to “round” values in those gaps. I also reserve the right to adjust this scale during the semester. You will be notified of any changes, and the scale will not change in the final two weeks of the course. You may ask me for your current grade in the class at any point; I will happily give you my best estimate based on the current scale and graded work so far, but these estimates are not guarantees of a specific final grade.


Your classmates and partners depend on your contributions to learn new material and complete the required work for this course. Don’t let them down! You are expected to arrive on time and actively participate in every class.

Because your participation is so important, I will not grant excused absences except in exceptional circumstances. I will deduct 1% from your final grade for each absence and 0.5% for each time you are late to class. However, each student is allotted a 2% “penalty buffer,” so you may miss two classes or arrive late four times with no impact on your final grade. This policy is intended to give you the flexibility to deal with brief illnesses or personal issues that require you to miss class.

If you need to miss more than two class periods for an exceptional reason (e.g. to attend an academic conference, deal with a family emergency, or due to long-term illness) please talk to me as soon as possible and we will make an alternate arrangement.

If your are sick, please do not come to class. Stay in your room, rest, and seek medical care as needed. Student Health and Counciling Services (SHACS) offers health and mental health services to students.

I expect that you will notify me as soon as possible if you will miss class (or if you missed class). Except in particularly exceptional cases, you should notify me before you miss class.


Because much of our work in this course involves collaboration and discussion, you will be evaluated on your participation. Participating in class involves:

  • being present in class (physically and mentally)
  • coming to class on time
  • coming to class prepared
  • asking questions when appropriate
  • making positive contributions to class discussion by volunteering and when called upon
  • staying on task during lab exercises, and
  • working effectively with your partner(s)

Students who regularly meet these criteria can expect to earn an A- for their participation grade. I will reward students who regularly provide significant insights or guide discussion in productive ways with a higher participation score. Students who fail to participate regularly (e.g., demonstrating a lack of preparation or involvement during lab exercises) or who participate in counterproductive ways (e.g., by dominating the conversation, making inappropriate comments, or getting off-task) can expect to earn a lower score.

Academic Honesty

Please read my policies on academic honesty and the CS department’s academic honesty policy. I expect you to sign and return the latter.