CSE 3500: Algorithms and Complexity
This course is for undergraduate students to learn basic concepts
and techniques in
algorithms and complexity.
Lectures. Monday and
Wednesday, 3:35-4:50 pm.
Instructor: Yufeng Wu
(email@example.com), ITE 235. Office hour: Monday and Wednesday,
10:30-12 pm and 2:00 to
3:30 pm or by appointment.
TA: Chong Chu (
Parker Timmerman (firstname.lastname@example.org)
CSE 2100 (Data structure and intro. to algorithms) and CSE 2500
(Introduction to discrete systems). Some topics need some basic knowledge
Moreover, you need to know how to program. We will have
programming assignments in this class.
You can use any programming language.
The required textbook is: Algorithm Design by Kleinberg and
Occasionally I will also use some materials from a classic
to Algorithms, 3rd edition
by Thomas Cormen, Charles Leiserson, Ronald Rivest, and Clifford
Stein. MIT Press, 2009.
Several chapters are available online at the above web page.
Many lectures are based on this book, although we will sometimes
cover topics not in the book (where notes and handout will be
provided) and of course
we can not cover every chapter of the book.
Outline. This course is lecture-based. The planned subjects are the following
(subject to change).
1) Fundamental concepts of algorithms. Asymptotic order of growth.
Basic running time analysis.
Graph related topics.
2) Basic algorithm techniques. Divide and conquer. Dynamic programming. Greedy
Algorithms for graphs: basic algorithms, minimum spanning tree and
3) Advanced algorithms and complexity. NP-completeness. Algorithms for NP-complete problems.
If time permits, the following topics may be covered: algorithms
on numbers, network flows,
string matching, approximation algorithm and randomized
For more details on planned topics, please look at the planned
schedule (from the course web page).
We will have homework every one to two weeks. Work
hard on them, even though
homework does not carry big weights on grading. This is the best
way to prepare for exams.
Much of what you learn from this course comes from the homework.
Your solutions should be
concise, correct and legible. Some of the problems may be
challenging, depending on your
background. If you can not solve a problem, briefly explain where
the difficulty is. You are required to
submit the homework electronically (in PDF format). We appreciate
greatly if you typeset the homework.
One good typesetting tool is Latex. Latex is a
bit difficult to pick up but it is very powerful.
Every computer scientist I know uses Latex. You can get started on
Latex from here.
Or you may type the English part and write by hand, very clearly,
any mathematical parts, and then scan it.
Do not write detailed code, and try to limit the amount of
pseudo-code you write. The way I like to see
a written algorithm is: (i) have a clear structure (i.e. mark the
main steps 1, 2, 3, .., and ensure control
flow such as loops as clearly stated), and (ii) use concise
English sentences to explain what each
step is supposed to do; you can use Math symbols here but don't
over-use them. Check out the lecture
notes to see how algorithms are usually written.
Note: you need to
acknowledge any source of ideas other than the textbook. You must
write up the solutions on your own.
assignment: while this course is mostly theoretical, I
have found that it can be useful to
put what is covered in class into action. I plan to assign up to
three programming assignments. In these
assignments, you will have chances to implement algorithms and
also evaluate their performance.
Exams. There are two in-class exams for this
course and a final exam. Exams will be closed book and notes
but you are allowed one (two for the final) 8 1/2 by 11 review
Homework and programming assignments (25%), exam 1 (20%), exam 2
(20%), and final (35%).