CS 122 Fall 2010 Running Course Outline 1. Outline of Sept. 24 class: Intro to course, Complexity rules of the road (see handout on the class website). See the first supplemental video on the past video lectures for a lecture on this material. 2. Sept. 27: big-oh, omega and theta notation. Description of Mergesort and Merge and the start of their time analysis. Algorithm Merge is proved correct by induction on the sum of the sizes of the two lists. The worst-case number of comparisons in algorithm Merge on two lists of total size n is n-1 (why?). 3. Sept. 29: Worst case analysis of MergeSort by setting up a recurrence relation and solving it by unwrapping. 4. Oct. 1: Solving a more complex recurrence relation by unwrapping. Introduction to the problem of counting the number of inversions in a permutation. 5. Oct. 4. Counting the number of inversions in a permutation. Introduction to fast integer multiplication by divide and conquer. 6. Oct. 6. Finished the discussion of integer multiplication by divide and conquer. Started the discussion of randomized Selection, which will lead to randomized quicksort. 7. Oct. 8. More on randomized selection, setting up the analysis problem, random variables, expected value (mean), partial derivation of the mean of a geometric distribution. 8. Oct. 11 Complete analysis of the expected number of comparisons in the randomized version of Select(S,k) as a function of |S| = n. The expected number is at most 8|S| = O(n) 9. Oct. 13 Start of discussion of greedy algorithms. We looked at the problem of picking the largest number of non-overlapping intervals. 10. Oct. 15 Dijkstra's algorithm for shortest paths in a graph with non-negative edge weights. 11. Oct. 18 Start of discussion of the minimum spanning tree problem. Prim's algorithm and proof of correctness and running time. Kruskal's algorithm. 12. Oct. 20 proof of correctness of Kruskal's algorithm. Return to scheduling problems - classroom scheduling problem, algorithm and correctness. 13. Oct. 22 Introduction to recursive programming and memoization through the problem of computing the maximum weight set of pairwise non-overlapping intervals. 14. Oct. 25 midterm 15. Oct. 27 review of memoization, introduction to dynamic programming in the weighted interval problem. traceback in DP. 16. Oct. 29 introduction to the RNA folding problem and recurrences for it. 17. Nov. 1 dynamic programming for RNA folding. 18. Nov. 3 dynamic programming for the shortest path problem in a weighted directed graph. 19. Nov. 5 Floyd-Warshal algorithm for computing the shortest path in a weighted graph, between each pair of nodes in the graph. 20. Nov. 8. The unique-decypherability problem. Definitions and start of algorithm. 21. Nov. 10 Unique-decypherability - algorithm, proof of correctness. 22. Nov. 12 Linear-time pattern matching. Z-values and Z-algorithm. 23. Nov. 15 Linear-time pattern matching. Z-values and Z-algorithm. 24. Nov. 17 Approximation Algorithms - definition, example of a factor of two approximation algorithm - center cover problem. 25. Nov. 19 Approximation Algorithms - factor of two approximation to the vertex cover problem. 26. Nov. 22 Introduction to P and NP and poly-time reductions 27. Nov. 24 An intuitive view of NP - not the correct formal definition 28. Nov. 26 thanksgiving holiday 29. Nov. 29 Correct, formal definitions of P and NP, ending with a fast definition of NP-complete problems (languages) 30. Dec. 1 The major theorems of NP-completeness, P = NP question, the mechanics of how to prove a new problem is NP-complete. 31. Dec. 3 Dealing with NP-complete problems - approximation algorithms, fast algorithms for subsets of the whole set of problem instances, reducing the growth rate of exponential-time solutions. A DP algorithm for the Traveling Salesman problem for n cities that runs in O(n^2 x 2^n) time, instead of the more naive method that would take theta(n!) time.