当前位置: 首页 > news >正文

wordpress 多站点 独立域名广告投放

wordpress 多站点 独立域名,广告投放,自己做游戏网站,达人室内设计网app1. 原由 紧接上文,我们知道了暴力匹配的算法在时间运行上的缺陷,假设字符串T的长度为n,字符串P的长度为m,则整个算法的时间复杂度为O( n * m ),而对于一个复杂的现实情况而言 n >> m >> 2 (即…

1. 原由

紧接上文,我们知道了暴力匹配的算法在时间运行上的缺陷,假设字符串T的长度为n,字符串P的长度为m,则整个算法的时间复杂度为O( n * m ),而对于一个复杂的现实情况而言 n >> m >> 2 (即n远远大于m,m远远大于常数),这样的计算计算机的负担很重。

请思考一个暴力匹配的情况:

给定一个主字符串

T = “AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB”(47位)

同时给定模式串 P = “AAAAAB”(6位)

试问搜索的情况,很显然,暴力搜索对于每一次搜索,都要搜索到最后一个字符才能进行下一轮的搜索,因此进行的计算近似可以理解为:O(47 * 6) ,对于这样很少的数据已经有很高的计算量了。

KMP算法一种改进的模式匹配算法,是D.E.Knuth、V.R.Pratt、J.H.Morris于1977年联合发表,KMP算法又称克努特-莫里斯-普拉特操作, KMP算法与前文的暴力匹配算法,核心的区别就是没有不匹配的回溯,而是根据整个字符串的情况进行一次位移,这样大大减少了回溯产生的缺陷,KMP算法的时间复杂度可以优化到 O( n + m)级别,是二次优化到线性的程度。

2.构造next表(以-1开头)

对于模式串P而言,我们需要知道模式串中P的每一位的前一位是否存在相等的完全相等的前后缀,并且求这个最大的完全相等的前后缀,如一个模式串”ABCABDE”对于第倒数第二位字符而言,其符合情况的前后缀就是”AB”,而最后一位则没有完全相等的前后缀。

PS:何为前后缀:如一个字符串”ABCD”,其前缀有可能为”A”“AB”“ABC”(即除去本身的全部字符),同理,则后缀可能为:”D””CD””BCD”

我们需要求的就是每一个字符其相对应的最大前后缀数,这样与模式串P一一对应的表称之为next表。

因此”ABCABDE”的next表为:-1 0 0 0 1 2 0 (字符用空格隔开)

那么我们该如何实现代码呢?

对于每一个当前需要判断的字符而言,在构造next表时,应该向前进行比对,以上一个已经判断的情况为基础(初始值赋-1,部分教程中初始值赋0,两者没有实质区别),后缀如果+1位置的字符与前缀+1位置的字符相等,则next[i]就是next[i-1]+1,而如果不相等,则说明无法匹配,则next[i]=0。

3. KMP实现

与暴力匹配极其相似,利用while循环的条件控制, 进行匹配失败时,只需要将失败的模式串P的索引指向next表中对应的数值即可,其余匹配照旧线性执行即可。

4. 实现代码(仅作参考)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;int *buildNext(char *P){int m = strlen(P) , j=0;int * N = new int[m];int t = N[0] = -1;while( j < m-1 ){if( 0 > t || P[j] == P[t] ){N[++j] = ++t;}else{t = N[t];}}return N;
}int KMP(char T[],char P[]){ //T--主串,P--模式串int *next = buildNext(P);   //构造NEXT表int n = strlen(T) , i=0;int m = strlen(P) , j=0;while( j<m && i<n ){if( j<0 || T[i]==P[j] ){i++;j++;}else{j = next[j];}}delete []next;return i-j;
}int main(){char org[] = "ABABABABABD";char str[] = "ABABD";int ans = KMP(org,str);cout << ans <<endl;return 0;
}

输出6,即经过6位,在第七位发生匹配

http://www.ds6.com.cn/news/80487.html

相关文章:

  • 网站安全架构免费建网站软件下载
  • 专业网站建设微信官网开发广告投放数据分析
  • 网页设计是什么行业的网站seo外链平台
  • 网站左下角命名怎么做谷歌浏览器安卓下载
  • 寮步仿做网站电商平台排名
  • 网站开发答辩ppt新媒体营销策略有哪些
  • 内部网站建设app网络推广竞价是什么
  • 网站开发怎么自动获取位置网络项目平台
  • 如何从建设局网站上更换职称人员东莞企业网站推广
  • 做的最好的视频网站廊坊百度快照优化排名
  • 做外销批发有什么网站优化设计答案五年级上册
  • 毛片a做片在线观看网站有哪些推荐就业的培训机构
  • 集团网站建设 中企动力营销培训
  • 网页制作与网站建设实战大全汕头seo外包平台
  • 深圳网约车租赁公司哪家好长春seo按天计费
  • 做网站开发前景如何徐州seo招聘
  • b站推广网站2024国短视频seo搜索优化
  • wordpress主题漏洞奉化首页的关键词优化
  • 网站后台bootstrap搜索引擎优化管理实验报告
  • 用手机可以做网站嘛微信朋友圈广告推广代理
  • 网站开发培训周末班网页设计工资一般多少
  • 想找人做公司网站要注意什么种子搜索神器网页版
  • 自己做的网站加载不出验证码百度竞价推广培训
  • 能免费建网站吗网站推广seo招聘
  • seo关键词排名公司榆林百度seo
  • 手机网站域名哪里注册站内seo的技巧
  • 网站建设资金管理办法郑州最好的建站公司
  • 衡水医院网站建设十大网络舆情案例
  • 张北北京网站建设360竞价推广技巧
  • 东营市住房和城乡建设管理局汕头seo网络推广