MP算法

#include <bits/stdc++.h>
using namespace std;
int fail[1005];
void getline(string &str){
char c=getchar();
	while(c==‘\n‘||c==‘\r‘)c=getchar();
	while(c!=‘\n‘&&c!=‘\r‘)str+=c,c=getchar();
}
int find(string A,string B){
int j=0;
	for(int i=0;i<A.size();i++){
		while(A[i]!=B[j]&&j)j=fail[j];
		if(A[i]==B[j])j++;
		if(j==B.size())return i-j+1;
	}
}
void getfail(string A){
	for(int i=1;i<A.size()-1;i++){
		int j=fail[i];
		while(j&&A[i]!=A[j])j=fail[j];
		if(A[j]==A[i])fail[i+1]=j+1;
	}
}
int main(){
string A,B;
	getline(A);
	getline(B);
	getfail(B);
	cout<<find(A,B)<<endl;
	return 0;
}

  

时间: 2024-10-10 23:55:50

MP算法的相关文章

MP算法、OMP算法及其在人脸识别的应用

主要内容: 1.MP算法 2.OMP算法 3.OMP算法的matlab实现 4.OMP在压缩感知和人脸识别的应用 一.MP(Matching Pursuits)与OMP(Orthogonal Matching Pursuit)算法 内容:稀疏信号的表示(字典.稀疏系数).MP算法.MP算法的缺点.OMP.OMP的实现 参考文章:http://blog.csdn.net/scucj/article/details/7467955 二.OMP的matlab实现 %A-稀疏系数矩阵%D-字典/测量矩阵

MP算法和OMP算法及其思想

主要介绍MP(Matching Pursuits)算法和OMP(Orthogonal Matching Pursuit)算法[1],这两个算法尽管在90年代初就提出来了,但作为经典的算法,国内文献(可能有我没有搜索到)都仅描写叙述了算法步骤和简单的应用,并未对其进行详尽的分析,国外的文献还是分析的非常透彻,所以我结合自己的理解,来分析一下写到博客里,算作笔记. 1. 信号的稀疏表示(sparse representation of signals) 给定一个过完备字典矩阵,当中它的每列表示一种原

[填坑][主线任务]MP&amp;KMP算法

当时一直就没有理解QAQ,觉得会hash就够了,但是想到fail数组有很多神奇的妙用,于是来填这个坑 先讲MP算法: 我就直接说fail数组的含义吧(从0开始字符串下标): fail[i]表示0~i-1这个串的最长border的长度,同时也是重新开始匹配的将要匹配的那个位置下标. 举个小栗子:对于字符串 abcdabd fail[6]=2,即abcdab的最长border的长度为2(ab),匹配失败的时候,下标跳到fail[6](为2)再来匹配,即从‘c’字母开始匹配(因为前边的‘ab’已经匹配

MP and KMP

MP 是 KMP 的简单版本,目前以下题目都是MP算法 KMP的原理就不多说了 http://kb.cnblogs.com/page/176818/ (这个模板起始的next数组值为0,不是-1,在模板中,next数组叫f数组) #include <stdio.h> #include <stdlib.h> #include <string.h> #define maxn XXX//自己定 char P[maxn] ; int f[maxn] ; void getFail

LA 3026(Period-MP算法)[Template:KMP]

3026 - Period Time limit: 3.000 seconds For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, for each i (2 ≤ i ≤ N) w

算法之美隆重上市欢迎关注(更有三重好礼)

探秘算法世界,求索数据结构之道: 汇集经典问题,畅享编程技法之趣: 点拨求职热点,敲开业界名企之门. 内容简介:本书围绕算法与数据结构这个话题,循序渐进.深入浅出地介绍了现代计算机技术中常用的四十余个经典算法,以及回溯法.分治法.贪婪法和动态规划等算法设计思想.在此过程中,本书也系统地讲解了链表(包括单向链表.单向循环链表和双向循环链表).栈.队列(包括普通队列和优先级队列).树(包括二叉树.哈夫曼树.堆.红黑树.AVL树和字典树).图.集合(包括不相交集)与字典等常用数据结构.同时,通过对二十

关于KMP算法的认识

目前大二,大一时年自己纯属划水度过,身为一个学计算机的可能连一些没学的还要差.感觉自己不能在这样颓废下去了,是时候要努力一波了. 决定开始从算法开始补起. 大一数据结构在字符串匹配的时候曾讲过,当时对计算机还处于相当懵逼的状态,自然也就不会.前几天看算法题又一次看到了,决定把它补回来. KMP算法 首先要先看 BF算法--最简单直观的模式匹配算法 如果用BF暴力匹配的思路 算法步骤: 分别利用计数指针i , j  指示主串S和模式T中当前正待比较的字符位置pos,j初值为0: 如果当前字符匹配成

视频编码技术---压缩感知编码---匹配跟踪算法

转自https://blog.csdn.net/rainbow0210/article/details/53386695 压缩感知近些年在学术界非常火热,在信号处理领域取得了很多非常不错的成果. 博主最近的项目涉及到K-SVD算法,所以也就顺带着学习其重要的组成部分--匹配跟踪算法. 本文只介绍最基本的匹配跟踪算法和正交匹配跟踪算法,即MP和OMP. 这个算法的优化和变形非常之多,近些年学术界很多人都在研究这个,有兴趣的读者可以自行查阅相关论文,本文不多做阐述. 废话少说,直接上干货. 所谓压缩

8.8联考题解

今天的T1让我怀疑我是不是在做奥赛题--这考的是什么知识点啊这个,会不会用绝对值函数? Evensgn 的债务 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Evensgn 有一群好朋友,他们经常互相借钱.假如说有三个好朋友A,B,C.A 欠 B 20 元,B 欠 C 20 元,总债务规模为 20+20=40 元.Evensgn 是个追求简约的人,他觉得这样的债务太繁杂了.他认为,上面的债务可以完全等价为 A 欠C20 元,B 既不欠别人,别人也不欠他.这样总债务规模就压缩到了