随机算法——蒙特卡罗算法——模式匹配问题
1 简单介绍
2 随机算法
3 指纹计算
4 计算步骤
假匹配
- 当Ip(Y)和Ip(X(j))不相等,那么Y和X(j)一定不匹配;
- 但是逆命题是错误的,即两指纹相同,X与X(j)也不一定匹配,即为假匹配。
- 这就是蒙特卡罗算法的体现之处,即一定有解,但不应正确。
5 代码
- 默认全是小写字母
- 由于素数计算范围大,假设文本串长度短,n=5;
- 本代码还可以继续改正,如文本长度、模式长度、字符类型等
#include <iostream>
#include<stdlib.h>
#include <cmath>
using namespace std;
string X,Y; //默认全是小写字符
const int n=5;//文本串长度
const int m=2; //模式长度
const int M=2*m*n*n;//M以内的素数集
int prim[M]={0};//素数集合
int Plen = 0; //素数集合长度 //产生素数集合
int isPrim(){prim[1]=2;int Plen=1;for(int i=3;i<=M;i+=2){//枚举每个数bool flag = true;for(int j=2;j<=sqrt(i);j++){if(i%j==0){flag=false; break;}}if(flag) prim[++Plen]=i;}return Plen;
}//指纹计算
int fingerPrintCompute(string s,int j,int wp,int p){int fg = 0;for(int i=0;i<=m-1;i++){fg += (wp/2)*(s[j+i]-'a')%p; wp = wp/2;}return fg;
}//PatternMatching
int PatternMatching(){int p = prim[rand()%Plen];int j = 0; //伪代码是j=1,但字符串1-th下表是0,所以j=0,原理一样。 int WP = ((int)pow(2*1.0,m*1.0))%p;int Ip_Y = fingerPrintCompute(Y,0,WP,p);int Ip_Xj = fingerPrintCompute(X,j,WP,p);while(j<=n-m+1){if(Ip_Xj==Ip_Y) return j;Ip_Xj = (2*Ip_Xj-WP*(X[j]-'a')+(X[j+m]-'a'))%p;j++;}return 0;
}int main(int argc, char *argv[]){cout<<"输入长度"<<n<<"的字符串和长度"<<m<<"的模式"<<endl; cin>>X>>Y; //输入文本串、模式Plen=isPrim();cout<<"从小于"<<M<<"的素数集长度是 "<<Plen<<endl; int position = PatternMatching();cout<<"模式第一次出现在文本串的位置下表是"<<position<<endl; return 0;
}
6 测试
输入:asvas
as
输出:从小于100的素数集长度是 25
模式第一次出现在文本串的位置下表是0
随机算法——蒙特卡罗算法——模式匹配问题相关推荐
- 随机算法-蒙特卡罗算法
在论文中多次看到ε-approximation概念,然后百度发现也很少说这个的.只有在其他论文里面有讲到.这里就是记录下目前所了解的比较浅显的理解. 可以比较论文基于k-means的(1+ε)近似算法 ...
- 数模算法 — 蒙特卡罗算法及Matlab案例
本文为博主编写文章,未经博主允许转载,转载请注明出处:https://blog.csdn.net/weixin_42604241/article/details/97382158 蒙特卡罗算法(方法) ...
- 秒懂算法 | 蒙特卡罗算法
主元素问题的蒙特卡罗算法分析.设计与Python实战. 蒙特卡罗算法的基本思想:设p是一个实数,且0.5<p<1.若蒙特卡罗算法对于问题的任一实例得到正确解的概率不小于p,则称该算法是p正 ...
- 算法--蒙特卡罗算法/正态分布随机数生成
蒙特卡洛方法 1简述 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常 ...
- 0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题
1.蒙特卡罗算法 基本概述 蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法.传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地 ...
- 随机算法:蒙特卡罗算法和拉斯维加斯算法
随机算法分成两类: 蒙特卡罗算法:采样越多,越近似最优解: 拉斯维加斯算法:采样越多,越有机会找到最优解: 上图区分记忆一下: 蒙特卡罗是一类随机方法的统称,这里摘一段知乎大神(鹌鹑)的概括:(这些蒙 ...
- OpenMP 编程实例(蒙特卡罗算法)
有关clock()函数 1,clock()函数在头文件#include<time.h>中 2,clock()函数的返回值类型为clock_t.clock_t其实是long,即长整形. cl ...
- 双色球python十种算法_python : 蒙特卡罗算法 应用于双色球
参考书:算法设计与分析 王晓东 编著 :第7章 概率算法 7.5 蒙特卡罗算法 http://www.gdfc.org.cn/datas/history/twocolorball/history_1. ...
- 蒙特卡罗算法与拉斯维加斯算法
http://www.zhihu.com/question/20254139 太数学的东西就不说了,只用通俗唱法回答楼主的问题. 蒙特卡罗算法并不是一种算法的名称,而是对一类随机算法的特性的概括.媒体 ...
最新文章
- centos7httpd服务的搭建
- ggplot2 图形排版:patchwork 包复杂排版
- 个推透传消息设置通知栏展示 ios_手机通知栏消息太多,这招教你关闭弹出消息,立刻清爽...
- Rxjs debounce 操作符在 SAP Spartacus 函数节流中的一个实际使用例子
- linux脚本开机挂载,案例七:shell实现开机自动挂载本地YUM仓库程序
- STM32之DAC例程
- QT5日志功能(qDebug、qWarnng、qCritical、qFatal)
- 使用selenium和phantomJS浏览器登陆豆瓣的小演示
- 微软推出Windows Sandbox:可安全运行任何应用的一次性VM\n
- Windows10与Vmware配置Windowsserver2003共享磁盘
- 开始使用Pyhton
- 《游牧者的抉择》读书笔记
- conda 解决An HTTP error occurred when trying to retrieve this URL.
- Android SO 加壳
- 性能之巅——洞悉系统、企业与云计算 Brendan Gregg
- php项目素材,PHP素材资源解析平台源码V8.0(thinkPHP框架内核)
- 腾讯云服务器修改和重置登录密码图文教程
- Codeforces Round #791 (Div. 2)(A-D)
- 前端切图案例课程一则-姜威-专题视频课程
- 计算机专业进中国移动难吗,【计算机】中国移动面试技巧和注意事项
热门文章
- 《成吉思汗与今日世界之形成》--读后感
- 转载-解决OnMouseDown OnMouseUp与OnClick事件的冲突问题
- 以人为本的安全(Human-centered Security)
- docker 指定特定出口 ip
- ANSYS Workbench项目分析与案例实操详解
- easyui的数据网格实现多条件查询并显示数据
- 软考高级 真题 2018年上半年 信息系统项目管理师 案例分析
- 中山大学 计算机院博士录取名学,中山大学2020年博士研究生招生拟录取名单公示...
- 神州今年卖150万台
- 漏洞挖掘 | 简单高效的模糊测试Fuzzing