Here's the catalog description:

Algorithm analysis and asymptotic running time calculations. Algorighm design techniques and implementation details. Algorithms for sorting and searching, trees, graphs, and other selected topics.

So what does this mean?

This is a course in which you'll learn two things: Some of the most popular and useful techniques and data structures for solving common computational problems, and also mathematical techniques for analyzing and comparing solutions.

The course will be a combination of theoretical/mathematical analysis and practical implementation; there should be something for everyone! Along the way, you'll also pick up some practical knowledge, such as exposure to different programming environments, practice in working with external packages, and experience in developing larger (at least 200-300 lines) programs.

Some common questions:

- What language will we be using?
Java. I will assume that you've already had a course or two (such as CS110 or CS112) where you've learned the basics of Java. If you have not had any exposure to Java, I would strongly suggest trying to catch up before the semester gets underway; you really don't want to be learning a new language at the same time as all the course material. There are lots of good resources for learning about Java. Here are some online resources - inclusion on here is not an endorsement; I haven't read these all thoroughly, but hopefully they will be of use.

- Sun's Java tutorial. Available free online, this starts with the basics.
- Introduction to Programming Using Java Another introductory book.
- Thinking in Java A nice discussion of OO design in Java. You'll need to download and unzip this.
- How to Think Like a Computer Scientist: Java Edition . Introductory material, plus some info on data structures. You'll need to download and untar this one.

- What are the course requirements?
The course will consist of a combination of small to medium homeworks, larger projects, exams, and the occasional quiz. Roughly once a week, I'll give you a homework involving the material currently under discussion. This will be primarily pen-and-paper, and focused on the analytical/mathematical side of things. You'll also get four larger projects (about every three weeks) involving a significant amount of programming. There will be two midterms and a final. Finally, I'll occasionally give quizzes at the beginning of class, just to provide incentive to get up on Friday mornings. More detailed info can be found on the syllabus.

- What's the class like?
The class will be lecture-driven; most of the time will be spent in lecture.

- How hard is the class?
That's a difficult question to answer directly. In general, 245 is seen as a 'gateway' class; it's where you learn the knowledge. techniques and skills you need to be successful in upper-division courses. This means that you have a lot to learn, and that you'll need to be prepared when you're done with this class.

The class will require a significant amount of work in order to do well. It's not the sort of class where you can do the assignments and studying 'the night before' and hope to slide through; you'll need to keep up with the lectures.

- What will we learn about?
Some of the topics we'll cover are: Lists, Stacks, Queues, Heaps, Trees, Graphs, Hash tables, Algorithmic analysis, Sorting, Searching. The syllabus has a tentative list of topics.