[Note: this webpage last modified Wednesday, 08-Jan-2014 21:50:04 EST]

General Information

Announcements

Recorded Lectures

Purpose and Focus of Course

Grading, Assignments, and Expectations

Blackboard

Academic Integrity

Special Needs

__Lecture:__ Tuesday and Thursday from 2-3:15pm in room A-002, Root Hall.

__Final exam:__ May 1, 3-5pm.

__Office hours:__ I am generally in my office and available
most MWF's from about 8:30am-4pm. My official office hours are
Wednesdays 9:30-11:30am. My office is A-129 Root Hall.

__Instructor:__ Jeff Kinne

__Website:__
http://cs.indstate.edu/~jkinne/cs658-s2014 (or browse for Jeff Kinne
on http://mathcs.indstate.edu, or
search for Jeff Kinne on google, bing, yahoo, etc.
and find a link to the course website from my personal webpage).

__Required text:__
Introduction to
Algorithms by Cormen, Leiserson, Rivest, and Stein. We will also
supplement with readings from online sources, including
Algorithms
by Sanjoy Dasgupta, Christos Papadimitriou, and Umesh Vazirani.

__Prerequisite:__
If you have not taken CS 458/558 at ISU, you need the
instructor's permission to register for the course.
If you have not taken this course
at ISU, you probably are not ready for CS 658. If you have any
questions about this, send an email or set up a time to see me.

__Mathematical Review:__
This course assumes "mathematical maturity" - that you are familiar with
proofs, basic mathematical reasoning, run-time analysis of algorithms, etc.
You can review much of this material by looking at
the following MIT opencourseware page:
6.042J / 18.062J Mathematics for Computer Science, Fall 2005.
That course has exercises that you can attempt to solve and then check
the solutions. For most who take CS 458/558, it would be highly
beneficial to spend time before the course starts and/or early in the
semester reviewing that type of material, in particular focusing on
proofs (including induction), logic, asymptotic running time, and
basic counting/probability.

Announcements regarding the course will be made both during class and via email to your @sycamores.indstate.edu email address. You should regularly check this email account or have it forwarded to an account that you check regularly. You can set the account to forward by logging into your indstate.edu email from Internet Explorer (the "light" version of the webmail client that opens up from Firefox or Chrome does not give the option to forward email).

This course is an advanced course in algorithms design and analysis. This course picks up where 458/558 left off. We will look at many new topics and also revisit some you have seen to look at them in more detail. We will likely begin by reviewing sorting and graph algorithms the first week or two. We will proceed to study approximation algorithms, NP-completeness, heuristic algorithms, randomized algorithms, linear programming, pseudorandom generators, cryptography, ...

For each algorithm we study, we will focus on verifying that the algorithm even is correct, and also analyze the running time and memory space needed to complete the algorithm. We will choose a number of the algorithms to implement in code.

The students of this course have the following responsibilities: read assigned readings before lecture, attend lecture, complete homework assignments, take exams, and complete a project. The final grade consists of:

**Project**: 15% of the final grade.**Homeworks**: 30% total. There will be a programming homework assignment most weeks. The total of all homework assignments is worth 30% of the final grade. If you turn in the assignment late, I will grade it so you know how you did, but it will count as a 0. LATE HOMEWORKS WILL NOT BE ACCEPTED. NOTE: if you turn an assignment in more than one day early, I will look at it and give you feedback on any mistakes you might have - and if you resubmit before the due date I will count the grade for the corrected version. We may have in-class quizzes from time to time; these would be added into the homework grade.**Exams**: 45% total. We will have two exams. The first exam is worth 20% of the final grade, and the final exam is worth 25%.**Class Attendance/Participation**: 10% total. Attendance will be taken at the beginning of each class. Half of your attendance/participation score will consist solely of whether you were present when attendance was taken each day - the total number of days present divided by the number of lectures in the semester. The other half of your attendance/participation grade will be assigned at the end of the semester based on how attentive you were in class throughout the semester.

The class attendance grade serves the purpose of giving you credit for coming to class. You benefit from coming to class by seeing me present the new material, getting to ask questions, interacting with your classmates, keeping up on what is going on in the course, etc.

The exams serve as benchmarks of your ability to relatively quickly solve problems related to the material. This helps me assign a grade, and also gives you motivation to pay attention and keep up with the assignments.

The weekly programming homework assignments are designed to solidify your knowledge by having you write programs.

The final project will be discussed further after the first few weeks of the semester. Students will choose a larger programming project that will be completed by the end of the semester and presented to the class.

**Expectations.** My expectation is that an average student will
spend about 6-9 hours OUTSIDE of class each week (that is in addition to
class time) WORKING PRODUCTIVELY/EFFICIENTLY (not just starring at the
computer) to complete their coursework for this class. Some students
may spend less time than this, and some students will spend more.

