FSU Seal - 1851

    COURSE SYLLABUS

    COP 4531/CGS 5427 Complexity and Analysis of Data Structures and Algorithms
    Spring 2007


Prerequisites:

COP 4530, STA 4442, and either MAD 3107 or MAD 3105. The pre-requisites will not be waived.

Class Schedule:

Activity Day Time Location
Lecture MW 3:35 pm - 4:50 pm MCH 201
Recitation - Sec 1 F 11:15 am - 12:05 pm LOV 301
Recitation - Sec 2 F 12:20 pm - 1:10 pm LOV 301

Contact Information:

Instructor: Ashok Srinivasan
Office hours: T 3:30 pm - 4:30 pm, F 2:30 pm - 3:30 pm. I am also usually available in my office, and you can feel free to meet me in the afternoons, except before class. Alternatively, you may schedule an appointment, either by email or by phone.
Office: 169, Love Building
Phone: 644-0559
Email: asriniva AT cs.fsu.edu

Teaching
Assistant:

Niraj Pandey
Office hours: F 1:15 pm - 2:15 pm
Office: MCH 114
Phone: 644-5309
Email: pandey AT cs.fsu.edu

Course Material:

Required Material
Computer Accounts

Course Rationale:

So far, you have acquired proficiency in programming in your two programming courses and in the data structures course (COP 4530). In COP 4530, you also learned different ways of organizing data to facilitate efficient access to them. In COP 4531, you will use these data structures to solve commonly encountered computer science problems efficiently. You will also further develop your skills in analyzing the time complexity and in proving the correctness of your programs in a mathematically rigorous manner. Material that you learn in this course will enable you to make efficient use of computational resources, which is important to your becoming a good software developer later.

Course Description:

In this course, you will learn to develop efficient algorithms, analyze their running time and space requirements, and implement them efficiently. Algorithms and programs may be efficient in the following two respects:

In order to solve a problem efficiently, it is important to use efficient algorithms and also to implement the algorithms efficiently in code. You will learn the former in class. Your programming expertise should enable you to translate this knowledge into efficient code. This course maintains a balance between theory and programming, which will enable you to solve a problem efficiently.

Learning Objectives:

At the end of this course, you should be able to accomplish the objectives given below.

Your Responsibilities:

Deadlines and Instructions

Following the same professional guidelines that you will encounter at work, there are strict deadlines, and instructions that must be followed. Please read instructions carefully, and schedule your activities so that you submit assignments well in time. You should check your garnet email account and the class web page regularly, and note other announcements, on-line and in class.

Class Participation and Quizzes

I will ask you questions in class: (i) review questions on the previous lecture, and (ii) questions on the material currently being discussed, in order for me to obtain feedback on how well you understand the material. You should be prepared to answer these questions, and should also participate by asking questions, suggesting ideas, and performing in-class assignments that I give. Of course, you cannot participate in class unless you attend it! The recitations too form an important component of the course. You will be given quizzes during most recitations, on material covered since the previous quiz, and you will also be asked to write small programs and perform other tasks. You will be graded on these too.

Reading Assignments

After each lecture, you will be given a reading assignment pertaining to that lecture. You should read these, and also practice writing code. New material builds on the old ones. So, if you have trouble with some material, please get help through the discussion board on Blackboard, or from a teaching assistant or me, before the next class. You should also peruse the material for the next lecture, and be prepared to answer questions on it, which I will provide in advance. I expect that you will need to spend between one and two hours studying for each lecture. The assignments and exams will consume additional time. The following learning components are important, and you may want to verify if you do satisfactorily on these, after studying the material.

Homework Assignments

You will have two programming assignments and two written assignments in this course, and you will have around ten days to work on each one. The assignments will be announced on the Blackboard course web site under "Assignments". We will also discuss them during the recitations. Assignment submission instructions are available at www.cs.fsu.edu/~asriniva/courses/ualg07/HWinstructions.html. The programming assignments will be substantially more difficult than those in previous programming courses, and require substantially more time and effort. Please start working on the assignments as soon as they are announced, if you wish to complete them!

Course Calendar:

Week Lecture Chapter Assignments
1 8 Jan Introduction. Test on pre-requisite material
during recitation Friday.
10 Jan Analyzing algorithms -- Sec 2.1 - 2.2
2 15 Jan Martin Luther King day -- no class.
17 Jan Designing algorithms -- Sec 2.3
3 22 Jan Recurrences -- Sec 4.1
24 Jan Recurrences -- Sec 4.2
4 29 Jan Recurrences -- Sec 4.3 - 4.4 (until 4.4.1) Assignment 1 announced 29 Jan.
31 Jan Amortized analysis -- Sec 17.2 - 17.3
5 5 Feb Heap sort -- Sec 6.4 - 6.5 Assignment 1 due 8 Feb.
Programming assignment 2 announced 8 Feb.
7 Feb Quicksort -- Sec 7.1 - 7.2
6 12 Feb Randomized quicksort -- Sec 7.3 - 7.4
14 Feb Lower bound on sorting -- Sec 8.1
7 19 Feb Counting sort and Radix sort -- Sec 8.2 - 8.3 Assignment 2 due 22 Feb.
21 Feb Midterm review
8 26 Feb Midterm Midterm this week!
28 Feb Randomized selection -- Sec 9.1 - 9.2
9 5 Mar Spring break -- no class.
7 Mar Spring break -- no class.
10 12 Mar Deterministic selection -- Sec 9.3
14 Mar Matrix-chain multiplication -- Sec 15.2
11 19 Mar Elements of dynamic programming -- Sec 15.3
21 Mar Longest common subsequence -- Sec 15.4
12 26 Mar Activity selection and greedy strategy -- Sec 16.1 - 16.2
28 Mar Huffman codes -- Sec 16.3
13 2 Apr Greedy algorithms review -- Sec 16.1 - 16.3 Assignment 3 announced 2 Apr.
4 Apr Elementary graph algorithms -- Sec 22.4 - 22.5
14 9 Apr Minimum spanning tree -- Sec 23.1 - 23.2 Assignment 3 due 9 Apr.
Programming assignment 4 announced 9 Apr.
11 Apr Disjoint-set Union -- Sec 21.1, 21.3
15 16 Apr Dijkstra's algorithm -- Sec 24.3 Assignment 4 due 19 Apr.
18 Apr Floyd-Warshall algorithm -- Sec 25.2
16 27 Apr Final exam: Friday 3:00 - 5:00 pm.

