Upload
wilfred-cooper
View
213
Download
0
Embed Size (px)
Citation preview
Compsci 201 Recitation 12
Professor PeckJimmy Wei11/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:
• 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 * 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);
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 * @param candles is an array where the ith element represents the height of * the ith candle you have available */public int numberOfNights(int[] candles);
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?
– 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);}
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 * @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!