Download presentation
Presentation is loading. Please wait.
1
CS 3343: Analysis of Algorithms
Analyzing recursive algorithms 11/15/2018
2
Problem of the day How do you find a coffee shop if you don’t know on which direction it might be? 11/15/2018
3
Analyzing recursive algorithms
11/15/2018
4
Recursive algorithms General idea: Divide and Conquer
Divide a large problem into smaller ones By a constant ratio By a constant or some variable Solve each smaller one recursively or explicitly Combine the solutions of smaller ones to form a solution for the original problem Divide and Conquer 11/15/2018
5
Merge sort MERGE-SORT A[1 . . n] If n = 1, done.
Recursively sort A[ n/2 ] and A[ n/2 n ] . “Merge” the 2 sorted lists. Key subroutine: MERGE 11/15/2018
6
Merging two sorted arrays
Subarray 1 Subarray 2 20 13 7 2 12 11 9 1 11/15/2018
7
Merging two sorted arrays
Subarray 1 Subarray 2 20 13 7 2 12 11 9 1 11/15/2018
8
Merging two sorted arrays
20 13 7 2 12 11 9 1 11/15/2018
9
Merging two sorted arrays
20 13 7 2 12 11 9 1 11/15/2018
10
Merging two sorted arrays
20 13 7 2 12 11 9 1 1 11/15/2018
11
Merging two sorted arrays
20 13 7 2 12 11 9 1 20 13 7 2 12 11 9 1 11/15/2018
12
Merging two sorted arrays
20 13 7 2 12 11 9 1 20 13 7 2 12 11 9 1 2 11/15/2018
13
Merging two sorted arrays
20 13 7 2 12 11 9 1 20 13 7 2 12 11 9 20 13 7 12 11 9 1 2 11/15/2018
14
Merging two sorted arrays
20 13 7 2 12 11 9 1 20 13 7 2 12 11 9 20 13 7 12 11 9 1 2 7 11/15/2018
15
Merging two sorted arrays
20 13 7 2 12 11 9 1 20 13 7 2 12 11 9 20 13 7 12 11 9 20 13 12 11 9 1 2 7 11/15/2018
16
Merging two sorted arrays
20 13 7 2 12 11 9 1 20 13 7 2 12 11 9 20 13 7 12 11 9 20 13 12 11 9 1 2 7 9 11/15/2018
17
Merging two sorted arrays
20 13 7 2 12 11 9 1 20 13 7 2 12 11 9 20 13 7 12 11 9 20 13 12 11 9 20 13 12 11 1 2 7 9 11/15/2018
18
Merging two sorted arrays
20 13 7 2 12 11 9 1 20 13 7 2 12 11 9 20 13 7 12 11 9 20 13 12 11 9 20 13 12 11 1 2 7 9 11 11/15/2018
19
Merging two sorted arrays
20 13 7 2 12 11 9 1 20 13 7 2 12 11 9 20 13 7 12 11 9 20 13 12 11 9 20 13 12 11 20 13 12 1 2 7 9 11 11/15/2018
20
Merging two sorted arrays
20 13 7 2 12 11 9 1 11/15/2018
21
How to show the correctness of a recursive algorithm?
By induction: Base case: prove it works for small examples Inductive hypothesis: assume the solution is correct for all sub-problems Step: show that, if the inductive hypothesis is correct, then the algorithm is correct for the original problem. 11/15/2018
22
Correctness of merge sort
MERGE-SORT A[1 . . n] If n = 1, done. Recursively sort A[ n/2 ] and A[ n/2 n ] . “Merge” the 2 sorted lists. Proof: Base case: if n = 1, the algorithm will return the correct answer because A[1..1] is already sorted. Inductive hypothesis: assume that the algorithm correctly sorts smaller suarrays, i.e., A[1.. n/2 ] and A[n/2+1..n]. Step: if A[1.. n/2 ] and A[n/2+1..n] are both correctly sorted, the whole array A[1.. n] is sorted after merging. Therefore, the algorithm is correct. 11/15/2018
23
How to analyze the time-efficiency of a recursive algorithm?
Express the running time on input of size n as a function of the running time on smaller problems 11/15/2018
24
Analyzing merge sort T(n) MERGE-SORT A[1 . . n] Θ(1) 2T(n/2)
f(n) MERGE-SORT A[1 . . n] If n = 1, done. Recursively sort A[ n/2 ] and A[ n/2 n ] . “Merge” the 2 sorted lists Sloppiness: Should be T( n/2 ) + T( n/2 ) , but it turns out not to matter asymptotically. 11/15/2018
25
Analyzing merge sort T(n) = 2 T(n/2) + f(n) +Θ(1) Divide: Trivial.
Conquer: Recursively sort 2 subarrays. Combine: Merge two sorted subarrays T(n) = 2 T(n/2) + f(n) +Θ(1) # subproblems Dividing and Combining subproblem size What is the time for the base case? What is f(n)? What is the growth order of T(n)? Constant 11/15/2018
26
Merging two sorted arrays
20 13 7 2 12 11 9 1 Θ(n) time to merge a total of n elements (linear time). 11/15/2018
27
Recurrence for merge sort
T(n) = Θ(1) if n = 1; 2T(n/2) + Θ(n) if n > 1. Later we shall often omit stating the base case when T(n) = Q(1) for sufficiently small n, but only when it has no effect on the asymptotic solution to the recurrence. But what does T(n) solve to? I.e., is it O(n) or O(n2) or O(n3) or …? 11/15/2018
28
Binary Search To find an element in a sorted array, we
Check the middle element If ==, we’ve found it else if less than wanted, search right half else search left half Example: Find 9 3 5 7 8 9 12 15 11/15/2018
29
Binary Search To find an element in a sorted array, we
Check the middle element If ==, we’ve found it else if less than wanted, search right half else search left half Example: Find 9 3 5 7 8 9 12 15 11/15/2018
30
Binary Search To find an element in a sorted array, we
Check the middle element If ==, we’ve found it else if less than wanted, search right half else search left half Example: Find 9 3 5 7 8 9 12 15 11/15/2018
31
Binary Search To find an element in a sorted array, we
Check the middle element If ==, we’ve found it else if less than wanted, search right half else search left half Example: Find 9 3 5 7 8 9 12 15 11/15/2018
32
Binary Search To find an element in a sorted array, we
Check the middle element If ==, we’ve found it else if less than wanted, search right half else search left half Example: Find 9 3 5 7 8 9 12 15 11/15/2018
33
Binary Search To find an element in a sorted array, we
Check the middle element If ==, we’ve found it else if less than wanted, search right half else search left half Example: Find 9 3 5 7 8 9 12 15 11/15/2018
34
What’s the recurrence for the running time of BinarySearch?
BinarySearch (A[1..N], value) { if (N == 0) return -1; // not found mid = (1+N)/2; if (A[mid] == value) return mid; // found else if (A[mid] < value) return BinarySearch (A[mid+1, N], value) else return BinarySearch (A[1..mid-1], value); } What’s the recurrence for the running time of BinarySearch? 11/15/2018
35
Recurrence for binary search
11/15/2018
36
Recursive Insertion Sort
RecursiveInsertionSort(A[1..n]) 1. if (n == 1) do nothing; 2. RecursiveInsertionSort(A[1..n-1]); 3. Find index i in A such that A[i] <= A[n] < A[i+1]; 4. Insert A[n] after A[i]; 11/15/2018
37
Recurrence for insertion sort
11/15/2018
38
Compute factorial Factorial (n) if (n == 1) return 1;
return n * Factorial (n-1); Note: here we use n as the size of the input. However, usually for such algorithms we would use log(n), i.e., the bits needed to represent n, as the input size. 11/15/2018
39
Recurrence for computing factorial
Note: here we use n as the size of the input. However, usually for such algorithms we would use log(n), i.e., the bits needed to represent n, as the input size. 11/15/2018
40
What do these mean? Challenge: how to solve the recurrence to get a closed form, e.g. T(n) = Θ (n2) or T(n) = Θ(nlgn), or at least some bound such as T(n) = O(n2)? 11/15/2018
41
Solving recurrence Running time of many algorithms can be expressed in one of the following two recursive forms or Both can be very hard to solve. We focus on relatively easy ones, which you will encounter frequently in many real algorithms (and exams…) 11/15/2018
42
Solving recurrence Recursion tree / iteration method
Substitution method Master method 11/15/2018
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.