MA/CSSE 473 Design and Analysis of Algorithms
(Summer on-line course)

 

Instructor and Web Page info

Instructor  Claude Anderson
Office Phone  877-8331
Office Address  F210 (Northeast corner, top floor of Moench)
Office Hours  No specific regular office hours.  I will always strive to respond to email as quickly as I can.  I will be in and out of my office a lot during the summer.  If you leave voice mail on my office phone, I will get back to you as soon as I can. I will pick a few evenings during the summer when I will be in my offices and we can use Microsoft Lync for videoconferencing.
E-mail  anderson@rose-hulman.edu
Main course web page http://www.rose-hulman.edu/class/csse/csse473/201240
Schedule page
(bookmark it in your browser)
http://www.rose-hulman.edu/class/csse/csse473/201240/Schedule/Schedule.htm
This is the place where I will post most course materials.  Things that are interactive or that I do not want to post publicly (such as solutions) will be posted on the course ANGEL page.

Textbook(s)

Required: The Design and Analysis of Algorithms, 2nd Edition  by Levitin (Addison-Wesley, 2007)
Highly Recommended: Data Structures and Problem Solving Using Java, 4th or 3rd Edition  by Weiss (CSSE 230 text)
Because you should already be familiar with the style and context of the Weiss book, I will often place sections of this book on the reading assignments page, to provide an alternate explanation of things.

Approximate reading schedule (Levitin)

Weeks 0-1 Review, Overview of Data Structures, Algorithms and their analysis Chapters 1-3
Weeks 2-3 Divide-and-Conquer, Decrease-and-Conquer, Transform-and-Conquer Chapters 4-6
Weeks 4-6 Space-Time Tradeoffs, Dynamic Programming Chapters 7-8
Week 7-8 Greedy Technique, Iterative Improvement Chapters 9-10
Weeks 9-10 Limitations of Algorithmic Power, Heuristic and Approximate Algorithms Chapters 11-12

Other Books

  • Prerequisite for this course:
               Grimaldi, Ralph P. Discrete and Combinatorial Mathematics (Addison-Wesley, 2003)
  • Other good books on Algorithms:
    • Algorithms by Dasgupta, Papadimitriou, and Vazirani (McGraw-Hill, 2008)
    • Algorithms by Johnsonbaugh and Schaefer (Prentice-Hall, 2004)
    • Algorithms by Sedgewick and Wayne (Addison-Wesley, 2011) [notice the creative trend in book titles!]
    • Introduction to Algorithms by Cormen, Leiserson, Rivest, and Stein (MIT Press, 2010).  This large book is a great reference for students who have already taken MA/CS 473.
    • Data Structures and Algorithm Analysis  by Weiss (Addison-Wesley, 2007)

Course Description

Catalog Description

Students study techniques for designing algorithms and for analyzing the time and space efficiency of algorithms. The algorithm design techniques include divide-and-conquer, greedy algorithms, dynamic programming, randomized algorithms and parallel algorithms. The algorithm analysis includes computational models, best/average/worst case analysis, and computational complexity (including lower bounds and NP-completeness).

Instructor's Description

This course is a study of algorithms, including their design, analysis, and proof of correctness.  A large portion of our time (in and out of class) will be spent solving problems.  There will also be some implementation problems, but they will play a lesser role than in CSSE 230.  Students will also present solutions in class and/or lead class discussions of problems. 

Prerequisites

CSSE 230   Data Structures and Algorithms                MA 375  Discrete and Combinatorial Algebra II

This course will include quick reviews of the following topics. But if you did not understand them from the previous courses, you will need to do some extra review work on your own:

  • Elementary data structures and their associated algorithms (stack, queue, list�linked and sequential, tree, binary search tree, priority queue and its heap implementation, set, hash table, graph, various sorting and searching techniques)
  • Basic proof techniques, including proof by contradiction, contra-positive, and mathematical induction.  Understand the difference between "for each x there exists a y" and "There exists a y  for each x"
  • Elementary tools of analysis, including summations, integrals, inequalities, logarithms, counting techniques,  big-oh and its cousins big-theta, etc., recurrence relations
  • Reading, using, and adapting mathematical notation
  • Simple programming techniques, including functional decomposition, recursion, iteration, arrays, references, pseudocode

