问题描述:判断p(x),q(x)之积是否等于r(x),p,q,r分别为m,n,l 阶多项式
Random_polynomial(p(x),q(x),r(x),m,n,l)
输入:随机选取X[1:k]
输出:p(x)*q(x)是否等于r(x)
1 K =max{m+n,l}
2 For k=1 to K do
3 X[k] = random(real) //no repeat
4 For k=1 to K do
5 If(p(X[k])* q(X[k])!= r(X[k])) then
6 Return false
7 Return true
获得正确解的概率:
若p(x)*q(x)与r(x)阶数相同成立,则对任意的k成立,输出正确解;若不成立,除非找到p(x)*q(x)-r(x)=0的k个根,否则等式一定不成立。
设实数集合大小为S,则找到k个根的概率为max{m+n,l}/S,因此一定为错误解的概率为max{m+n,l}/S。
时间复杂度:O(max{m+n,l})
综上所述,若算法返回false则一定位正确解;若放回true,则正确解的概率为1-max{m+n,l}/S。
由于算法并不能总获得问题的正确解,显然该随机算法为蒙特卡洛算法。
- 前言
- 插入排序
- 归并排序
- 快速排序
- 最长公共子序列
- 斐波那契数列-台阶问题
- 求n*n阶矩阵最大子矩阵阶数
- 01背包
- 整数序列合并问题
- 动态规划算法的一般解题思路
- 01背包-近似算法
- 树搜索策略
- 求数组中的逆序对
- 并行机器最短调度问题
- 随机算法
- 判断两多项式之积是否等于另一多项式
- 顶点覆盖问题
- Apriori算法 (Introduction to data mining)
- 聚类算法-DBSCAN-C++实现
- 聚类算法-K-means-C++实现
- 聚类算法-Hierarchical(MIN)-C++
- 爬山法、分支限界法求解哈密顿环问题
- Best-First求解八数码问题
- Naive Bayesian文本分类器