Suppose someone comes onto the site and is bored. That person starts spreading the rumor that levik is a monkey at exactly noon (on day 1) by sending an e-mail to one random person.
Then, each person sends an e-mail about this rumor (at exactly noon, on day 2) to one person. They can send it to anyone on perplexus (but themselves), even if that person already knows the rumor, or even if it was the person who told them about it.
Each successive day at noon, everyone that knows about the rumor sends a message to one other random person.
On average, on what day will everyone know about the rumor if there are 40 people (including the one that spread the rumor initially) at perplexus while the rumor is still spreading?
What if there were x people at perplexus while the rumor is still spreading?
On the theory that the expected time to reach 40 is equal to the expected time to go from 1 to 2 plus the expected time to go from 2 to 3, plus ... plus the expected time to go from 39 to 40, one could argue that:
When r people already know the rumor, any given person's phoning has probability (40-r)/39 of expanding the knower pool by 1. That makes the expected number of phone calls it will take to be 39/(40-r). As there are r calls made during a day, the expected number of days would be 39/((40-r)*r). You'd just add up these values for r = 1 to 39.
The flaw in this logic is its lack of treatment of days as more than just a number of phone calls. That is, as soon as a new knower is found, the number increases not only for the purpose of decreasing the likelihood of finding a new knower, but also in expanding the number of callers, even though in fact the number of callers does not change until a day boundary arrives.
As a result this calculation arrives at lower expected numbers of days (shown for various values of n in addition to just 40):
While this is probably simple enough to do with pencil and paper, the computer is easier, so the above was produced with:
FOR n = 2 TO 9
PRINT : PRINT : PRINT
FOR n = 10 TO 200 STEP 10
days = 0
FOR r = 1 TO n - 1
days = days + (n - 1) / ((n - r) * r)
PRINT n, days
Posted by Charlie
on 2004-05-01 10:13:00