110 likes | 222 Views
Compsci 201 Recitation 12. Professor Peck Jimmy Wei 4 /11/2014. In this Recitation. Greedy algorithms Brief intro Practice Memoization Brief intro Practice Submit via form : http:// goo.gl /66Dhvn Today’s problems are APTs!. Greedy Algorithms. What are they?
E N D
Compsci 201 Recitation 12 Professor Peck Jimmy Wei 4/11/2014
In this Recitation • Greedy algorithms • Brief intro • Practice • Memoization • Brief intro • Practice • Submit via form: http://goo.gl/66Dhvn • Today’s problems are APTs!
Greedy Algorithms • What are they? • An algorithm where continuously selecting local optima leads to a globally optimal solution • This is called “greedy” because we select the best solution for every sub-problem • Will learn about greedy algorithms in more detail in Compsci 330
Greedy Algorithms • As an example, consider the problem of making change: • We want to use as few coins as possible that amount to our total • What coins would you give for $0.63? • 2 quarters, 1 dime, 3 pennies • How did you determine that solution? • Start by using as many quarters as possible, then dimes, then nickels, then pennies • Can you see how this is “greedy”?
Greedy Algorithms – Answer 1-3 • Read the VoteRigging APT and write the following method: • Answer questions 1-3 before you write this code • What the greedy choice? /** * Returns the minimum number of votes to buy for candidate 0 to win * the election * @param votes is an array where the ith element represents * how many individuals were originally plan to vote for the ith candidate */ public intminimumVotes(int[] votes);
Greedy Algorithms – Answer 4-6 • Read the OlympicCandles APT and write the following method: • Answer questions 4-6 before you write this code • What the greedy choice? /** * Returns the maximum number of nights you can light candles * @param candles is an array where the ith element represents the height of * the ith candle you have available */ public intnumberOfNights(int[] candles);
Because of the snow • We didn’t have to to discuss memoizationin class • Help with BSTcount (you will not be penalized for not completing BSTcount for APT set 5)
Memoization • What is it? • No, it’s not “memorization”… no ‘r’ • Refers to the idea that as we solve problems we might sometimes need to reuse solutions to sub-problems, so we store them instead of recalculating them • Also will learn more about this and dynamic programming in CS330
Memoization • As an example, think of recursive fibonacci: • What’s wrong with the recursive solution below? • We recalculate fibonacci for low values of n • Instead, we could store those values in a data structure (memoize) so that we don’t have to recalculate them! public intfibonacci(int n) { return (n<=2) ? 1 : fibonacci(n-1) + fibonacci(n-2); }
Memoization • Read the BSTCount APT and write the following method: • Think about the sub-problems you need to solve here and how we can store the solutions to those subproblems to avoid having to recalculate them /** * Returns the total number of possible BSTs with the given values * @param values is an array holding all values that need to be stored in * the BST */ public long howMany(int[] values);
Have a good weekend! Don’t forget to submit!