COURSE SYLLABUS
COT 5405: Advanced Algorithms
Fall 2013
Prerequisites:
COP 4531: Analysis of Data Structures and Algorithms (this pre-requisite will not be waived). You are also expected to have the mathematical maturity to write formal proofs and algorithms.
Lecture hours:
MWF 2:30 pm - 3:20 pm, LOV 103.
Contact information:
Instructor: Ashok Srinivasan Office hours: M 3:30 pm - 4:30 pm, W 1:15 pm - 2:15 pm. I am also usually available in my office, and you can feel free to meet me in the afternoons. 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 Course web site: http://www.cs.fsu.edu/~asriniva/courses/alg13.
Text books and other material:
- Required:
- Approximation algorithms, V. V. Vazirani, Springer, 2003. (A draft is available online at: http://www.cc.gatech.edu/fac/Vijay.Vazirani/book.pdf.) Note: You will be given handouts for all material from sources other than this book.
- Coursemodo account: Sign up for an account at www.coursemodo.com and register for COT 5405. There is a $15 fee associated with this, which covers all courses this semester. Coursemodo will be partially used to evaluate your class participation grade. You will need to bring a cell phone or an internet connected laptop/tablet to class and recitations in order to use this.
- Other references:
- Introduction to algorithms, T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein, second edition, MIT press, 2001. (Referred to as CLR).
- Randomized Algorithms, R. Motwani and P. Raghavan, Cambridge University Press, 1995 (Referred to as RA).
- A compendium of NP optimization problems, www.nada.kth.se/~viggo/problemlist/compendium.html. (Referred to as VK).
Course rationale:
In your undergraduate algorithms course, you learned efficient algorithms for many common problems in computer science. In this course, you will learn algorithms that use more sophisticated techniques than the ones in the undergraduate course. Many of the algorithms relate to some type of optimization, and arise in many important applications, which you will typically encounter in other graduate courses, your research, and in the real-world. While the applications are important, the techniques used to solve them are well beyond the scope of an undergraduate course.As an example, there is a class of problems called NP hard, for which it is believed that efficient algorithms cannot be developed. Many important optimization problems belong to this class. While showing a problem to be NP hard relieves you from the responsibility of designing an efficient algorithm to solve it, the problem itself does not disappear, and you still need to be able to do something about it. In this course, you will learn techniques to find reasonably good approximate solutions efficiently, for many NP hard problems.
Thus, techniques you learn in this course will enable you to solve important problems that you would not be able to solve otherwise. Furthermore, you will also learn more powerful techniques for analysis of the algorithms, and learn to write formal proofs, which will help you in your research.
Course description:
Problems that you have studied so far were somewhat simple, in the sense that the algorithms used to solve them were rather straightforward. From example, it was easy to see that an algorithm was correct and to determine its time complexity. Topics we discuss in this course can be broadly classified into two categories: (i) difficult problems, for which we think it is unlikely that efficient algorithms exist, and (ii) difficult algorithms, for which proof of correctness or analysis of time complexity are difficult. The discussion will sometimes span both categories, when we discuss approximation algorithms for the difficult problemsTo be more specific, we will discuss the following topics. (i) We will first study techniques to find approximate solutions to NP hard optimization problems. The emphasis will be on techniques based on linear programming, which are applicable to a wide variety of problems, rather than on ad-hoc solutions to specific problems. (ii) We will next study parallel algorithms, where several processors work together to solve a given problem. We will see that efficient parallelization sometimes requires solving an NP hard optimization problem too. (iii) Typical analyses of algorithms use the computational effort of an algorithm to measure their efficiency. However, in modern processors, efficient use of the memory hierarchy is the major bottleneck, rather than operations in the CPU. We will discuss cache-aware and cache-oblivious algorithms, which exploit the memory hierarchy efficiently. (iv) We will finally discuss randomized algorithms. Fortunately, these algorithms do not give random answers. The answers are always correct for the algorithms we discuss, but the time taken for a given input can vary. Randomized algorithms can often improve the expected time complexity significantly.
This course does not require extensive programming. However, it does involve deep thinking and rigorous theoretical analyses. Therefore, much mathematical maturity is required of you. (However, specific mathematical skills, beyond those learned in undergraduate Discrete Mathematics courses, are not required.) For example, you should be able to understand and write formal proofs. This course will also require you to be creative; you will need to solve problems that differ from the ones discussed in class, though the solution strategies will often be related to those discussed.
Learning objectives:
By the end of the semester, you should develop the following skills: (i) understand and apply the algorithms discussed in class, prove their correctness, and analyze their time complexity in a mathematically rigorous manner, (ii) understand the basic idea behind the techniques, so that you are able to develop algorithms for new problems where these techniques can be applied, and (iii) given a practical application, identify the computational issues and apply suitable algorithms to solve it effectively. We give more details below (objectives shown in bold are particularly important). You will also later be given more specific objectives for each lecture.Approximation algorithms
- Define the following terms: (i) combinatorial optimization, (ii) approximation factor of an approximation algorithm, (iii) polynomial time approximation scheme, and (iv) fully polynomial time approximation scheme.
- Given a problem instance, show steps in the approximation algorithms for the following problems: vertex cover (two algorithms), set cover (three algorithms), knapsack, and maximum satisfiability.
- Analyze the time complexity and determine the approximation factor for each of the above algorithms and its variants.
- Given an NP hard combinatorial optimization problem, give an approximation algorithm for it and determine its approximation factor.
- Given an application, abstract its computational structure, give an approximation algorithm to solve it, and derive its approximation factor.
- Explain the use of linear programming, with rounding, randomized rounding, derandomization of the rounding, and primal-dual schemes, to approximately solve NP hard problems.
- Explain the use of semidefinite programming to approximately solve NP hard problems.
Parallel algorithms
- Give justifications for the model we used to analyze the time complexity of parallel algorithms.
- Define the terms speedup and efficiency.
- Given a parallel algorithm, analyze its time complexity.
- Give efficient algorithms to perform common operation such as reduction, broadcast, gather, scatter, all-gather, and parallel prefix, and derive their time complexity.
- Explain the steps in the algorithms we discuss for solving linear recurrences and matrix operations, apply these algorithms to instances of problems, and also derive the time complexity of these parallel algorithms.
- Given a problem, develop a parallel algorithm for it and analyze its time complexity.
- Explain the use of graph partitioning in parallel computation, give the limitations of the edge cut metric to measure communication cost, and propose improvements to the edge-cut metric.
- Given a graph, show how the spectral method partitions the graph.
- Formally justify the use of the spectral method as a heuristic for graph partitioning.
Cache-aware and cache-oblivious algorithms
- Describe the ideal cache model and derive the number of cache misses for the simple matrix multiplication algorithm.
- Show how blocking can be used to reduce the number of cache misses in matrix multiplication.
- Show how recursion can be used to reduce the number of cache misses in a "cache-oblivious" manner.
Randomized algorithms
- Given a sequence of integers and a sequence of random numbers, demonstrate the steps in the randomized selection algorithm Find.
- Analyze the expected time complexity of the above selection algorithm.
- Analyze the time complexity of modifications to the randomized sorting and selection algorithms discussed above.
Grading criteria:
Class participation and review questions 15 Two homework assignments 2 x 15 = 30 Two midterms 2 x 20 = 40 Project 15
Course average Letter grade 90 - 100 A 85 - 90 A- 80-85 B+ 75-80 B 70-75 B- 0-70 F to C+ Your grade will be based on the scores obtained in the above categories, with weights as given above. You should also score at least 70% in the average of the two midterm exams in order to get a grade of B or higher. Note that the thresholds for grades are a little lower than they normally are in other courses. Please don't think this makes it easier to obtain a high grade. They are lower because the exams are more difficult!
- Examples
- If you get 82% total and 90% on the exams, your grade will be B+.
- If you get 82% total and 65% on the exams, you will not get B+. Your grade will be B-, since the exam grade is below 70%.
- Class participation and review questions
- Class participation consists of answering questions correctly in class, and other positive contributions, discussed in greater detail at www.cs.fsu.edu/~asriniva/courses/alg13/classparticipation.html.
- Assignments
- Assignments will mostly be theoretical, with only simple programming involved. Hardcopies for the theoretical part should be turned in to me in my office. If I am not in my office, you can slip it under my door. Assignments are due 5 pm on the due date. Code should be turned in through Blackboard.
- Midterm and final exams
- Both exams will be closed book. You will be tested on knowledge, understanding, and application of material discussed in class. You will also have some questions testing your ability to creatively solve new problems, using techniques discussed in class. The final exam will be comprehensive.
Your responsibilities:
- Deadlines and instructions
- Following the same professional guidelines that you will encounter in business, 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 class web page regularly, and note other announcements, on-line and in class.
- Participation
- 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!
- Reading assignments
- You will have a reading assignment for each lecture, which you should read. New material often builds on the old ones. So, if you have trouble with some material, please get help 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: Examples -- Do you understand the terminology used? Given an algorithm and problem instance, can you describe the steps carried out by the algorithm and the output?
- Understanding: Examples -- If some aspect of an algorithm, were modified, can you analyze the time complexity, prove its correctness, or prove that it is incorrect? If some aspect of the problem where changed, can you suggest modifications to the algorithm used to solve it? In order to answer such questions, you need to understand how each component of an algorithm problem 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 that will affect the time complexity or correctness. Similarly, you have to understand how different aspects of the problem are dealt with by different components of the algorithm.
- Theoretical analysis: You can often intuitively understand why an algorithm works, or why its time complexity is what we claim it to be. However, you should also learn to formally prove this in a mathematically rigorous manner. You will also need to write algorithms precisely. Students often have trouble with this. I suggest that, until you attain some proficiency in these skills, you practice writing proofs and algorithms for review questions that I post after each lecture, and get feedback from me.
- 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, and then prove the correctness of your solution, and analyze its time complexity? Questions related to creativity will form the major part of the grade.
- Assignments
- You will have two assignments in this course, and you will have around ten days to work on each one.
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, 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.
- 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:
- The final exam is missed with an accepted excuse for the absence. In this case, the final exam must be made up during the first two weeks of the following semester.
Professional ethics
You will gain confidence in your ability only when you do the work independently. 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 from the assignments of other students. This includes directly copying or making modifications to others' assignments. If you happen to find a solution to an assignment problem from another source, you may not copy it. Furthermore, you should take steps to ensure that others cannot copy your assignment.
Things you may do: You may ask others about (i) terminology that you do not understand, (ii) clarifications on what is required of you in an assignment problem (though you may be much better of asking me), and (iii) how to submit your assignment. After the assignment has been graded, you are encouraged to discuss each others' solutions.
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://www.fsu.edu/Books/Student-Handbook/codes/honor.html. Also read the section on "Honor code" below.
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. For more information about services available to FSU students with disabilities, contact:Student Disability Resource Center
Dean of Students Department
08 Kellum Hall
Florida State University
Tallahassee, FL 32306-4400
(850) 644-9566 (voice)
(850) 644-8504 (TDD)
sdrc@admin.fsu.edu
http://www.fsu.edu/~staffair/dean/StudentDisability/
Course calendar:
Week Lecture Chapter Assignments 1 26 Aug 1. Introduction. 28 Aug 2. Approximation algorithms -- Vertex cover, chapter 1 30 Aug Discuss solutions to problems. 2 2 Sep Labor day -- no class. 4 Sep 3. Approximation algorithms -- Vertex cover, chapter 1 6 Sep Discuss solutions to problems. 3 9 Sep 4. Approximation algorithms -- Set cover, chapter 2 11 Sep 5. Approximation algorithms -- Set cover, chapter 2 13 Sep Discuss solutions to problems. 4 16 Sep 6. Approximation algorithms -- Knapsack, chapter 8 18 Sep 7. Approximation algorithms -- Knapsack, chapter 8 20 Sep Discuss solutions to problems. 5 23 Sep 8. Linear programming, chapter 12 25 Sep 9. Linear programming, chapter 12 27 Sep Discuss solutions to problems. 6 30 Sep 10. Approximation algorithms -- Rounding applied to set cover, chapter 14 Assignment 1 announced Oct 1 2 Oct 11. Approximation algorithms -- Rounding applied to set cover, chapter 14 4 Oct Discuss solutions to problems. 7 7 Oct 12. Approximation algorithms -- Set cover via primal-dual schema, chapter 15 9 Oct 13. Approximation algorithms -- Set cover via primal-dual schema, chapter 15 11 Oct Discuss solutions to problems. 8 14 Oct Midterm review Assignment 1 due Oct 14 16 Oct Midterm 1 18 Oct Discuss solutions to midterm. 9 21 Oct 14. Approximation algorithms -- Maximum satisfiability, chapter 16 Project topic due: Oct 21 23 Oct 15. Approximation algorithms -- Maximum satisfiability, chapter 16 25 Oct Discuss solutions to problems. 10 28 Oct 16. Approximation algorithms -- Semidefinite programming, chapter 26 30 Oct 17. Approximation algorithms -- Semidefinite programming, chapter 26 1 Nov Discuss solutions to problems. 11 4 Nov 18. Parallel algorithms, class notes 6 Nov 19. Parallel algorithms, class notes 8 Nov Discuss solutions to problems. 12 11 Nov Veteran's day -- no class. Assignment 2 announced Nov 13 13 Nov 20. Cache aware and cache oblivious algorithms, handout 15 Nov Homecoming -- no class 13 18 Nov 21. Cache aware and cache oblivious algorithms, handout Project progress report due: Nov 18 20 Nov 22. Randomized algorithms, handout. 22 Nov 23. Randomized algorithms, handout. 14 25 Nov Discuss solutions to problems. Assignment 2 due Nov 26 27 Nov Thanksgiving -- no class 29 Nov Thanksgiving -- no class 15 2 Dec Midterm review 4 Dec Midterm 2 7 Dec Discuss solutions to midterm. 16 9-13 Dec Project demonstrations Project report due Dec 9 SYLLABUS CHANGE POLICY:
This syllabus is a guide for the course and is subject to change with advanced notice.
Last modified: 16 Nov 2013