**Classroom conduct.** You may not use cell phones, iPods/music
players, etc. during class. You should be civil and respectful to
both the instructor and your classmates, and you should arrive to
class a few minutes before the scheduled lecture so you are ready for
lecture to begin on time. You may use your computer during class if you
are using it to follow along with the programming examples that are
being discussed. You may not check email, facebook, work on other
courses, etc. during class.

**Important Note.** If you wait until the last minute to begin your
homework assignments, I will not be available to answer questions if you have
problems. Programming assignments are notorious in the sense that oftentimes
most of the time completing the assignment occurs *after* you thought
you had the problem solved. This is called debugging (and testing),
and is typically
most of the effort in completing a program. So you MUST start your
homework early. I suggest attempting the assignment the day it is
given, or the day after, so that if you have a problem you can ask early.
If you continue to have problems in trying to complete the assignment, you
will have time to ask again.
Working on programming assignments is *much less stressful* if you
start early!

I make no promise ahead of time what the exact cutoff will be in terms of the number of points to achieve an A+, A, A-, etc. These will depend on how the course goes. I will use the guidelines below in assigning letter grades. After the first few weeks, I will include a "letter grade if the semester ended today" in your grades and for taking attendance. You can keep track of how you are doing in the course with the grades on the blackboard site for this course.

The following is roughly what I would expect by the end of the semester to earn a particular grade.

**A+/A**Superior. You have a good understanding of all of the concepts we have covered. You can solve routine problems always. You have clear writing and presentation skills, and are able to clearly communicate your understanding. You are a good programmer and can write programs for any of the algorithms we have covered in class.**A-/B+**Excellent. Similar to superior, but there may have been a few concepts that you did not fully grasp. Or your writing and communication skills could still use work. Or your programming skills may be good but not great.**B/B-**Good. You have demonstrated basic understanding of the concepts, and you can often solve problems on your. But just as often, you are not able to solve more complicated problems on your own.**C+/C**Adequate. You have demonstrated basic understanding of most concepts, but you routinely are unable to solve problems on your own.**F**Failing. You do not even show basic understanding of many of the concepts, or have missed so many assignments/quizzes that a passing grade is not possible.

For the later programming assignments, I will assign a grade based on
correctness
*and* style. The exact breakdown may vary slightly from one assignment
to another. In general, 60-70% of the points for an assignment will be
given based on whether it is correct. The remaining 30-40% will be given
based on good programming style: (i) choosing variable and function names
that are descriptive/appropriate, (ii) writing code that is easy to
understand and efficient, (iii) including documentation at the top of each
file about what is in that file and how to use it, (iv) including
documentation with each function describing what the function does
(including what should be input to the function and what the function outputs),
(v) documentation throughout each function describing the flow of the
program. For portions of the code that are given to you, you do *not*
need to add documentation to those parts of the code; if I give you
partially completed code, you are responsible only for documenting the code
that you add.

The course has a blackboard site. Click here to go to blackboard. You should see CS 151 listed under your courses for the current term. The blackboard site is only used for giving you your grades. All course content, schedule, etc. is kept on the instructor's webpage (which you are currently viewing).

Please follow these guidelines to avoid problems with academic misconduct in this course:

Homeworks: You may discuss the homework assignments, but should solve them on your own. To make sure you are not violating this, if you discuss with someone, you should DESTROY any work or evidence of the discussion, go your separate ways, SPEND at least an hour doing something completely unrelated to the assignment, and then you should be able to RECREATE the program/solution on your own, then turn that in. If you cannot recreate the solution on your own, then it is not your work, and you should not turn it in.

Note on sources: if you use some other source, the web or whatever, you better cite it! Not doing so is plagiarism.

Exams: This should be clear - no cheating during exams. The exams will be closed-book, closed-notes, no computer, and no calculator.

Projects: You should not copy code from the internet or anywhere else. The project should be your own work. It will be fairly obvious to me if you do copy code from the internet, and the consequences will be at the least a 0 on the project.

If cheating is observed, you will at the least receive a 0 for the assignment (and may receive an F for the course), and I will file a Notification of Academic Integrity Violation Report with Student Judicial Programs, as required by the university's policy on Academic Integrity. A student who is caught cheating twice (whether in a single course or different courses) is likely to be brought before the All-University Court hearing panel, which can impose sanctions up to and including suspension/expulsion. See the Student Code of Conduct and Academic Integrity Resources for more information.

Please ask the instructor if you have doubts about what is considered cheating in this course.

If you have special needs for the classroom environment, homeworks, or quizzes, please inform the instructor during the first week of classes. If you have any such needs, you should go to the Student Academic Services Center to coordinate this. See Student Academic Services Center - Disabled Student Services for more information.