随机算法——判断多项式相乘
最近学习算法设计与分析,想写出来分享下。以下都是一些笔记。
基本概念
Experiment 试验 :一个产生结果的过程
Random Experiment 随机试验:直到试验结束前结果是未知的试验
Sample Space 样本空间: 所有试验结果的集合
Event 事件: 样本空间的子集。
相互独立的事件Event: 事件E1的发生不影响E2的发生,则相互独立。 扩展到n个相互独立事件时就有(注意不是两两独立,意思是不一样的)

应用:多项式相等的判断
![]()
解析: 令F(X)、G(X)分别为上述两个多项式。判断目的即就是F(X)=G(X)是否成立?
代入法验证,任意取一个整数r,代入其中:我们的目标情形是
F(X)≠G(X) 时,F(r)=G(r) (1)
此时即为判断出错的情况。
下面计算它的概率:
从集合{1,2,3,…100n}中,任取一个整数r((1)式成立,意味着 r 为H(X)=F(X)G(X)=0的一个根,由代数基本定理知道n次多项式最多有n个根),
则恰好r是函数H(X)=0的根的概率就为n/100n。(上面例子中n=5即可)
从集合{1,2,3,…100n}中,任取一个整数r, (1)式成立的概率就是1/100. 就是说我们出错的概率是1/100。
However!!!
1/100还是太大,是不可以接收的。想办法使得出错概率更小!
假设E1表示第一次从集合{1,2,.,100n}中取出一个数;
E2表示第二次取…….(每次取出的数有可能相同)进行k次以后的话?
显然E1,E2,…Ek相互独立,且每次出现情形1的概率都是1/100。 利用一开始给的相互独立事件概率计算公式,k次以后出错的概率为(1/100)^k。
意味着,判断两个多项式想的正确的概率为
P=1-(1/100)^k
还可以进一步改变算法,例如:第一次取到了r1,第二次取数的集合应该去掉元素r1.。。也就是每次取出的数要求是不一样的。
是可以这样做的,但上面已经足够应用了。不强求。
浙公网安备 33010602011771号