解
要有骰子各给予同等机会的结果1 ,2 ,... ,d = 6。当所有n个骰子独立抛出时,令K为值的最小值。n=41,2,…,d=6Kn
考虑以K为条件的所有值之和的分布。令X为这个总和。假设最小值至少为k,则生成任意给定X值的方法数量的生成函数为nKXXk
f(n,d,k)(x)=xk+xk+1+⋯+xd=xk1−xd−k+11−x.(1)
由于骰子是独立的,因此所有n个骰子都显示k或更大值的值形成方式的生成函数为Xnk
f(n,d,k)(x)n=xkn(1−xd−k+11−x)n.(2)
此生成函数包括超过k的事件的项,因此我们需要将其减去。因此,给定K = k时,形成X值的方式数量的生成函数为KkXK=k
f(n,d,k)(x)n−f(n,d,k+1)(x)n.(3)
请注意,最高值的总和是所有值的总和减去最小值,等于X - K。因此,生成函数需要除以k。通过乘以骰子(1 / d )n的任意组合的机会,它变为概率生成函数:n−1X−Kk(1/d)n
d−n∑k=1dx−k(f(n,d,k)(x)n−f(n,d,k+1)(x)n).(4)
由于所有多项式乘积和幂都可以用运算来计算(它们是卷积,因此可以使用离散快速傅立叶变换来执行),因此总的计算量为O (kO(nlogn)。特别是,它是多项式时间算法。O(knlogn)
例
让我们研究问题中的示例,其中和d = 6。n=4d=6
式为的PGF X条件上ķ ≥ ķ给出(1)XK≥k
f(4,6,1)(x)f(4,6,2)(x)…f(4,6,5)(x)f(4,6,6)(x)f(4,6,7)(x)=x+x2+x3+x4+x5+x6=x2+x3+x4+x5+x6=x5+x6=x6=0.
如公式(2 )所示将它们提高到幂n=4(2)
f(4,6,1)(x)4f(4,6,2)(x)4…f(4,6,5)(x)4f(4,6,6)(x)4f(4,6,7)(x)4=x4+4x5+10x6+⋯+4x23+x24=x8+4x9+10x10+⋯+4x23+x24=x20+4x21+6x22+4x23+x24=x24=0
它们在公式中的连续差异为(3)
f(4,6,1)(x)4−f(4,6,2)(x)4f(4,6,2)(x)4−f(4,6,3)(x)4…f(4,6,5)(x)4−f(4,6,6)(x)4f(4,6,6)(x)4−f(4,6,7)(x)4=x4+4x5+10x6+⋯+12x18+4x19=x8+4x9+10x10+⋯+4x20=x20+4x21+6x22+4x23=x24.
公式的结果之和为(4)
6−4(x3+4x4+10x5+21x6+38x7+62x8+91x9+122x10+148x11+167x12+172x13+160x14+131x15+94x16+54x17+21x18).
例如,前三个骰子总和为的机会是x 14的系数,等于14x14
6−4×160=10/81=0.123456790123456….
它与问题中引用的概率完全吻合。
顺便说一句,平均(从这个结果计算)为和标准差为√15869/1296≈12.244598765…。13612487/1679616−−−−−−−−−−−−−−−−√≈2.8468444
对于骰子(而不是n = 4)的类似(未优化)计算花费了不到半秒的时间,支持了以下论点:该算法对计算的要求不高。这是分布主要部分的图:n=400n=4
由于最小很可能等于1并且总和X将是非常接近具有正常(400 × 7 / 2 ,400 × 35 / 12 )的分布(其平均为1400和标准偏差是约34.1565),则意味着必须非常接近1400 - 1 = 1399,标准偏差非常接近34.16。这很好地描述了该图,表明它可能是正确的。实际上,精确计算得出的平均值约为K1X(400×7/2,400×35/12)140034.15651400−1=139934.16大于 1399,标准偏差约 1.24 × 10 − 31小于 √2.13×10−3213991.24×10−31。400×35/12−−−−−−−−−−√