COURSE SYLLABUS
COP 4531/CGS 5427 Complexity and Analysis of Data Structures and Algorithms
Spring 2016
Prerequisites:
COP 4530 (this pre-requisites will not be waived), STA 2171, and PCB 4674.
Class Schedule:
Activity Day Time Location Lecture MW 3:35 pm - 4:50 pm HCB 215 Recitation 1-2 W 9:05 am - 9:55 am MCH 315 A Recitation 3 W 10:10 am - 11:00 am MCH 315 A Contact Information:
Instructor: Ashok Srinivasan Office hours: M 2 pm - 3 pm, W 11 am - 12 noon. 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: Jarrod Moore Office hours: TR 1:30 pm - 3 pm. Office: Computer Science Majors Lab, Love Building. Email: jdm10c AT my.fsu.edu Course Material:
Required Material
- Introduction to Algorithms, Third Edition by T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein, MIT Press, 2009, ISBN: 978-0-262-03384-8 or 978-0-262-53305-8.
- Supplementary material: mitpress.mit.edu/books/introduction-algorithms.
Computer Accounts
- You will need a computer account in the Computer Science department. Please follow the procedure outlined in https://system.cs.fsu.edu/newuser to obtain an account, if you do not have one already.
- Class email will be sent to your FSU account (@fsu.edu). So please obtain an FSU account, if you do not have one already. If you use another email account (such as yahoo), then you must forward your FSU email to that account.
- The subject line in any email you send me should start with
CIS 4930
.- You will need to use Blackboard (http://campus.fsu.edu).
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 this course, 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 Computational Biologist 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.
- The running time of the code may be small.
- The memory requirements for the code may be small. There may also be a trade-off between speed and memory requirements.
Learning Objectives:
At the end of this course, you should be able to accomplish the objectives given below.
- Define commonly used terminology.
- Describe commonly used algorithms, such as quicksort and Dijkstra's algorithm.
- Given a problem, develop an efficient algorithm to solve it.
- Given an algorithm, derive its time and space complexity.
- Given an algorithm, prove its correctness.
- Given an algorithm and its input, show the steps performed by that algorithm on that input.
- Given an algorithm, implement it efficiently.
- Given a code, analyze its performance, determine computational bottlenecks, and optimize the performance of the code.
Your Responsibilities:
Deadlines and InstructionsFollowing 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 FSU email account and the course web page on Blackboard regularly, and note other announcements, on-line and in class. You should also subscribe to the discussion board forums on Blackboard so that you get updated on new posts.
Class Participation
We will ask you questions in class and during recitation: (i) review questions on the previous lecture, and (ii) questions on the material currently being discussed, in order for us 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 we give. Of course, you cannot participate in class unless you attend it! You will be graded on these activities.
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, then please get help through the discussion board on Blackboard or from 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.
- Knowledge: Do you understand the terminology used? Given an algorithm and its input, can you describe the steps carried out by the algorithm and the output? Given a data structure or algorithm, can you write C++ code for it? Given an algorithm that you have studied, can you give the time and space complexity?
- Understanding: If some aspect of an algorithm were modified, can you analyze the time complexity? If some aspect of an algorithm were modified, can you prove or disprove its correctness? In order to answer these questions, you need to understand how each component of an algorithm affects the time complexity, and why each component of an algorithm is important for its correctness. After you learn about what an algorithm does (and have, thus, acquired "knowledge"), it will be useful for you to think of different things that can be changed, and see how these will affect the time complexity or correctness.
- Application: Given a real life, or artificial, problem, can you decide on suitable data structures and algorithms from those we have studied, to solve that problem?
- Creativity: Can you modify algorithms that we have studied, to make them more efficient for special situations? Given a problem for which our algorithm is not valid as designed, can you modify the algorithm to solve the problem, prove the correctness of your solution, and analyze its time complexity? Can you use multiple data structures and algorithms from those that we have studied, to solve a new problem?
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". Assignment submission instructions are available at www.cs.fsu.edu/~asriniva/courses/ualg16/HWinstructions.html. The programming assignments will be substantially more difficult than those in previous programming courses, and require substantially better quality effort. Please start working on the assignments as soon as they are announced, if you wish to complete them on time!
Course Calendar:
Week Lecture Chapter Assignments 1 6 Jan Introduction 2 11 Jan Growth functions -- Sec 3.1 - 3.2 13 Jan Divide-and-conquer -- Sec 4.1 - 4.2 3 18 Jan Martin Luther King Day: No Class 20 Jan Solving recurrences -- Sec 4.3 - 4.4 4 25 Jan Solving recurrences -- Sec 4.5 - 4.6 27 Jan Heapsort -- Sec 6.4 - 6.5 5 1 Feb Randomized Quicksort -- Sec 7.3 - 7.4 Assignment 1 announced 1 Feb 3 Feb Lower bound on sorting -- Sec 8.1 6 8 Feb Counting sort, radix sort, and bucket sort -- Sec 8.2 - 8.4 Assignment 1 due 12 Feb 10 Feb Randomized selection -- Sec 9.1 - 9.2 7 15 Feb Global sequence alignment: Needleman-Wunsch algorithm Programming assignment 2 announced 15 Feb 17 Feb Global sequence alignment: Hirschberg's algorithm 8 22 Feb Elements of dynamic programming -- Sec 15.3, Longest common subsequence -- Sec 15.4 24 Feb Midterm review 9 29 Feb Midterm Midterm this week! 2 Mar Activity selection and greedy strategy -- Sec 16.1 - 16.2 10 7 Mar Spring break 9 Mar Spring break 11 14 Mar Huffman codes -- Sec 16.3 Assignment 2 due 18 Mar 16 Mar Greedy algorithms review -- Sec 16.1 - 16.3 12 21 Mar Amortized analysis -- Sec 17.2 - 17.3 Assignment 3 announced 21 Mar 23 Mar Elementary graph algorthms -- Sec 22.1 - 22.3 13 28 Mar Topological sort and Strongly connected components -- Sec 22.4 - 22.5 Assignment 3 due 1 Apr 30 Mar Minimum spanning tree -- Sec 23.1 - 23.2 14 4 Apr Single source shortest path -- Sec 24.3 Prorgamming assignment 4 announced 4 Apr 6 Apr NP-completeness -- Sec 34.1 - 34.3 15 11 Apr NP-completeness -- Sec 34.4 - 34.5 Assignment 4 due 15 Apr 13 Apr Approximation algorithms -- Sec 35.1 16 18 Apr Approximation algorithms -- Sec 35.4 20 Apr Review for Final Exam 17 27 Dec Final Exam: Wednesday 12:30 pm - 2:30 pm Grading Criteria:
The overall grade in this course will be based on your performance in (i) exams, (ii) class participation, and (iii) 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/ualg16/classparticipation.html. Assignments consist of two programming projects and two written assignments.
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 \ tr>Class Participation 10 Midterm 20 Final Exam (comprehensive) 30 Assignments 40
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.Excused absences include documented illness, deaths in the immediate family and other documented crises, call to active military duty or jury duty, religious holy days, and official University activities. Accommodations for these excused absences will be made and will do so in a way that does not penalize students who have a valid excuse. Consideration will also be given to students whose dependent children experience serious illness.
You should let me know of absences in advance, when possible, and submit your documentation. 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/spring/exam_schedule.htm), for the midterm.Late Assignment Policy
In order to enable us to provide timely solutions to assignments, we have the following policy regarding submission of late assignments.
- An assignment that is turned in no more than 48 hours late will be scored with a 20% penalty.
- An assignment that is turned in more than 48 hours late will receive the score of zero, though we will review it and comment on it.
Grade of 'I' Policy
The grade of 'I' will be assigned only under the following exceptional circumstances:
- Due to an extended illness or other extraordinary circumstance, with appropriate documentation, the student is unable to participate in class for an extended period. In this case, arrangements must be made to make up the missed portion of the course prior to the end of the next semester.
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: The Florida State University Academic Honor Policy outlines the University's expectations for the integrity of students' academic work, the procedures for resolving alleged violations of those expectations, and the rights and responsibilities of students and faculty members throughout the process. Students are responsible for reading the Academic Honor Policy and for living up to their pledge to be honest and truthful and [to] strive for personal and institutional integrity at Florida State University. (Florida State University Academic Honor Policy can be found at http://fda.fsu.edu/content/download/21140/136629/AHPFinal2014.pdf .)
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.
ADA
Students with disabilities needing academic accommodation should: (1) register with and provide documentation to the Student Disability Center, and (2) bring a letter to the instructor indicating the need for accommodation and what type. This should be done during the first week of class. This syllabus and other class materials are available in alternative format upon request. For more information about services available to FSU students with disabilities, contact:
Student Disability Resource Center
874 Traditions Way
108 Student Services Building
Florida State University
Tallahassee, FL 32306-4167
(850) 644-9566 (voice)
(850) 644-8504 (TDD)
sdrc@admin.fsu.edu
http://www.disabilitycenter.fsu.eduSYLLABUS CHANGE POLICY:
This syllabus is a guide for the course and is subject to change with advanced notice.
Last modified: 2 Jan 2016