题意
现在有个正整数x,你要进行m轮操作,每次将x随机变为[0,x]中的一个整数。
问m轮之后,这个数为i(0≤i≤x)的概率。
题解
考虑一个normaldp:设fi,j表示第i轮后,这个数为j的概率,则:
fi,j=∑k≥jfi−1,k∗1k+1
则可以写出转移矩阵:
T=[11213…1n+101213…1n+10013…1n+1………⋱…000…1n+1]
设初始向量为→b,则最后要求的是Tm→b。
这样是O(n3logn)的。
考虑优化。像这样的线性递推,一般能做到O(n2),做到O(nlognlogk)的做法很难……
另辟蹊径。有一种高妙的相似对角化做法。
有定理,一个矩阵如果是线性无关的,则必定可以相似对角化。
设S=PTP−1,其中P是可逆矩阵,S是对角矩阵。
求这个S的过程一般分为几步:求矩阵T特征值和特征向量->将特征向量当列向量排列于矩阵P中->计算S。
考虑T的特征值,特征值即满足∃→v≠→0,T→v=λ→v的λ,其充要条件是|T−λI|=0。
由于
|T−λI|=|−λ1213…1n+1012−λ13…1n+10013−λ…1n+1………⋱…000…1n+1−λ|=|−λλ0…0012−λλ…00013−λ…0………⋱…000…1n+1−λ|=0
这个行列式直接用定义式求,得出
(1−λ)(12−λ)…(1n+1−λ)=0
则所有特征值为1,12,…,1n+1。
接着考虑特征向量,特征值即满足∃→v≠→0,T→v=λ→v的→v。
尝试进行小范围的模拟计算,可以得出结果:
满足T→vi=1i→vi的→vi为
proof1
则
而
proof2
又因为即。有了,能用几次多项式卷积快速计算出。
但是如果没有好的性质,也是无济于事的。但是事实证明,是一个对角矩阵。
proof3
则
考虑对角矩阵的幂次很好求,相当于把和前面几个矩阵依次用卷积卷一卷就出来了。
复杂度是的。
proof1:
即证明,亦即。
如下:
其中用到了杨辉三角一斜列求和和牛顿二项式定理的导出式。
杨辉三角一斜列求和:
牛顿二项式定理的导出式:
proof2:
即证明:
又因为
通过二项式反演,得
则
proof3:
由于
则
即是对角阵。
另附生成函数做法(图片出自_rqy's Blog
)。