1 / 14

Lecture 12

Lecture 12. Divide and Conquer. Recursive Fibonnacci numbers algorithm with exponential complexity. When sub problems are not independent Fib1(N) { if (N =< 1) return 1; else return Fib(N-1) + Fib(N-2) }. Dynamic Programming.

keely
Download Presentation

Lecture 12

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lecture 12

  2. Divide and Conquer • Recursive Fibonnacci numbers algorithm with exponential complexity. • When sub problems are not independent Fib1(N) { if (N =< 1) return 1; else return Fib(N-1) + Fib(N-2) }

  3. Dynamic Programming • A dynamic programming algorithm solves every sub problem just once and then • Saves its answer in a table (array) • Avoiding the work of recomputing the answer every time the sub problem is encountered.

  4. Dynamic Programming • The underlying idea of dynamic programming  is: • avoid calculating the same stuff twice, usually by keeping a table of known results of subproblems.

  5. Dynamic Programming Top-Down Recursive Approach with Memoization • Recursive Fibonnacci numbers algorithm with Memoization Allocate memory for memo[n] and initialize all to zero except memo[1] and memo[2], which are 1. Fib3(n) { if memo[n] is not zero, return memo[n]; else { memo[n] = fib3(n-1) + fib3(n-2); return memo[n]; } }

  6. Dynamic ProgrammingThe Binomial Coefficient • The binomial coefficient is given by • For values of n and k that are not small, • We can not compute the binomial coefficient directly from this definition because n! is very large

  7. Dynamic ProgrammingThe Binomial Coefficient Int bin(int n, int k) { if (k = 0 or n = k ) return 1; else return(bin(n-1, k-1) + bin(n-1, k)) }

  8. Dynamic ProgrammingThe Binomial Coefficient • This algorithm is very similar to the divide-and-conquer algorithm of computing nth Fibonacci term. • Therefore this algorithm is very inefficient due to the same reasons.

  9. Develop a memoized recursive algorithm (step 4) Take an array of size? Then store results in the array, no need to compute it again and Again Then see the pattern for data storage in the array Int bin(int n, int k) { if (k = 0 or n = k ) return 1; else return(bin(n-1, k-1) + bin(n-1, k)) }

  10. Dynamic ProgrammingThe Binomial Coefficient • An efficient algorithm will be developed using dynamic programming approach. • We will use the recursive definition to construct our solution in an array B. • Where B[i, j] will contain

  11. B[i-1, j-1] + B[i-1, j] 0 < i < j B[i, j] = 1 j = 0 or j = i Dynamic ProgrammingThe Binomial Coefficient • The steps for constructing a dynamic programming algorithm for this problem are • Establish a recursive property and write it in terms of B i.e. Solve an instance of the problem in a bottom-up fashion by computing the rows in B in sequence starting with the first row

  12. The final value computed B[n, k] is Dynamic ProgrammingThe Binomial Coefficient 0 1 2 3 4 j k 0 1 1 1 1 2 1 2 1 3 1 3 3 1 4 1 4 6 4 1 B[i-1, j-1] B[i-1, j] B[i, j] i n Each successive row is computed from the row preceding it using the recursive property.

  13. Dynamic ProgrammingThe Binomial Coefficient Example • Compute B[4, 2] = • Compute row 0: B[0, 0] = 1 • Compute row 1: B[1, 0] = 1 B[1, 1] = 1 • Compute row 2: B[2, 0] = 1 B[2, 1] = B[1, 0] + B[1, 1] = 1 + 1 = 2 B[2, 2] = 1 • Compute row 3: B[3, 0] = 1 B[3, 1] = B[2, 0] + B[2, 1] = 1 + 2 = 3 B[3, 2] = B[2, 1] + B[2, 2] = 2 + 1 = 3 • Compute row 4: B[4, 0] = 1 B[4, 1] = B[3, 0] + B[3, 1] = 1 + 3 = 4 B[4, 2] = B[3, 1] + B[3, 2] = 3 + 3 = 6

  14. Dynamic ProgrammingThe Binomial Coefficient Algorithm Int bin(int n, int k) { int i, j; int B[0..n, 0..k]; for i = 0 to n for j = 0 to minimum(i, k) if( j = 0 or j = i) B[i, j] = 1; else B[i, j] = B[i-1, j-1] + B[i-1, j]; return B[n, k] }

More Related