Grading Criteria:

The overall grade for COP 4531 is based on your performance in (i) exams, (ii) quizzes, (iii) test on pre-requisite material, (iv) class participation, and (v) assignments, with weights as given in Table 1. Exams consist of a midterm and a final exam. Class participation consists of answering questions correctly in class, and other positive contributions, discussed in greater detail at www.cs.fsu.edu/~asriniva/courses/ualg07/classparticipation.html. Assignments consist of two programming projects and two written assignments. Quizzes will be given during most recitation sessions. You will also be give a test on pre-requisite material in the first week of classes, which will have a higher weight than a quiz.

Your weighted average in the midterm and final exam should be at least 70% for you to get a course grade of C or better. If you meet this constraint, then your final grade will be determined using Table 2.

    Table 1: Course Points
    Item Weight
    Test and Quizzes 10
    Class Participation 5
    Midterm 20
    Final Exam (comprehensive) 25
    Assignment 1, 3 15
    Assignment 2, 4 25
    Table 2: Letter Grades
    Points Grade
    92 - 100 A
    90 - 91 A-
    88 - 89 B+
    82 - 87 B
    80 - 81 B-
    78 - 79 C+
    72 - 77 C
    70 - 71 C-
    68 - 69 D+
    62 - 67 D
    60 - 61 D-
    0 - 59 F

NOTE: You must earn a weighted average of 70% in the exams to be awarded a course grade of C or better. For example, if you obtain a total of 78%, but an exam average of only 65%, then you will not get a C+. Instead, you will get a C-, because that is the highest grade for which you will be eligible without meeting the exam cutoff.

Programming assignment Assessment

You must understand your project work. If you are asked to explain your work, and you are unable to do so, you may be assigned a grade of zero.

Course Policies:

Attendance Policy

The university requires attendance in all classes, and it is also important to your learning. The attendance record may be provided to deans who request it. If your grade is just a little below the cutoff for a higher grade, then your attendance will be one of the factors that we consider in deciding whether to "bump" you up to the higher grade. Missing three or fewer lectures will be considered good attendance. In rare cases, such as medical needs or jury duty, absences may be excused with appropriate documentation. You should let me know in advance, when possible, and submit the documentation I seek. You should make up for any materials missed due to absences.

Missed Exam Policy

A missed exam will be recorded as a grade of zero. We will follow the university rules regarding missed final exams (see http://registrar.fsu.edu/dir_class/fall/exam_schedule.htm), for all the exams, including the final exam.

Late Assignment Policy

In order to enable us to provide timely solutions to assignments, we have the following policy regarding submission of late assignments.

Grade of 'I' Policy

The grade of 'I' will be assigned only under the following exceptional circumstances:

Professional Ethics

You will gain confidence in your ability to design and implement algorithms only when you write the code yourself. On the other hand, one does learn a lot through discussions with ones peers. In order to balance these two goals, I give below a list of things that you may, and may not, do.

Things you may not do: You should not copy code from others. This includes directly copying the files, replacing variable names in their code with different names, altering indentation, or making other modifications to others' code, and submitting it as your own. (You may also wish to note that many of the modifications that make codes look very different in a higher level language, yield lower level representations that are very close, and are easy to detect.) Furthermore, you should take steps to ensure that others cannot copy code from you -- in particular, you should have all permissions on assignment files and directories unset for others.

Things you may do: You may discuss specific problems related to use of the computer, useful utilities, and some good programming practices, with others. For example, you may ask others about how to submit your homework, or how to use the debugger or text editor. Honor Code: Students are expected to uphold the academic honor code published in "The Florida State University Bulletin" and the "Student Handbook". Please read the provisions of the Academic Honor Code: http://dof.fsu.edu/honorpolicy.htm.

Plagiarism:

Plagiarism is "representing another's work or any part thereof, be it published or unpublished, as ones own. For example, plagiarism includes failure to use quotation marks or other conventional markings around material quoted from any source" (Florida State University General Bulletin 1998-1999, p. 69). Failure to document material properly, that is, to indicate that the material came from another source, is also considered a form of plagiarism. Copying someone else's program, and turning it in as if it were your own work, is also considered plagiarism.

SYLLABUS CHANGE POLICY:

This syllabus is a guide for the course and is subject to change with advanced notice.


Last modified: 11 Apr 2007