1 简单介绍

2 随机算法

3 指纹计算

4 计算步骤

假匹配

  1. 当Ip(Y)和Ip(X(j))不相等,那么Y和X(j)一定不匹配;
  2. 但是逆命题是错误的,即两指纹相同,X与X(j)也不一定匹配,即为假匹配。
  3. 这就是蒙特卡罗算法的体现之处,即一定有解,但不应正确。



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

随机算法——蒙特卡罗算法——模式匹配问题相关推荐

  1. 随机算法-蒙特卡罗算法

    在论文中多次看到ε-approximation概念,然后百度发现也很少说这个的.只有在其他论文里面有讲到.这里就是记录下目前所了解的比较浅显的理解. 可以比较论文基于k-means的(1+ε)近似算法 ...

  2. 数模算法 — 蒙特卡罗算法及Matlab案例

    本文为博主编写文章,未经博主允许转载,转载请注明出处:https://blog.csdn.net/weixin_42604241/article/details/97382158 蒙特卡罗算法(方法) ...

  3. 秒懂算法 | 蒙特卡罗算法

    主元素问题的蒙特卡罗算法分析.设计与Python实战. 蒙特卡罗算法的基本思想:设p是一个实数,且0.5<p<1.若蒙特卡罗算法对于问题的任一实例得到正确解的概率不小于p,则称该算法是p正 ...

  4. 算法--蒙特卡罗算法/正态分布随机数生成

    蒙特卡洛方法 1简述 蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常 ...

  5. 0049算法笔记——【随机化算法】蒙特卡罗算法,主元素问题,素数测试问题

    1.蒙特卡罗算法 基本概述        蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法.传统的经验方法由于不能逼近真实的物理过程,很难得到满意的结果,而蒙特卡罗方法由于能够真实地 ...

  6. 随机算法:蒙特卡罗算法和拉斯维加斯算法

    随机算法分成两类: 蒙特卡罗算法:采样越多,越近似最优解: 拉斯维加斯算法:采样越多,越有机会找到最优解: 上图区分记忆一下: 蒙特卡罗是一类随机方法的统称,这里摘一段知乎大神(鹌鹑)的概括:(这些蒙 ...

  7. OpenMP 编程实例(蒙特卡罗算法)

    有关clock()函数 1,clock()函数在头文件#include<time.h>中 2,clock()函数的返回值类型为clock_t.clock_t其实是long,即长整形. cl ...

  8. 双色球python十种算法_python : 蒙特卡罗算法 应用于双色球

    参考书:算法设计与分析 王晓东 编著 :第7章 概率算法 7.5 蒙特卡罗算法 http://www.gdfc.org.cn/datas/history/twocolorball/history_1. ...

  9. 蒙特卡罗算法与拉斯维加斯算法

    http://www.zhihu.com/question/20254139 太数学的东西就不说了,只用通俗唱法回答楼主的问题. 蒙特卡罗算法并不是一种算法的名称,而是对一类随机算法的特性的概括.媒体 ...

最新文章

  1. centos7httpd服务的搭建
  2. ggplot2 图形排版:patchwork 包复杂排版
  3. 个推透传消息设置通知栏展示 ios_手机通知栏消息太多,这招教你关闭弹出消息,立刻清爽...
  4. Rxjs debounce 操作符在 SAP Spartacus 函数节流中的一个实际使用例子
  5. linux脚本开机挂载,案例七:shell实现开机自动挂载本地YUM仓库程序
  6. STM32之DAC例程
  7. QT5日志功能(qDebug、qWarnng、qCritical、qFatal)
  8. 使用selenium和phantomJS浏览器登陆豆瓣的小演示
  9. 微软推出Windows Sandbox:可安全运行任何应用的一次性VM\n
  10. Windows10与Vmware配置Windowsserver2003共享磁盘
  11. 开始使用Pyhton
  12. 《游牧者的抉择》读书笔记
  13. conda 解决An HTTP error occurred when trying to retrieve this URL.
  14. Android SO 加壳
  15. 性能之巅——洞悉系统、企业与云计算 Brendan Gregg
  16. php项目素材,PHP素材资源解析平台源码V8.0(thinkPHP框架内核)
  17. 腾讯云服务器修改和重置登录密码图文教程
  18. Codeforces Round #791 (Div. 2)(A-D)
  19. 前端切图案例课程一则-姜威-专题视频课程
  20. 计算机专业进中国移动难吗,【计算机】中国移动面试技巧和注意事项

热门文章

  1. 《成吉思汗与今日世界之形成》--读后感
  2. 转载-解决OnMouseDown OnMouseUp与OnClick事件的冲突问题
  3. 以人为本的安全(Human-centered Security)
  4. docker 指定特定出口 ip
  5. ANSYS Workbench项目分析与案例实操详解
  6. easyui的数据网格实现多条件查询并显示数据
  7. 软考高级 真题 2018年上半年 信息系统项目管理师 案例分析
  8. 中山大学 计算机院博士录取名学,中山大学2020年博士研究生招生拟录取名单公示...
  9. 神州今年卖150万台
  10. 漏洞挖掘 | 简单高效的模糊测试Fuzzing