(rev. October 22, 2017)

[2017/10/22: Modified Office Hour Time]

[2017/08/15: Initial Edits]

for Theory of Algorithms: CS 4440

40621 CS 4440 001 Theory of Algorithms Lec 3.0MWF 13:00-13:50P-101

- Mondays 16:15-17:45
- Wednesdays 16:15-17:45
- Thursdays 10:00-12:00
- or ask me for an appointment at a time that works for you

It is important that you be adequately prepared for taking this course, CS 4440.

Check with me if you have not passed

- CS 3100 (Data Structures + Algorithms), or the equivalent,
*and* - MATH 2300 (Discrete Structures), or the equivalent.

The highest aims of this course are:

- to learn how to make the best possible algorithms,
- to know when it is impossible to make an algorithm any better, and
- to learn to choose an appropriate algorithm for a given problem.

It is necessary that we know how to analyze the potential efficiency of an algorithm using such tools as discrete mathematics, probability, and statistics. We also need to study such abstractions as computational complexity, reduction, non-determinism, and NP-completeness, in order to better appreciate the limitations of computing machines.

It will be important that you

As background and review:

- Chapter 2 (Basics of Algorithm Analysis), and
- Chapter 3 (Graphs)

- Chapter 1 (Representative Problems);
- Chapter 4 (Greedy Algorithms), sections 4.1, 4.2, 4.4, 4.5, & 4.6;
- Chapter 5 (Divide and Conquer), sections 5.1, 5.2, 5.3, & 5.4;
- Chapter 6 (Dynamic Programming), sections 6.1, 6.2, 6.3, 6.4, 6.6, 6.7, & 6.8;
- Chapter 7 (Network Flow), sections 7.1, 7.2, 7.3, 7.5, 7.7, 7.8, & 7.9;
- Chapter 8 (NP and Computational Complexity) sections 8.1, 8.2, 8.3, 8.4, & 8.5;

Your course grade will be based on a class participation component (=PC) and a test component (=TC).

Satisfactory class participation means satisfactory work on assigned problems, if any, a good attendance record, evidence that you are staying current with the reading assignments, and satisfactory contributions to in-class discussions.

There will be class discussions of problems. I may sometimes require you to work on problems in advance and turn in notes that "show your work." (similar to homework assignments, but they will not be graded in the traditional sense.) Some problems I assign may involve programming, but not long programs.

There will be at least two in-term exams and a comprehensive final exam. I'll calculate a test component of your course grade by counting your grade on the final with a weight of 1/3. Your exam scores will be included with a weight of 2/3, after 'adjustment'. The adjustment will be to substitute your grade on the final in place of any exam scores that are lower than your grade on the final.

As an example, if there are three exams and a final, and if your scores are 60, 80, and 70 on the exams, and 75 on the final, then I'll average (75, 80, 75) as your adjusted quiz average (instead of averaging 60, 80, and 70). That average works out to 76.67. I'll then compute your test component as (2/3)(76.67) + (1/3)(75) = 76.11.

Your course grade will be

where TC is your test component, and PC is your participation component. This means, to continue the example, if your test component works out to be 76.11, but you get 100 as your participation, grade, your course grade will be a 86.11, which equates to a letter grade of B.

For letter grades, I equate F with 0-60, D with 61-70, C with 71-80, B with 81-90, and A with 91-100 (or higher).

I will not give make-up, late or early exams. I will not accept late assignments.

Get started early on your studies and/or assignments. That way, if you run into difficulty, you can seek help in class and/or office hours in a timely fashion.

To "survive" in a class like this, you may need to put aside "foolish pride," stubbornness, and/or shyness. If you find you are not making good progress in the course, please seek help from me promptly. You may speak to me after class or during my office hours. You may send me a message by e-mail. You are entitled to get help this way.

We can have class discussions about exam dates and whatever due dates I may give you. I

If I give you an assignment and you cannot finish it on time, please turn in whatever you

College is not for everyone. Some people who go to college don't do well in all their classes. Sometimes they fail classes. Sometimes they decide to change majors to something more do-able. Some people who start college don't graduate.

College demands that the student learn actively and independently. Naturally college makes demands on instructors too. I want you to get as much as possible out of the course. I hope to be accessible and helpful to you.

Read and study everything I assign as soon as possible. Read difficult material more than once! Attend all classes. Pay close attention. Take notes to help you think about things and remember things. Hand write your notes, because writing helps people learn better than typing notes (Yes! See this article in Scientific American). Review your notes before each class. Get started on assignments early. Do a little work each day so that work never piles up. Bring your questions and problems concerning assignments to class each day.

Finish assignments and reading on time. Be an active learner. Do what you can to keep class discussion productive. Reply to questions. Ask questions and make remarks if you feel you have something to add or if you want me to explain something better.

Sometimes it can be difficult for the student to figure out the difference between 'cheating' and 'working smart.' Here is some guidance:

When your purpose is to clarify the meaning of the directions I have given for an assignment you may discuss those directions with other people, including your classmates, as much as you like. You may also freely discuss the relative merits of various general approaches to designing and engineering solutions to an assignment.

You may use ideas, algorithms, or segments of program code from

- any printed material available for student check-out in our library,
- our course text, or
- any programming textbooks to which you have access.

You may ask me for help and hints on assignments. I prefer that you ask questions in class, so that everyone has a chance to benefit from the discussion.

On the other hand, except when I specifically assign you to work on a team, until the time comes for us to discuss solutions in class together,

- You must
*not*give or accept any other kind of help.

- You may
*not*allow any part of a solution you compose (make up) for a homework assignment to be communicated to another member of the class or allow such material to be communicated to you.

- A corollary to the point above is that one member of the class may
*not*look at the homework of another member of the class, whether on paper or on a computer screen.

I make course documents, assignments, supplements, and so on available via the world wide web. To access the on-line CS 4440 materials, just open this URL:

http://www.cs.csustan.edu/~john/Classes/CS4440/

Also, there is a miscellaneous collection of information that you may want to use from time to time. It is located here:

http://www.cs.csustan.edu/~john/Classes/General_Info/