Computer Science 673: Graduate Algorithms

Fall 2016 Syllabus

Time: MWF 11:45-12:50 (section 1) MWF 1:00-2:05 (section 2)
Location: LS G12 (section 1), Harney 235 (section 2)
Professor: David Galles
    Office: HR 542
    Office Hours: TR 10:00 - 12:00 or by appointment
                        Though these are my stated office hours, I am in my office most of the day.
                        If my door is open (and it usually is), I am happy to talk with students.
    Phone: 422-5951
    Email: galles@usfca.edu

Text:
     Required: Cormen, Leiserson, Rivest, Stein Introduction to Algorithms, 3rd Edition

Prerequisite:
Graduate standing

Grading Policy
      Grades will be given according to scores on written homework assignments, midterms and finals, according to the following percentages.  

Assignment  Percentage Date
Homework 40% Approx. Weekly
Midterm 1 15% 10/05/2016
Midterm 2 15% 11/21/2016
Final 30% Wednesday, December 14th, 2016 3:00pm - 5:00pm (section 1)
Friday, December 9th, 2016 3:00pm - 5:00pm (section 2)


     Grades will be on a straight scale, with approximately:

A 90% and above
B 80%-89%
C 70%-79%
F 69% and below

These are percentages are upper limits -- thus a score of 90 is guaranteed to get at least an A-, 80 is guaranteed to get at least a B-, and so on.

Finals and Midterms
     Both midterms and the final will be partially open note.  You will be allowed to use your notes for this class, solutions to previous homework assignments, and the text for this course -- but you will not be allowed to use other texts or other resources.

Academic Honesty
     You are not allowed to search the web for solutions to the homework assignments. You are not allowed to use any solutions to previous version of this class in completing your homework assignments -- if you have any old solutions, throw them out now! While it is acceptable to discuss the homework problems at a high level with other students, you should not get into details, or tell another student the solution to a problem. You should write up the solutions to your homework problems entierly on your own. You should never look at the solutions of other students, or allow them to use your solutions.

Late Policy
     Late homeworks WILL NOT BE ACCEPTED.  If you have difficulty with an assignment, or some type of time conflict, the correct time to see me is before it is due.  Trying to get an extension on the due date itself will lead to sympathy from the instructor, but no extension.

Learning Objectives
      Upon sucssesful completion of this course, you should be able analyze the running time and space requirements for complex algorithms, both recursive and iterative. You will understand a variety of fundamental computer science algorithms, and be able to modify them to solve related problems. Most importantly, you will improve your "algorithmic thinking" skills, and be better able to create novel algorithms for new problems.

Tentative Course Outline

The following is subject to change, given the interests/knowledge of the students

Introductions
Algorithm Basics
Mathematical Foundations
    O(), Ω(), o(), ω() Θ()
    Recurrence Relations
    Proof Techniques
Randomized Algorithms
Sorting & Selection
    Heapsort, Quicksort, Randomized Quicksort, Mergesort
    Selection Problem
         O(n lg n) Quicksort (worst case)
    sub-O(n lg n) sorting
        counting sorts, radix sort, bucket sort
Modifying Data Structures
    Read/Black Trees & Interval Trees
    Leftest Heaps
    Fibonacci Heaps
Dynamic Programming
    Relation to Divide and Conquer
    Fibonacci Numbers
    Matrix Chain Multiplication
    Longest Common Subsequence
    Polygon Triangulation
Greedy Algorithms
    Scheduling
    Huffman Codes
    Proving Correctness
    Matroids
Amortized Analysis
    Basic Concepts
    Aggregate method
    Accounting method
    Potential Method
Graph Algorithms
    Graph representations
    BFS / DFS
    Spanning Trees
    Shortest Path
    Maximum Flow
Other Topics (Time permitting)
    String Matching
    RSA & Encription
    Computational Geometry
    Approximation Algorithms