Download presentation
Presentation is loading. Please wait.
Published byHeather Anderson Modified over 9 years ago
1
Compsci 201 Recitation 12 Professor Peck Jimmy Wei 4/11/2014
2
In this Recitation Greedy algorithms Brief intro Practice Memoization Brief intro Practice Submit via form: http://goo.gl/66Dhvn Today’s problems are APTs!
3
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
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 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 * 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 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 * 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
Because of the snow We didn’t have to to discuss memoization in class Help with BSTcount (you will not be penalized for not completing BSTcount for APT set 5)
8
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
9
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);}
10
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 * 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);
11
Have a good weekend! Don’t forget to submit!
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.