Instructor: Ramesh Sitaraman, Room 332, Computer Science Bldg, (413) 545 3279, ramesh at cs.umass.edu.
How to contact me: I would like to make myself available to you as much as possible. Here is the three-step algorithm for contacting me:
1. Come to my office during office hours (Tues 1.30 PM to 2.30 PM and Thursday 1.30 PM to 2.30 PM; Other times by appointment).
2. If the office hours are not convenient, meet me immediately after class.
3. If both of the above fail, send me email to fix an appointment.
Teaching Assistants:
Course Hours: Lectures TuTh 2.30 to 3.45 PM in CMPS 142. Discussion Wed 11.15 AM to 12.05 PM in ELAB 304.
Textbook: Introduction to Algorithms, by Cormen, Leiserson, Rivest, and Stein, Third Edition, MIT Press. Please make sure that you have the latest (i.e., third) edition of the book, and not a prior edition.
Prerequisites: Formal prerequisites are CMPSCI 187 and CMPSCI 250. I also recommend CMPSCI 287 as a co-requisite (I may be able to waive 287, if you have had other significant programming experience). Familiarity with the mathematical concepts provided in CMPSCI 250 is absolutely required. Further, programming experience in a language such as Java, Pascal, C or C++, and some familiarity with data structures is required. Please come and talk to me if you have any doubts regarding whether or not you satisfy the prerequisites.
Course Web Page: All course handouts, homeworks, homework solutions, etc will be available in the course webpage at http://www.cs.umass.edu/~ramesh/Courses/cmpsci311/.
Course Broadcast Mailing List: We have created a course broadcast email address. The TAs and I plan to send all course related announcements on this mailing list (e.g., clarifications of homework or programming assignments, questions/answers of general interest, etc.) to this mailing list. Please use the instructor's email address (ramesh at cs dot umass dot edu) and/or the TA's email address above for any one-on-one email.
Goals of the course: This course will put the science into computer science. In this course, you will make the intellectual transition to thinking about and designing computer programs in a scientific manner. You will learn the mathematical theory that helps you determine the performance characteristics of an algorithm (or program) without ever running it on a computer (Just as the theory of fluid mechanics help determine if an airplane can fly, without ever attempting to fly it!). You will learn to apply algorithm design techniques to derive efficient algorithms for a number of important problems. Finally, you will actually implement algorithms in C, Java or a related language and see for yourself how the mathematical theory works in practice.
Assignments: There will be homeworks, programming assignments, and reading assignments. There will be approximately 7 homeworks. There will be 1 or 2 programming assignments. There will be weekly reading assignments. The programming assignments can be done in Pascal, C, C++, Java or a related language.
Exams: There will be two midterm exams and one final. The midterm exams will be held on Tuesday, Feb 28th, 2012 and Tuesday, March 27th, 2012 in the regular classroom in the regular lecture hour. All exams are open book and open notes. Of course, no collaboration is allowed during the exams. The final exam will be comprehensive and will include all the material covered in the course.
Grading: Your final grade will be computed using (approximately) the following percentages. Homeworks (35%), Programming Assignment(s) (10%), Discussion(5%), Midterm 1 (12.5%), Midterm 2 (12.5%) and Final (25%). The discussion marks are based on your participation in the weekly discussion hours. A sincere effort to do the work given to you during the discussion hour will get you full marks.
Late submission policy: It is essential that the homeworks and the programming assignments be completed on or before the deadline. No work will be accepted after the deadline, unless you have a valid medical reason. The homework with the lowest grade will be dropped for computing the final grade.
Collaboration Policy: You may collaborate on the homeworks. In fact, such collaboration is strongly encouraged. But the answers must be written up independently. Similarly, you are strongly encouraged to discuss programming assignments with other students. But when it comes to writing up the code, you must do it independently. If two submissions are identical, it will be construed as prima facie evidence of cheating. Please acknowledge people you talked to while writing up the homework. Please do not consult the web or other online sources for problem solutions. Using an online source to create your problem solution will also be construed as cheating. Cheating in any form will be dealt with severely as per the university guidelines.
Important tips for success in this course:
1. Make sure that you attend all the lectures and all the discussion hours.
2. You must do your weekly reading assignments before coming to class. This makes it a lot easier to follow the class.
3. Work out lots of problems, including but not limited to the homeworks. As an incentive for doing problems from the book, I will choose some of the exam problems from the book.
4. Interact with me (as well as with other students) about the course material. I cannot stress the importance of this enough. This really helps a great deal in clarifying what you learn during the lecture. I am very glad to meet with you and talk to you as often as you want.