**Dr. Beeson **

*Introduction to Algorithms, Second Edition *,
by Cormen, Leiserson, Rivest, and Stein (CLRS for short).
This is a book with over 1100
pages that will serve as a reference for your entire professional career.
The course will cover only some of the
textbook contents. The ISBN numbers of the hardback edition, as given on the MIT Press website, are

ISBN-10: 0-262-03293-7

ISBN-13: 978-0-262-03293-3

There is also a paperback edition, which is an "international edition" sold only outside the US; if you can obtain it, it's fine. If you happen to already own the first edition, that will be OK (although the page numbers listed in reading assignments won't match) but if you're buying it now, get the second edition.

CS 46b with a grade of C- or better.

Also you must demonstrate that you are able to write simple programs in Java by correctly solving a set of review exercises before drop day. This is not a programming course--you are expected to *already * be able to program in Java, and if you cannot you would certainly fail this course. If you cannot solve these review exercises, I will save you the trouble of failing this course by not allowing you to enroll. More details and a link to the exercises can be found on the course web page. Before I had this requirement, a lot of students failed this course. Now, almost nobody who turns in homework and takes exams fails.

MW 1:30 to 2:30 p.m.

MW 6:55 to 8:10 p.m. (I catch an 8:25 bus so this office hour must end punctually)

My office phone number is 924-5113. There is voice mail on that line, but I will check it only on Monday and Wednesday. Perhaps your question can be answered by email. You can email me, I’ll do my best to respond promptly but, for example, you might send an email on Friday noon and not get an answer until Monday night. If your question involves code that doesn’t work, it’s best to bring the code to my office where we can look at it together.

Once you submit your assignment, the system will evaluate its performance on a certain set of possible inputs. These inputs will include some of the examples published with the assignment, as well as additional ones, including possibly randomly generated legal inputs. The system will assign your grade within a few minutes, providing you with some meaningful feedback if your program is wrong. You can resubmit as many times as you like before the deadline. The latest grade is the one that counts. (Not the highest grade, so be careful with multiple submissions close to the deadline!)

There is also a way to submit late assignments online; a grade penalty will be imposed automatically by the system. Specifically, one letter grade if the assignment is less than 24 hours late, and two letter grades if it's more than 24 hours late. There will be a last day to submit each assignment, at least seven days after the due date, and assignments will not be accepted after that date.

The homework assignments in this class are copyrighted by Dr. Beeson, including the names of the assignments, and the names of all the required classes and methods, all the examples that are posted with the assignment, and the problem descriptions and programming hints that are posted. Your solutions are your own, but if you want to post them publicly, you must change the names of the classes and methods, and you cannot post the problem descriptions. This should enable you to show your work to a prospective employer, and possibly allow me to re-use the assignments without future students being able to Google your solutions. Of course, postiing the solutions publicly before the last late submission date would be unethical, just as posting your solutions on the wall outside class would be, even if you change the names. You could also create a password-protected page and email prospective employers the password--that might be easier than changing the names. Thank you for your cooperation in this matter--it's a lot of work to develop new assignments and the testing code for them, and since the subject matter of the course is fixed, in some cases it's not even desirable to develop new assignments.

Q: I was sick and didn't turn in the programming assignment,
can I submit it late without penalty? *A:* Yes, If you made arrangements (by email or
phone) before the due date, there will be no penalty, but that grade will have to be adjusted by hand later, so you will still see a late penalty automatically imposed. If you are so ill that you can't make the submission even one week late, special arrangements will have to be made. *Q:* I wasn't sick but I had midterms in my other classes
so my programming assignment wasn't done on time. Can I turn it in late?* A: *Yes,
you *must* turn it in. Turning it
in late will cost you one letter grade per day of delay, down to a C, but you *must* turn in all programming assignments to pass the course. But note there is an ultimate deadline (seven to ten days after the due date) after which submissions are no longer accepted. *Q:* I don't understand the grading
system.* A:* let's take an example. You have an A on the homework assignments, a B- and a C+ on
the two midterms, and a C on the final.
You always did well on the 5-minute quizzes. So that’s
( 0.45 ) * 4.0 + 0.05 * 4.0 + (1/8) *
2.7 + (1/8)*(2.3) + (1/4) * 2.0 = 3.125 = B.

Numbers convert to letters this way: 3.3 is the lowest B+; 3.5 is the lowest A-, 3.71 is the lowest A, anything over 4.0 is an A+.

That conversion method is standard in all U.S. universities, except that when the University uses it to compute your GPA, A+ converts to 4.0, not 4.3.16:00 section: Friday, Dec. 11, 14:45 -17:00

17:30 section: Monday, Dec. 14, 17:15-19:30

- Ensure that students are familiar with ways to implement elementary data structures and their associated algorithms.
- Introduce students to the implementation of more complex data structures and their associated algorithms.
- Acquaint students with advanced sorting techniques (radix sort, heapsort, mergesort, quicksort).
- Teach students how to determine the time complexity of algorithms.
- Introduce students to algorithm design techniques.

Upon successful completion of this course, students should be able to:

- Implement lists, stacks, queues, search trees, heaps, union-find ADT, and graphs and use these data structures in programs they design
- Prove basic properties of trees and graphs
- Perform breadth-first search and depth-first search on directed as well as undirected graphs
- Use advanced sorting techniques (radix sort, heapsort, mergesort, quicksort)
- Determine the running time of an algorithm in terms of asymptotic notation
- Solve recurrence relations representing the running time of an algorithm designed using a divide-and-conquer strategy
- Comprehend the basic concept of NP-completeness and realize that they may not be able to efficiently solve all problems they encounter in their careers
- Comprehend algorithms designed using greedy, divide-and-conquer, and dynamic programming techniques