# CS 332: Algorithms - PowerPoint PPT Presentation  Download Presentation CS 332: Algorithms

CS 332: Algorithms
Download Presentation ## CS 332: Algorithms

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
##### Presentation Transcript

1. CS 332: Algorithms Review for Final David Luebke 16/9/2014

2. Final Exam • Coverage: the whole semester • Goal: doable in 2 hours • Cheat sheet: you are allowed two 8’11” sheets, both sides David Luebke 26/9/2014

3. Final Exam: Study Tips • Study tips: • Study each lecture • Study the homework and homework solutions • Study the midterm exams • Re-make your previous cheat sheets • I recommend handwriting or typing them • Think about what you should have had on it the first time…cheat sheets is about identifying important concepts David Luebke 36/9/2014

4. Graph Representation • Adjacency list • Adjacency matrix • Tradeoffs: • What makes a graph dense? • What makes a graph sparse? • What about planar graphs? David Luebke 46/9/2014

5. Basic Graph Algorithms • Breadth-first search • What can we use BFS to calculate? • A: shortest-path distance to source vertex • Depth-first search • Tree edges, back edges, cross and forward edges • What can we use DFS for? • A: finding cycles, topological sort David Luebke 56/9/2014

6. Topological Sort, MST • Topological sort • Examples: getting dressed, project dependency • To what kind of graph does topological sort apply? • Minimum spanning tree • Optimal substructure • Min edge theorem (enables greedy approach) David Luebke 66/9/2014

7. MST Algorithms • Prim’s algorithm • What is the bottleneck in Prim’s algorithm? • A: priority queue operations • Kruskal’s algorithm • What is the bottleneck in Kruskal’s algorithm? • Answer: depends on disjoint-set implementation • As covered in class, disjoint-set union operations • As described in book, sorting the edges David Luebke 76/9/2014

8. Single-Source Shortest Path • Optimal substructure • Key idea: relaxation of edges • What does the Bellman-Ford algorithm do? • What is the running time? • What does Dijkstra’s algorithm do? • What is the running time? • When does Dijkstra’s algorithm not apply? David Luebke 86/9/2014

9. Disjoint-Set Union • We talked about representing sets as linked lists, every element stores pointer to list head • What is the cost of merging sets A and B? • A: O(max(|A|, |B|)) • What is the maximum cost of merging n 1-element sets into a single n-element set? • A: O(n2) • How did we improve this? By how much? • A: always copy smaller into larger: O(n lg n) David Luebke 96/9/2014

10. Amortized Analysis • Idea: worst-case cost of an operation may overestimate its cost over course of algorithm • Goal: get a tighter amortized bound on its cost • Aggregate method: total cost of operation over course of algorithm divided by # operations • Example: disjoint-set union • Accounting method: “charge” a cost to each operation, accumulate unused cost in bank, never go negative • Example: dynamically-doubling arrays David Luebke 106/9/2014

11. Dynamic Programming • Indications: optimal substructure, repeated subproblems • What is the difference between memoization and dynamic programming? • A: same basic idea, but: • Memoization: recursive algorithm, looking up subproblem solutions after computing once • Dynamic programming: build table of subproblem solutions bottom-up David Luebke 116/9/2014

12. LCS Via Dynamic Programming • Longest common subsequence (LCS) problem: • Given two sequences x[1..m] and y[1..n], find the longest subsequence which occurs in both • Brute-force algorithm: 2m subsequences of x to check against n elements of y: O(n 2m) • Define c[i,j] = length of LCS of x[1..i], y[1..j] • Theorem: David Luebke 126/9/2014

13. Greedy Algorithms • Indicators: • Optimal substructure • Greedy choice property: a locally optimal choice leads to a globally optimal solution • Example problems: • Activity selection: Set of activities, with start and end times. Maximize compatible set of activities. • Fractional knapsack: sort items by \$/lb, then take items in sorted order • MST David Luebke 136/9/2014

14. NP-Completeness • What do we mean when we say a problem is in P? • A: A solution can be found in polynomial time • What do we mean when we say a problem is in NP? • A: A solution can be verified in polynomial time • What is the relation between P and NP? • A: PNP, but no one knows whether P = NP David Luebke 146/9/2014

15. Review: NP-Complete • What, intuitively, does it mean if we can reduce problem P to problem Q? • P is “no harder than” Q • How do we reduce P to Q? • Transform instances of P to instances of Q in polynomial time s.t. Q: “yes” iff P: “yes” • What does it mean if Q is NP-Hard? • Every problem PNP p Q • What does it mean if Q is NP-Complete? • Q is NP-Hard and Q  NP David Luebke 156/9/2014

16. Review: Proving Problems NP-Complete • What was the first problem shown to be NP-Complete? • A: Boolean satisfiability (SAT), by Cook • How do we usually prove that a problem Ris NP-Complete? • A: Show R NP, and reduce a known NP-Complete problem Q to R David Luebke 166/9/2014

17. Review: Reductions • Review the reductions we’ve covered: • Directed hamiltonian cycle  undirected hamiltonian cycle • Undirected hamiltonian cycle  traveling salesman problem • 3-CNF  k-clique • k-clique  vertex cover • Homework 7 David Luebke 176/9/2014

18. Next: Detailed Review • Up next: a detailed review of the first half of the course • The following 100+ slides are intended as a resource for your studying • Since you probably remember the more recent stuff better, I just provide this for the early material David Luebke 186/9/2014

19. Review: Induction • Suppose • S(k) is true for fixed constant k • Often k = 0 • S(n)  S(n+1) for all n >= k • Then S(n) is true for all n >= k David Luebke 196/9/2014

