Beruflich Dokumente
Kultur Dokumente
8/24/2012
A programming tool for implementing Divide and Conquer Approach of Problem Solving Infinite computations by finite statements Recursive computations/functions call themselves A recursive function must have
Expression for sub division Termination condition
An Example: Factorial
int factorial(n) if n == 1, return 1 else return (n factorial(n-1) end factorial
int factorial(n) if n == 1, return 1 else return (n factorial(n-1) end factorial int factorial(n-1) if n == 1, return 1 else return ((n-1) factorial(n-2) end factorial int factorial(n-2) if n == 1, return 1 else return ((n-2) factorial(n-3) end factorial
int factorial(2) if n == 1, return 1 int factorial(1) else if n == 1, return (2 factorial(1) return 1 end factorial else return (n factorial(0) end factorial
Atul Gupta
8/24/2012
Merge Sort
5 2 4 7 1 3 9 6 5 2 4 7 5 2 5 2 4 4 7 7 1 1 3 9 6 1 3 3 9 9 6 6
Merge Sort
1 2 3 4 5 6 7 9 2 4 5 7 2 5 5 2 4 4 7 7 1 1 3 6 9 1 3 3 9 6 9 6
Atul Gupta
8/24/2012
Merge-Sort Tree
merge-sort(A, p, r) if p < r then q (p + r)/2 merge-sort (A, p, q) merge-sort (A, q + 1, r) merge (A, p, q, r)
Execution Example
Partition
merge-sort(A, p, r) if p < r then q (p + r)/2 merge-sort (A, p, q) merge-sort (A, q + 1, r) merge (A, p, q, r)
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
the root is the initial call the leaves are calls on subsequences of size 1
7 2 9 4 2 4 7 9
7 2 9 4 2 4 7 9
3 8 6 1 1 3 8 6
7 2 2 7
9 4 4 9
7 2 2 7
9 4 4 9
3 8 3 8
6 1 1 6
77
22
99
44
9
77
22
99
44
Merge Sort
33
88
66
11
10
Execution (cont.)
Recursive call, partition
merge-sort(A, p, r) if p < r then q (p + r)/2 merge-sort (A, p, q) merge-sort (A, q + 1, r) merge (A, p, q, r)
Execution (cont.)
Recursive call, partition
merge-sort(A, p, r) if p < r then q (p + r)/2 merge-sort (A, p, q) merge-sort (A, q + 1, r) merge (A, p, q, r)
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 29 4 2 4 7 9
3 8 6 1 1 3 8 6
7 29 4 2 4 7 9
3 8 6 1 1 3 8 6
7 2 2 7
9 4 4 9
3 8 3 8
6 1 1 6
722 7
9 4 4 9
3 8 3 8
6 1 1 6
77
22
99
44
Merge Sort
33
88
66
11
11
77
22
99
44
Merge Sort
33
88
66
11
12
Atul Gupta
8/24/2012
Execution (cont.)
Recursive call, base case
merge-sort(A, p, r) if p < r then q (p + r)/2 merge-sort (A, p, q) merge-sort (A, q + 1, r) merge (A, p, q, r)
Execution (cont.)
Recursive call, base case
merge-sort(A, p, r) if p < r then q (p + r)/2 merge-sort (A, p, q) merge-sort (A, q + 1, r) merge (A, p, q, r)
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 2 9 43 8 6 1 1 2 3 4 6 7 8 9
7 29 4 2 4 7 9
3 8 6 1 1 3 8 6
7 29 4 2 4 7 9
3 8 6 1 1 3 8 6
722 7
9 4 4 9
3 8 3 8
6 1 1 6
722 7
9 4 4 9
3 8 3 8
6 1 1 6
77
22
99
44
Merge Sort
33
88
66
11
13
77
22
99
44
Merge Sort
33
88
66
11
14
Execution (cont.)
Merge
merge-sort(A, p, r) if p < r then q (p + r)/2 merge-sort (A, p, q) merge-sort (A, q + 1, r) merge (A, p, q, r)
Execution (cont.)
merge-sort(A, p, r) if p < r then q (p + r)/2 merge-sort (A, p, q) merge-sort (A, q + 1, r) merge (A, p, q, r)
7 29 4 2 4 7 9
3 8 6 1 1 3 8 6
7 29 4 2 4 7 9
3 8 6 1 1 3 8 6
722 7
9 4 4 9
3 8 3 8
6 1 1 6
722 7
9 4 4 9
3 8 3 8
6 1 1 6
77
22
99
44
Merge Sort
33
88
66
11
15
77
22
99
44
Merge Sort
33
88
66
11
16
Atul Gupta
8/24/2012
Execution (cont.)
Merge
merge-sort(A, p, r) if p < r then q (p + r)/2 merge-sort (A, p, q) merge-sort (A, q + 1, r) merge (A, p, q, r)
Execution (cont.)
merge-sort(A, p, r) if p < r then q (p + r)/2 merge-sort (A, p, q) merge-sort (A, q + 1, r) merge (A, p, q, r)
7 29 4 2 4 7 9
3 8 6 1 1 3 8 6
7 29 4 2 4 7 9
3 8 6 1 1 3 6 8
722 7
9 4 4 9
3 8 3 8
6 1 1 6
722 7
9 4 4 9
3 8 3 8
6 1 1 6
77
22
99
44
Merge Sort
33
88
66
11
17
77
22
99
44
Merge Sort
33
88
66
11
18
Execution (cont.)
Merge
merge-sort(A, p, r) if p < r then q (p + r)/2 merge-sort (A, p, q) merge-sort (A, q + 1, r) merge (A, p, q, r)
Analysis of Merge-Sort
The height h of the merge-sort tree is O(log n)
at each recursive call we divide in half the sequence,
1 2 2i
33
88
66
11
19
Atul Gupta
8/24/2012
Parts
Solution for smallest subdivision (Terminating condition) Subdivision relation (aT(n/b)) Division efforts (D(n)) Combining effort (C(n))
A Sequence
0,1,1,2,3,5,8,13,21,34, ,
Fibonacci Sequence
Atul Gupta
8/24/2012
T(200) = ?
Binary Search
BinarySearchIterative(x, A) { left = 0; right = length(A) 1; while (left <= right) { mid = (left + right) / 2 if (A[mid] == x) return mid; else if (A[mid] > value) right = mid - 1 else left = mid + 1 } return (-1) // not found }
T(200) = ? T(200,000) = ?
BinarySearchRecursive(x, A,left,right) { If (left > right) return (-1) // not found else { mid = (left + right) / 2 if (A[mid] == x) return mid; else if (A[mid] > value) return BinarySearchRecursive(x,A,left,mid-1); else return BinarySearchRecursive(x,A,mid+1,right); } }
Atul Gupta
8/24/2012
Augmented Recursion
builds up deferred operations Inefficient Iteration is preferred
Solving Recurrence
Substitution Method Recursion-tree Method Master Method
Recursion: Summary
A way of thinking about problems. Recursion is a tool to solve problems using Divide and Conquer approach Divide the problem into sub problems, Solving sub problems recursively, and combining the solutions Tail Recursion is a preferred form of Recursion Recursive solutions many be inefficient Related to mathematical induction.
Atul Gupta