CS 245 Syllabus:

Professor: Chris Brooks
Office: Harney 541
Phone: 422-5221
email: cbrooks@cs.usfca.edu
Office Hours: MWF 10:45-12:00 or by appointment
TA: Aiki Matsushita (amatsush@cs.usfca.edu)
TA Office Hours: MW 2-3 or by appointment

Time: MWF 9:30-10:35

Place: HR 235

Course Objectives:

The purpose of this course is to teach you about two related topics. The first is the basic data structures and algorithms that you will use in your computing life. The second is to teach you the mathematical tools necessary to understand, evaluate, and compare these structures and algorithms. As a result, the class will be a mixture of theory and practical implementation; there's something for everyone.

In particular, the topics we'll cover include:


CS 112 or equivalent. Discrete Math.

Email list:

You can sign up for the course email list here . You must do this with an address that you check at least once a day. You'll find that I'm big on using email and the web to communicate with you.


Grades will be assigned based on a combination of homeworks, projects, midterms, quizzes, and in-class participation. More specifically:

Here's how the course will be broken down:
25% homeworks
30% midterms/final
30% projects
10% quizzes
5% class participation (this includes both attendance and taking part in class discussion.)

Attendance: Attendance is mandatory. That includes showing up on time at the start of class. If you need to miss a class for a valid reason, you need to talk with me IN ADVANCE. Lack of attendance will lead to a drop in your grade, or your being dropped from the class altogether.

Text: Clifford A. Shaffer A Practical Introduction to Data Structures and Algorithm Analysis, Java Edition 1/e ISBN 0-13-660911-2

Notice from this that we'll be using Java as a programming language. If you're not comfortable programming in Java, it is your responsibility to get up to speed ASAP. I've listed several supplementary Java resources on the Resources page.

Late Policy: 10% taken off for each day your assignment is late, starting at the beginning of class that day. Weekends don't count, so if your assignment is due on a Friday and you turn it in on a Monday, you get 10% off. After 3 days (30% off), the assignment is worth zero - at that point, you're better off moving on to the next assignment rather than getting further behind.

Collaboration: In general, I expect students to behave responsibly and do their own work. I'm willing to assume this is the case until proven wrong. More specifically, it is OK to talk with each other about the general parameters or approach of the assignment. It is NOT OK to share source code, to do part of an assignment for another person, or to directly copy another person't work. If you are unsure as to whether something is considered fair game or not, please ask me and we can discuss it.

A few examples: "On question 4, are we supposed to implement a priority queue using a heap?" This is fine; it's a clarification of the assignment. Feel free to talk about this sort of thing with your classmates.

"I don't understand how big-O works! Can you explain it to me?" Also fine; you're talking about the course material generally; I think students should help each other with this sort of thing - you're great resources for each other.

"Question 3 is really hard. How did you do it?" Now we're getting into a gray area. If you're talking in generalities here ("I broke the problem into three cases and solved each case separately") that's fine; you're not telling the other person exactly how to do the assignment, you're just discussing approaches. If you're talking specifics ("Here's the code for tree traversal.") then we're moving into unacceptable territory. The question to ask is: does the person I'm talking to still need to think for themselves in order to solve the problem, or have I just given them the entire answer? I strongly recommend erring on the conservative side here; if you're unsure whether you're sharing too much, tell the question-asker that they should talk to me. I'm always happy to help people with problems.

"Can I just look at/use/copy your code?" Definitely not acceptable. Keep in mind that both participants are cheating here; the person who is copying and the person who is allowing their friends to copy. Students that I feel are cheating in this manner (this is cheating) will not be treated nicely.

Also note that using code that you get off the web, from a friend, etc. and turning it in as your own is considered plagiarism, just as if you did it in a paper. This will result in (at least) a zero for that assignment. This includes 'finding' code in the trash, or using your friend's code as a template. Let me make it very clear that it is very easy to detect this sort of cheating (there is software to do it) and, if you are suspected of this sort of activity, the burden of proof will be on you to prove that you did not cheat. The best way to avoid trouble is to write your own programs by yourself, and not to share your code with others.