20. Proof By Induction • Claim:S(n) is true for all n >= k • Basis: • Show formula is true when n = k • Inductive hypothesis: • Assume formula is true for an arbitrary n • Step: • Show that formula is then true for n+1 David Luebke 206/9/2014

21. Induction Example: Gaussian Closed Form • Prove 1 + 2 + 3 + … + n = n(n+1) / 2 • Basis: • If n = 0, then 0 = 0(0+1) / 2 • Inductive hypothesis: • Assume 1 + 2 + 3 + … + n = n(n+1) / 2 • Step (show true for n+1): 1 + 2 + … + n + n+1 = (1 + 2 + …+ n) + (n+1) = n(n+1)/2 + n+1 = [n(n+1) + 2(n+2)]/2 = (n+1)(n+2)/2 = (n+1)(n+1 + 1) / 2 David Luebke 216/9/2014

22. Induction Example:Geometric Closed Form • Prove a0 + a1 + … + an = (an+1 - 1)/(a - 1) for all a != 1 • Basis: show that a0 = (a0+1 - 1)/(a - 1) a0 = 1 = (a1 - 1)/(a - 1) • Inductive hypothesis: • Assume a0 + a1 + … + an = (an+1 - 1)/(a - 1) • Step (show true for n+1): a0 + a1 + … + an+1 = a0 + a1 + … + an + an+1 = (an+1 - 1)/(a - 1) + an+1 = (an+1+1 - 1)(a - 1) David Luebke 226/9/2014

23. Review: Analyzing Algorithms • We are interested in asymptotic analysis: • Behavior of algorithms as problem size gets large • Constants, low-order terms don’t matter David Luebke 236/9/2014

24. An Example: Insertion Sort i =  j =  key = A[j] =  A[j+1] =  30 10 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 246/9/2014

25. An Example: Insertion Sort i = 2 j = 1 key = 10A[j] = 30 A[j+1] = 10 30 10 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 256/9/2014

26. An Example: Insertion Sort i = 2 j = 1 key = 10A[j] = 30 A[j+1] = 30 30 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 266/9/2014

27. An Example: Insertion Sort i = 2 j = 1 key = 10A[j] = 30 A[j+1] = 30 30 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 276/9/2014

28. An Example: Insertion Sort i = 2 j = 0 key = 10A[j] =  A[j+1] = 30 30 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 286/9/2014

29. An Example: Insertion Sort i = 2 j = 0 key = 10A[j] =  A[j+1] = 30 30 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 296/9/2014

30. An Example: Insertion Sort i = 2 j = 0 key = 10A[j] =  A[j+1] = 10 10 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 306/9/2014

31. An Example: Insertion Sort i = 3 j = 0 key = 10A[j] =  A[j+1] = 10 10 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 316/9/2014

32. An Example: Insertion Sort i = 3 j = 0 key = 40A[j] =  A[j+1] = 10 10 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 326/9/2014

33. An Example: Insertion Sort i = 3 j = 0 key = 40A[j] =  A[j+1] = 10 10 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 336/9/2014

34. An Example: Insertion Sort i = 3 j = 2 key = 40A[j] = 30 A[j+1] = 40 10 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 346/9/2014

35. An Example: Insertion Sort i = 3 j = 2 key = 40A[j] = 30 A[j+1] = 40 10 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 356/9/2014

36. An Example: Insertion Sort i = 3 j = 2 key = 40A[j] = 30 A[j+1] = 40 10 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 366/9/2014

37. An Example: Insertion Sort i = 4 j = 2 key = 40A[j] = 30 A[j+1] = 40 10 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 376/9/2014

38. An Example: Insertion Sort i = 4 j = 2 key = 20A[j] = 30 A[j+1] = 40 10 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 386/9/2014

39. An Example: Insertion Sort i = 4 j = 2 key = 20A[j] = 30 A[j+1] = 40 10 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 396/9/2014

40. An Example: Insertion Sort i = 4 j = 3 key = 20A[j] = 40 A[j+1] = 20 10 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 406/9/2014

41. An Example: Insertion Sort i = 4 j = 3 key = 20A[j] = 40 A[j+1] = 20 10 30 40 20 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 416/9/2014

42. An Example: Insertion Sort i = 4 j = 3 key = 20A[j] = 40 A[j+1] = 40 10 30 40 40 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 426/9/2014

43. An Example: Insertion Sort i = 4 j = 3 key = 20A[j] = 40 A[j+1] = 40 10 30 40 40 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 436/9/2014

44. An Example: Insertion Sort i = 4 j = 3 key = 20A[j] = 40 A[j+1] = 40 10 30 40 40 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 446/9/2014

45. An Example: Insertion Sort i = 4 j = 2 key = 20A[j] = 30 A[j+1] = 40 10 30 40 40 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 456/9/2014

46. An Example: Insertion Sort i = 4 j = 2 key = 20A[j] = 30 A[j+1] = 40 10 30 40 40 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 466/9/2014

47. An Example: Insertion Sort i = 4 j = 2 key = 20A[j] = 30 A[j+1] = 30 10 30 30 40 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 476/9/2014

48. An Example: Insertion Sort i = 4 j = 2 key = 20A[j] = 30 A[j+1] = 30 10 30 30 40 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 486/9/2014

49. An Example: Insertion Sort i = 4 j = 1 key = 20A[j] = 10 A[j+1] = 30 10 30 30 40 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 496/9/2014

50. An Example: Insertion Sort i = 4 j = 1 key = 20A[j] = 10 A[j+1] = 30 10 30 30 40 InsertionSort(A, n) {for i = 2 to n { key = A[i] j = i - 1; while (j > 0) and (A[j] > key) { A[j+1] = A[j] j = j - 1 } A[j+1] = key} } 1 2 3 4 David Luebke 506/9/2014