10
Compsci 201 Recitation 12 Professor Peck Jimmy Wei 11/15/2013

Compsci 201 Recitation 12 Professor Peck Jimmy Wei 11/15/2013

Embed Size (px)

Citation preview

Page 1: Compsci 201 Recitation 12 Professor Peck Jimmy Wei 11/15/2013

Compsci 201 Recitation 12

Professor PeckJimmy Wei11/15/2013

Page 2: 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/

Page 3: Compsci 201 Recitation 12 Professor Peck Jimmy Wei 11/15/2013

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

Page 4: Compsci 201 Recitation 12 Professor Peck Jimmy Wei 11/15/2013

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”?

Page 5: Compsci 201 Recitation 12 Professor Peck Jimmy Wei 11/15/2013

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);

Page 6: Compsci 201 Recitation 12 Professor Peck Jimmy Wei 11/15/2013

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);

Page 7: Compsci 201 Recitation 12 Professor Peck Jimmy Wei 11/15/2013

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

Page 8: Compsci 201 Recitation 12 Professor Peck Jimmy Wei 11/15/2013

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);}

Page 9: Compsci 201 Recitation 12 Professor Peck Jimmy Wei 11/15/2013

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);

Page 10: Compsci 201 Recitation 12 Professor Peck Jimmy Wei 11/15/2013

Have a good weekend!

Don’t forget to submit!