Download presentation
Presentation is loading. Please wait.
Published byWilfred Cooper Modified over 9 years ago
1
Compsci 201 Recitation 12 Professor Peck Jimmy Wei 11/15/2013
2
In this Recitation Greedy algorithms – Brief intro – Practice Memoization – Brief intro – Practice Submit via form: http://goo.gl/Z7jGk4 The problems we cover today are also APTs! – https://www.cs.duke.edu/courses/fall13/compsci201/ Apt/
3
Greedy Algorithms What are they? – In short, 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 subproblem – Will learn about greedy algorithms in more detail in Compsci 330
4
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”?
5
Greedy Algorithms – Answer 1-3 Time for practice! Read over the VoteRigging APT and write the following method: Answering the questions will help you write this code—think about what the greedy choice is here and how that leads to our solution /** * Returns the minimum number of votes to buy for candidate 0 to win * Returns the minimum number of votes to buy for candidate 0 to win * the election * the election * @param votes is an array where the ith element represents * @param votes is an array where the ith element represents * how many individuals were originally plan to vote for the ith candidate * how many individuals were originally plan to vote for the ith candidate */ */ public int minimumVotes(int[] votes); /** * Returns the minimum number of votes to buy for candidate 0 to win * Returns the minimum number of votes to buy for candidate 0 to win * the election * the election * @param votes is an array where the ith element represents * @param votes is an array where the ith element represents * how many individuals were originally plan to vote for the ith candidate * how many individuals were originally plan to vote for the ith candidate */ */ public int minimumVotes(int[] votes);
6
Greedy Algorithms – Answer 4-6 Time for practice! Read over the OlympicCandles APT and write the following method: Answering the questions will help you write this code—think about what the greedy choice is here and how that leads to our solution /** * Returns the maximum number of nights you can light candles * Returns the maximum number of nights you can light candles * @param candles is an array where the ith element represents the height of * @param candles is an array where the ith element represents the height of * the ith candle you have available * the ith candle you have available */ */ public int numberOfNights(int[] candles); /** * Returns the maximum number of nights you can light candles * Returns the maximum number of nights you can light candles * @param candles is an array where the ith element represents the height of * @param candles is an array where the ith element represents the height of * the ith candle you have available * the ith candle you have available */ */ public int numberOfNights(int[] candles);
7
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 subproblems, so we store them instead of recalculating them – Also will learn more about this and dynamic programming in CS330
8
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 int fibonacci(int n) { return (n<=2) ? 1 : fibonacci(n-1) + fibonacci(n-2); return (n<=2) ? 1 : fibonacci(n-1) + fibonacci(n-2);} public int fibonacci(int n) { return (n<=2) ? 1 : fibonacci(n-1) + fibonacci(n-2); return (n<=2) ? 1 : fibonacci(n-1) + fibonacci(n-2);}
9
Memoization Time for practice! Read over the BSTCount APT and write the following method: Think about the subproblems 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 * 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 * @param values is an array holding all values that need to be stored in * the BST * the BST */ */ public long howMany(int[] values); /** * Returns the total number of possible BSTs with the given values * 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 * @param values is an array holding all values that need to be stored in * the BST * the BST */ */ public long howMany(int[] values);
10
Have a good weekend! Don’t forget to submit!
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.