25.03.2013 Views

Cracking the Coding Interview - Fooo

Cracking the Coding Interview - Fooo

Cracking the Coding Interview - Fooo

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Solutions to Chapter 6 | Brain Teasers<br />

6 4 A bunch of men are on an island A genie comes down and ga<strong>the</strong>rs everyone toge<strong>the</strong>r<br />

and places a magical hat on some people’s heads (i e , at least one person has<br />

a hat) The hat is magical: it can be seen by o<strong>the</strong>r people, but not by <strong>the</strong> wearer of<br />

<strong>the</strong> hat himself To remove <strong>the</strong> hat, those (and only those who have a hat) must dunk<br />

<strong>the</strong>mselves underwater at exactly midnight If <strong>the</strong>re are n people and c hats, how<br />

long does it take <strong>the</strong> men to remove <strong>the</strong> hats? The men cannot tell each o<strong>the</strong>r (in any<br />

way) that <strong>the</strong>y have a hat<br />

FOLLOW UP<br />

SOLUTION<br />

Prove that your solution is correct<br />

This problem seems hard, so let’s simplify it by looking at specific cases<br />

Case c = 1: Exactly one man is wearing a hat<br />

CareerCup com<br />

pg 60<br />

Assuming all <strong>the</strong> men are intelligent, <strong>the</strong> man with <strong>the</strong> hat should look around and realize<br />

that no one else is wearing a hat Since <strong>the</strong> genie said that at least one person is wearing<br />

a hat, he must conclude that he is wearing a hat Therefore, he would be able to remove it<br />

that night<br />

Case c = 2: Exactly two men are wearing hats<br />

The two men with hats see one hat, and are unsure whe<strong>the</strong>r c = 1 or c = 2 They know, from<br />

<strong>the</strong> previous case, that if c = 1, <strong>the</strong> hats would be removed on Night #1 Therefore, if <strong>the</strong> o<strong>the</strong>r<br />

man still has a hat, he must deduce that c = 2, which means that he has a hat Both men<br />

would <strong>the</strong>n remove <strong>the</strong> hats on Night #2<br />

Case General: If c = 3, <strong>the</strong>n each man is unsure whe<strong>the</strong>r c = 2 or 3 If it were 2, <strong>the</strong> hats would<br />

be removed on Night #2 If <strong>the</strong>y are not, <strong>the</strong>y must deduce that c = 3, and <strong>the</strong>refore <strong>the</strong>y<br />

have a hat We can follow this logic for c = 4, 5, …<br />

Proof by Induction<br />

Using induction to prove a statement P(n)<br />

If (1) P(1) = TRUE (e g , <strong>the</strong> statement is true when n = 1)<br />

AND (2) if P(n) = TRUE -> P(n+1) = TRUE (e g , P(n+1) is true whenever P(2) is true)<br />

THEN P(n) = TRUE for all n >= 1<br />

Explanation<br />

» Condition 2 sets up an infinite deduction chain: P(1) implies P(2) implies P(3) implies<br />

P(n) implies P(n+1) implies<br />

1 4 6

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!