Since holiday season is coming, here is a little practical-purpose combinatorics question.
Lots of group of friends or families practice the random variant of Secret Santa, where each member buys a gift without knowing who will get it, and then gifts are randomly attributed.
In this context, the natural question is: can you devise a protocol that does not use a computer, and is feasible in practice, such that:
- nobody gets its own gift
- nobody learns any information on who bought which gift
- gifts are assignated randomly, i.e. nobody can choose or assign a gift based on the package appearance.
- the protocol is guaranteed to end in finite bounded time, i.e. avoid things like "retry until it works"
I added the last contraint because for instance for 4 people, the probability to get a fixpoint-free permutation is only $3/8$, so it can be painful to repeat until you get one, I count this as non-practical.
Assign a number to each present and put papers with the respective numbers in a bag, make people take out numbers in turn. if someone gets the paper of his own present everyone puts everything back and they start again, the probability they get this at the first try approaches $\frac{1}{e}$ as $n$ approaches infinity.