In my physics department, we have an aurora calling tree. Basically, the idea is that anyone who sees the Northern Lights will call other people, who then call yet others, etc., so that everyone can see them, too. Ideally, one wants such a system to have several qualities:[ol]
[li]It should be efficient: We want everyone to get word quickly.[/li][li]It should be robust: If a person isn’t home, or doesn’t have his copy of the list, others should still be able to get the word.[/li][li]It should not make things too difficult for any particular person.[/li][li]It should be startable by any person on the list.[/li][li]It should be simple: The entire list and instructions should fit onto two sides of a sheet of paper, and be useable by people woken up at 2 in the morning.[/li][/ol] Currently, the system we use has six circles. The first person to see the aurora calls one person on each circle, and then calling proceeds clockwise around each circle. If you can’t get in touch with someone, then you call the next person around the circle until you get someone. I think we can do better: Under our current system, the first person needs to call at least six people, which is a bit of a burden to place on any given person, especially the starter (you don’t want to discourage starting the list). Each person must call an indeterminate number of others, since you don’t know who’s going to be home. And if there’s a break anywhere, that can potentially leave almost an entire circle unaware.
My first thought was to arrange the people on the vertices of a regular dodecahedron, with the first person calling all three of his neighbors. Each other person would then call his two neighbors who did not call him. Since each person would be calling two others, and could be called by three others, defects would tend to heal themselves, and if you didn’t get in touch with one or both of your contacts, you could just stop calling, confident that news would probably still reach the downstream nodes via some other route. But, of course, this would only work if there were exactly 20 names on the list, which there are not.
My next thought was a hexagonal grid, with periodic boundary conditions. This has the same advantages as the dodecahedron, but it’s much more scalable (it can be used for any “rectangular” number times 4), and it’s much easier to represent on a flat sheet of paper. But this still isn’t perfect; what if the number of names can’t be fitted exactly onto such a grid? Distort the grid to close up the gaps? Just leave those nodes “dead”?
I now have another potential idea: Arrange all the names on a single cyclic list of N names, and have each person call both the next person on the list, and the person M nodes downstream (ideally, M should be close to sqrt(N) and relatively prime to N). This is simpler than the hex grid, and scales easily to any arbitrary number of names, but I’m afraid that it might not be as robust as the hex grid, since each person can only be called by two others, not three others. Is this assessment correct?
To further complicate matters, some people who sign up for the calling tree don’t want to be woken up after 11:00 PM. Currently, this is accomplished by two cicles just for early people; if you see the aurora after 11:00, you just don’t call those lists. How could this be simply accomplished for my tree methods?
Or is there some other, yet better, method that I’m overlooking? And is there some well-established method (beyond Monte Carlo testing) to assess the probability of failure (defined as a case where a person is available to be called, but is not) for such calling trees? Any other suggestions?