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

韶关做网站微博推广费用一般多少

韶关做网站,微博推广费用一般多少,java编程做网站,苏州网站建设排名KMP算法 基本概念 KMP算法是一种高效的字符串匹配算法,算法名称取自于三位共同发明人名字的首字母组合。该算法的主要使用场景就是在字符串(也叫主串)中的模式串(也叫子串)定位问题,常见的有“求子串出现…

KMP算法

基本概念

KMP算法是一种高效的字符串匹配算法,算法名称取自于三位共同发明人名字的首字母组合。该算法的主要使用场景就是在字符串(也叫主串)中的模式串(也叫子串)定位问题,常见的有“求子串出现的起始位置”、“求子串的出现次数”等。

核心算法

暴力匹配

暴力匹配的算法思想很简单,即依次枚举主串中的字符,作为匹配子串的起始字符,然后将两个字符串从起始位置一一比对,若中间出现字符串不匹配的情况,则将主串的起始位置回溯到上一起始位置的下个位置,子串的起始位置回溯到第一个字符,重新开始匹配,时间复杂度为O(m*n),效率较低

在这里插入图片描述

算法优化

KMP算法相比于暴力匹配算法,最大的优化就是利用匹配失败时失败之前的已知部分时匹配的这个有效信息,保持主串的 i 指针不回溯,通过修改模式串(子串)的 j 指针,使模式串尽量地移动到有效的匹配位置该算法的时间复杂度为 O(n+m),算法过程示例如下:

在这里插入图片描述

对上面的例子进行抽象分析:

在这里插入图片描述

其中,我们需要借助next数组,来求出子串的最大相等前缀和后缀的长度,即上图中的B,当主串与子串的字符不匹配时,我们只需要让子串的起始位置回溯到最长相等前缀的下一个位置即图中的z,而主串不需要再回溯,这样就大大提高了匹配效率,时间复杂度也减小到了O(m+n)

next数组

next数组的定义
  • 最长前缀概念: 最长前缀是说以第一个字符开始,但是不包含最后一个字符
  • 最长后缀概念: 最长后缀是说以最后一个字符开始,但是不包含第一个字符
  • next 数组定义:在模式串中(下标从0开始),next[i] 表示模式串中以下标 i 处字符结尾的子串的最大相同前后缀的长度。在KMP算法中,该值一方面表示模式串中1~i位置子串中的最长相同前后缀长度,另一方面表示在该位置匹配失败时模式串回溯比较的下一个字符位置(最长前缀末座标的下一个字符
如何求next数组

对于模式串 S 来说,首先初始化 next[0] = 0(一个字符不存在相同前后缀,所以长度为0)。假设在求取模式串 next 数组的过程中(与主串无关),已知 next[j] 现在要求 next[j+1] 则有以下两种情况:

  • 若 S[ j+1 ] == S[ next[j] ] : 则 next[j+1] = next[j]+1;(next[j] 的值表示长度,但在下标为0开始的字符数组中就表示相等前缀末下标的下一位,因此不用+1即可)

  • 若 S[ j+1 ] != S[ next[j] ] : 则说明该结尾处的相同前后缀应该比 j 处的更短一些,也就是我们要找一个更短的前缀和 j+1 处的后缀进行相等匹配。但是由 j 处的匹配可知 A~F 段的前后缀是相同的,因此这就等价于我们要在前缀 A~F 段中即 0~next[j]-1 中寻找一个尽可能大的相同前后缀。而之前的前后缀我们都已经求出了,于是比较就变成了 k = next[next[j] - 1] & S[j+1] == S[k]

在这里插入图片描述

算法实现:

void getNext(char* s,int len)
{next[0] = 0;int k = 0; //k = next[0]int i = 1;while(i < len){if(s[i] == s[k]){next[i++] = ++k; //next[j+1] = k+1;}else{if(k > 0)k = next[k-1]; //k = next[k-1]else{next[i++] = k; //next[j+1] = 0 回溯到头了,找不到相同前缀,则最大相同前后缀长度=0}}}
}

经典例题

//返回主串T中子串S第一次出现的位置下标,找不到则返回-1
int kmp(char *T, char* S)
{int len_T = strlen(T);int len_S = strlen(S);for(int i = 0,j = 0;i<len_T;i++){while(j > 0 && T[i] != S[j])j = next[j-1];if(T[i] == S[j])j++;if(j == len_S)return i-len_S+1;}return -1;
}
http://www.dtcms.com/wzjs/51658.html

相关文章:

  • 电子商务网站营销方案免费服务器
  • 网站建设电话销售的话术seo专业知识培训
  • dede网站后台地址扫描百度seo优化分析
  • 看网站的浏览器站长网站统计
  • 有什么正规的网站做代加工长春网站建设制作
  • vi设计哪里有seo sem优化
  • 免费logo设计的网站百度关键词工具入口
  • 网站建设项目执行情况报告模板网页自动点击软件
  • 宁波网站推广优化公司电话百度seo如何优化
  • 公司变更登记申请表seo是哪个英文的缩写
  • 哈尔滨网站开发企业吉林seo网络推广
  • wordpress导航站模版网络广告策划书范文
  • 咸宁响应式网站建设价格南昌seo全网营销
  • 一个人开公司做网站整合营销传播理论
  • 网站设计 论坛提高销售的10种方法
  • 花样云做网站怎样国外搜索引擎入口
  • 珠海市企业网站制作服务机构百度关键词刷搜索量
  • 成都网站建设龙兵科技网站seo收费
  • FPGA毕业设计代做网站域名注册平台
  • 软件测试有前途吗网站建设公司seo关键词
  • 新东方雅思培训机构官网seo免费优化网址软件
  • 东莞seo建站优化费用seo建站是什么意思
  • 济南哪家做网站信息流广告推广
  • 上海微信网站建设公司品牌营销成功案例
  • 网页设计与网站建设期末考试题怎么开展网络营销推广
  • wordpress自定义的注册页面模板优化网站排名公司
  • nba网站建设的意义微信加精准客源软件
  • 重庆垫江网站建设7个湖北seo网站推广策略
  • wish网站应该怎么做电商运营方案
  • 政府网站建设培训讲话深圳网络营销网站设计