For some of you, it has been a long time since you took CSSE 230 and/or Math 275/375.  Also, there are different versions of those courses, depending on who teaches them.  You may have come out of those courses not feeling very confident about the proofs and algorithm analysis material.  Of course we will do some review in 473, but that will be brief.  Some of you would do well to review your areas of weakness before 473 begins.  Or at least recognize in advance that 473 may take a lot of extra time for you because you need some remediation in prerequisite material.  Better to face that reality now than to pretend that 473 will be a "fresh start" that will not really depend on those courses!

I prepared the following document to help you get an idea of what you might need/want to review. It includes references to specific sections of the Grimaldi and Weiss textbooks that are often used for the prerequisite courses. http://www.rose-hulman.edu/class/csse/csse473/201110/Homework/BackgroundMaterial.html

For some day's PowerPoint Slides there were Instructor Notes that the students did not see.  For the summer course I am making those available in separate documents, linked form the schedule page.

This document contains some written problems that I assigned once  in CSSE 230.  They are relevant to this course, and may be good practice for you.   http://www.rose-hulman.edu/class/csse/csse473/201110/Homework/230-problems.pdf

The main things that you should bring into this course

  • enthusiasm, curiosity, perseverance, and a "can do" attitude
  • (not in summer online course) willingness to work cooperatively with other students (inside the classroom and out) to enhance the learning environment for everyone
  • willingness to consistently devote enough time to the course
  • commitment to read the textbook and get all you can from it, so that more class time can be spent on problem solving
  • commitment to avoid getting behind, and to ask questions when you don't understand something
  • a reasonable comfort level with elementary discrete mathematics (including proofs)
  • ability to work as an independent programmer; i.e., to be able to design, code, and debug solutions to simple and medium-difficulty problems without a lot of help from others

Instructor's Course Objectives

  • Increase student appreciation for the value of theoretical Computer Science
  • Increase student understanding of mathematical tools from previous courses by applying them to algorithm analysis
  • Enhance student ability to create and present proofs and mathematical arguments
  • Expose students to various classes of algorithms with applications to a variety of mathematical disciplines
  • Give students an understanding of major classical approaches to algorithms, increasing their ability to choose the best kind of algorithm for a specific need
  • Help students understand some limitations of computer algorithms via the study of NP-complete problems

Course Requirements

The nature of the assignments

When I give a reading assignment, you should read it.  The summer course is, after all, an independent study course!

