NO ANSWERS Recitation 12

Download Report

Transcript NO ANSWERS Recitation 12

Compsci 201 Recitation 12
Professor Peck
Jimmy Wei
11/15/2013
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/
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
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
• Time for practice!
• Read over the VoteRigging APT and write the
following method:
/**
* 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 int minimumVotes(int[] votes);
• Answering the questions will help you write
this code—think about what the greedy
choice is here and how that leads to our
solution
Greedy Algorithms – Answer 4-6
• Time for practice!
• Read over the OlympicCandles APT and write
the following method:
/**
* 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 int numberOfNights(int[] candles);
• Answering the questions will help you write
this code—think about what the greedy
choice is here and how that leads to our
solution
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
Memoization
• As an example, think of recursive fibonacci:
– What’s wrong with the recursive solution below?
public int fibonacci(int n) {
return (n<=2) ? 1 : fibonacci(n-1) + fibonacci(n-2);
}
– 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!
Memoization
• Time for practice!
• Read over the BSTCount APT and write the
following method:
/**
* 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);
• 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
Have a good weekend!
Don’t forget to submit!