Books · The Fiddler: Solutions
Chapter 62
Can You Play the Favorite?
In a four-team region seeded through , when an -seed plays an -seed the -seed wins with probability . The bracket is vs and vs , and the winners meet. What is the probability the -seed wins the region?
The Fiddler, Zach Wissner-Gross, March 21, 2025(original post)
Solution
The -seed beats the -seed with probability , then meets the -seed (who arrives with probability ) or the -seed (probability ):
The computation
Encode the bracket: the -seed must beat its first opponent, then beat whichever of the - and -seeds survives, each path weighted by the model’s win probabilities.
from fractions import Fraction as F
beat = lambda m, n: F(n, m + n) # P(m-seed beats n-seed)
print(beat(1, 4) * (beat(2, 3)*beat(1, 2) + beat(3, 2)*beat(1, 3))) # 14/25
Extra Credit
For a region of teams under standard seeding and the same model, what is the -seed’s probability of winning?
Solution
Folding the bracket up recursively (each subregion produces a distribution over its possible winners, then the two halves meet) gives no tidy closed form; the probability drifts slowly toward : (The general value is paywalled; these are my own.)
The computation
Build each subregion’s full distribution over who emerges, then collide the two halves under the win model; standard seeding orders the bracket so favourites meet late.
from fractions import Fraction as F
def region(seeds):
if len(seeds) == 1: return {seeds[0]: F(1)}
h = len(seeds) // 2; L, R = region(seeds[:h]), region(seeds[h:]); out = {}
for a, pa in L.items():
for b, pb in R.items():
out[a] = out.get(a, F(0)) + pa*pb*F(b, a + b)
out[b] = out.get(b, F(0)) + pa*pb*F(a, a + b)
return out
def order(k):
o = [1, 2]
for r in range(1, k):
m = 2**(r + 1) + 1; o = [x for pr in zip(o, [m - x for x in o]) for x in pr]
return o
for k in (3, 4): print(k, float(region(order(k))[1])) # 0.5279, 0.5192