I will assign several written problems, most of them from the textbook. They will usually be short thought problems, mathematical analyses, formal proofs, or algorithm-design exercises. I expect you to think through them carefully and write your answers legibly and clearly (if you can't write it neatly, type it). On many problems, Your score will be determined not only by correctness but also by the quality of your explanation. Some of the problems will provide straightforward practice with algorithms from the course; others will require creative solutions. Don't put them off until the last minute!

Written assignments will be submitted to drop boxes on ANGEL.

In general, you may communicate with other students about the problems, and work out solutions together. But when you write it up to turn it in, you must do it on your own without reference to things that you wrote together. You should also acknowledge the collaboration in writing on the paper that you submit.

The textbook has  exercises at the ends of each section; Almost all are likely to be helpful; obviously I cannot assign all of them. For many of those problems, reading and thinking about them will be instructive, even if you don't have time to fully solve them.  I recommend that you at least read them all, regardless of whether they are assigned.  I will sometimes pick out additional problems to suggest:

  • problems that are simpler than the assigned problems.  If you can't do the assigned problem, perhaps one of these will be a "bridge" for you.
  • problems that are really over material from a prerequisite course (CSSE 230 or Math 375).
  • Problems that are great to think about, but that would take far too long to write up solutions.
  • Problems that are a little too advanced for this course, but that would be good challenges for the best students.

Extra Credit: Solution pool.   Many assignments will contain non-required problems.  It would be great to have a set of solutions to those problems so that students can check their answers.  Producing them may be a good community activity.  I have set up an ANGEL discussion forum for this purpose, and I will give a small amount of extra credit for submitting or critiquing a solution.  This will only work well if several students critique each solution to either say that it is great or to suggest corrections or improvements.

Problem hints: Most problems in the Levitin textbook have hints at the end of the book.  I suggest that you first try to do each problem without the hint, but if you get stuck, feel free to use the hint.

Your solutions to programming problems should be well-designed and well-documented. Before submission, you should try compiling and running what you are going to submit, so that you can be sure that you did not leave out any necessary files.

 

Get started early on all assignments! Sometimes you will need some "incubation time" before a  problem is due.

Policy on Late Work (Summer):

I recognize that different students have different schedules during the summer.  Some of you know already that certain weeks will  be busy (or will be your vacation week), so I am allowing some leeway on assignment submission. 

I will list due dates on the schedule. If you get each assignment done by its due date, then the work will be spread out reasonably evenly during the summer.  But for each assignment I will list a certain number of "grace days". Submit the assignment within that many calendar days after it is due, and you will not lose any credit for lateness.  At the beginning of the summer, assignments will have 7 grace days.  The number of grace days per assignment will gradually decrease as the summer progresses.  I figure that as the summer goes on, you will have more advance opportunity to anticipate busy or absent weeks and work ahead.  Also, practically speaking, I can't get stuck with grading 60 assignment submissions during the last week of the course!

After the grace days for an assignment have expired, there will be a 25% penalty per additional day or portion of a day that it is late.

Grade Components

     
80%Assignments (written and programming problems)
20%Examination

Regardless of your overall average,

Bounty for discovering new errata. If you are the first to find and document an error in the required textbook or in any document that I produce for the course (including this syllabus), I will give you some bonus Homework points. The number of points is proportional to the importance and subtlety of the error. Even spelling errors will count for something! There will be a discussion forum on ANGEL for reporting these. I recommend that you subscribe to that forum, so that you will become aware of any errors as soon as they are reported.

 

MA/CSSE 473 Community

I encourage you to communicate with other students.  We can't duplicate the classroom experience, but we get some sense of who is in the class and how they are doing.  I encourage you to go into personal preferences on ANGEL and make your picture visible to other students.  I encourage you to write quite a bit about yourself on the "Introduce yourself" forum.  I encourage you to use the ANGEL discussion forums to ask questions about course material or homework, so they can be answered by other students and/or so everyone can see the questions and answers.

Academic Integrity

See the CSSE department statement on academic honesty. Dishonesty on assignments or exams may result in a lowered course grade, a course grade of F, and/or disciplinary action. Ask me about the minimum penalty for plagiarism! 

I encourage you to discuss the problems and general approaches to solving them with other students. But when it comes to writing up a solution or writing actual code, it should be your own work (or the work of your group if it is a group or partner assignment). 

If you use someone else's ideas in your solution (or any other work that you do anywhere), you should give credit to that person in the comment section of your program, and  be sure that you understand it as well as if it were your own. 

If you are ever in doubt about whether some specific situation violates the policy, the best approach is to discuss it with me beforehand. This is a very serious matter that I do not take lightly. Nor should you.

Email, Discussion Forums, Classmates

I will usually use Rose-Hulman email. But occasionally, the context of a message will make it best to send ANGEL mail. If you do not regularly check ANGEL mail, you should set your ANGEL preferences so that your ANGEL mail is always forwarded to your regular email.
When you send course-related email to me, please

  • include 473 somewhere in your subject line, and also
  • take a minute to think about a reasonable subject line.
For example, 473: Question about Exercise 2.1.2

If you think that your question or comment might be of general interest to people in the class, please post it on one of the course discussion forums on ANGEL. First of all, you may get an answer more quickly than if you only send mail to me. Second, you may get multiple people's perspectives. Third, you will contribute to an active learning community.

Other students in the course can often be your best source of help. And they will also learn more if they explain things to you. Don't try to be the Lone Ranger in this course, especially if you do not find the course easy. If you  have worked on something for 30 minutes without making any progress, it's probably time to seek help.

Suggestion Box

I want your feedback on how the course is going and how it could be improved. While "nonymous" suggestions are even more useful than anonymous ones, I'd like to know what you are thinking, even if you do not feel comfortable with letting me know who made the suggestion. Thus the 473 ANGEL course will contain an anonymous suggestion box. I will get your comments, but I cannot trace who sends them.


All I ask is that you only use this survey only for serious suggestions, not to vent when you are momentarily frustrated. You can also use this survey to tell me about things you like in the course and don't want to change. :)
If you ask a question in your anonymous message, the only reasonable way I can reply is with a post to one of the course's discussion forums. I will do that whenever I think my response is likely to be relevant to several students in the class.