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

中企动力网站策划摄影作品集

中企动力网站策划,摄影作品集,嘉兴网站备案去哪里,杭州滨江网站制作目录 BF算法 KMP算法 BF算法 F算法#xff0c;即暴力(Brute Force)算法#xff0c;是普通的模式匹配算法#xff0c;BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配#xff0c;若相等#xff0c;则继续比较S的第二个字符和 T的第二个字符#xf…目录 BF算法 KMP算法 BF算法 F算法即暴力(Brute Force)算法是普通的模式匹配算法BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配若相等则继续比较S的第二个字符和 T的第二个字符若不相等则比较S的第二个字符和T的第一个字符依次比较下去直到得出最后的匹配结果。BF算法是一种蛮力算法。                                              ----这段话来自百度百科。 这段话晦涩难懂需要例子支持。下面我们就通过例子来解释这个问题。 假定我们给出字符串 ”ababcabcdabcde”作为主串 然后给出子串 ”abcd”,现在我们需要查找子串是否在主串中出现出现返回主串中的第一个匹配的下标失败返回-1 ; 只要在匹配的过程当中匹配失败那么i回退到刚刚位置的下一个,j回退到0下标重新开始。 对应C代码 /** Author高博 Date2021-08-02 21:54 str:主串 sub:子串 */ int BF(char *str,char *sub) { assert(str ! NULL sub ! NULL); if(str NULL || sub NULL) { return -1; } int i 0; int j 0; int strLen strlen(str); int subLen strlen(sub); while(i strLen j subLen) { if(str[i] sub[j]) { i; j; } else { //回退 i i-j1; j 0; } } if(j subLen) { return i-j; } return -1; } int main() { printf(%d\n,BF(ababcabcdabcde,abcd)); printf(%d\n,BF(ababcabcdabcde,abcde)); printf(%d\n,BF(ababcabcdabcde,abcdef)); return 0; } 对应java代码 /** * Created by GAOBO * Description: * User: GAOBO * Date: 2021-08-02 * Time: 22:05 */ public class Test { public static int BF(String str,String sub) { if(str null || sub null) return -1; int strLen str.length(); int subLen sub.length(); int i 0; int j 0; while (i strLen j subLen) { if(str.charAt(i) sub.charAt(j)) { i; j; }else { i i-j1; j 0; } } if(j subLen) { return i-j; } return -1; } public static void main(String[] args) { System.out.println(BF(ababcabcdabcde,abcd)); System.out.println(BF(ababcabcdabcde,abcde)); System.out.println(BF(ababcabcdabcde,abcdef)); } } 时间复杂度分析最坏为O(m*n); m是主串长度n是子串长度  KMP算法 KMP算法是一种改进的字符串匹配算法由D.E.KnuthJ.H.Morris和V.R.Pratt提出的因此人们称它为克努特—莫里斯—普拉特操作简称KMP算法。KMP算法的核心是利用匹配失败后的信息尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(mn) [1]  。 来自-------百度百科。区别KMP 和 BF 唯一不一样的地方在我主串的 i 并不会回退并且 j 也不会移动到 0 号位置 1 .首先举例为什么主串不回退 2 .j的回退位置 引出next数组 KMP 的精髓就是 next 数组也就是用 next[j] k;来表示不同的 j 来对应一个 K 值 这个 K 就是你将来要移动的 j要移动的位置。 而 K 的值是这样求的 1、规则找到匹配成功部分的两个相等的真子串不包含本身一个以下标 0 字符开始另一个以 j-1 下标字符结尾。 2、不管什么数据 next[0] -1;next[1] 0;在这里我们以下标来开始而说到的第几个第几个是从 1 开始 求next数组的练习 练习 1 举例对于”ababcabcdabcde” 求其的 next 数组 -1 0 0 1 2 0 1 2 0 0 1 2 0 0 练习 2 再对”abcabcabcabcdabcde ”,求其的 next 数组 -1 0 0 0 1 2 3 4 5 6 7 8 9 0 1 2 3 0 到这里大家对如何求next数组应该问题不大了接下来的问题就是已知next[i] k;怎么求next[i1] ?如果我们能够通过 next[i]的值,通过一系列转换得到 next[i1]得值那么我们就能够实现这部分。 那该怎么做呢 首先假设 next[i] k 成立那么就有这个式子成立 P0...Pk-1 Px...Pi-1;得到 P0...Pk-1 Pi-k..Pi-1;到这一步我们再假设如果 Pk Pi;我们可以得到 P0...Pk Pi-k..Pi;那这个就是 next[i1] k1;  那么 Pk ! Pi 呢 看如下实例 c语言代码 void GetNext(int *next,const char *sub) { int lensub strlen(sub); next[0] -1; next[1] 0; int i 2;//下一项 int k 0;//前一项的K while(i lensub)//next数组还没有遍历完 { if((k -1) || sub[k] sub[i-1])// { next[i] k1; i; k;//k k1???//下一个K的值新的K值 } else { k next[k]; } } } int KMP(const char *s,const char *sub,int pos) { int i pos; int j 0; int lens strlen(s); int lensub strlen(sub); int *next (int *)malloc(lensub*sizeof(int));//和子串一样长assert(next ! NULL); GetNext(next,sub); while(i lens j lensub) { if((j -1) || (s[i] sub[j])) { i; j; } else { j next[j]; } } free(next); if(j lensub) { return i-j; } else { return -1; } } int main() { char *str ababcabcdabcde; char *sub abcd; printf(%d\n,KMP(str,sub,0)); return 0; } java算法代码 public static void getNext(int[] next, String sub){ next[0] -1; next[1] 0; int i 2;//下一项 int k 0;//前一项的K while(i sub.length()){//next数组还没有遍历完 if((k -1) || sub.charAt(k) sub.charAt(i-1)) { next[i] k1; i; k; }else{ k next[k]; } } } public static int KMP(String s,String sub,int pos) { int i pos; int j 0; int lens s.length(); int lensub sub.length(); int[] next new int[sub.length()]; getNext(next,sub); while(i lens j lensub){ if((j -1) || (s.charAt(i) sub.charAt(j))){ i; j; }else{ j next[j]; } } if(j lensub) { return i-j; }else { return -1; } } public static void main(String[] args) { System.out.println(KMP(ababcabcdabcde,abcd,0)); System.out.println(KMP(ababcabcdabcde,abcde,0)); System.out.println(KMP(ababcabcdabcde,abcdef,0)); } next数组的优化 next 数组的优化即如何得到 nextval 数组有如下串 aaaaaaaab,他的 next 数组是-1,0,1,2,3,4,5,6,7.而修正后的数组 nextval 是 -1 -1 -1 -1 -1 -1 -1 -1 7。为什么出现修正后的数组假设在 5 号处失败了那退一步还是a还是相等接着退还是 a。 练习模式串 t‘abcaabbcabcaabdab’ 该模式串的 next 数组的值为 D nextval 数组的值为 F。 A 0 1 1 1 2 2 1 1 1 2 3 4 5 6 7 1 2 B 0 1 1 1 2 1 2 1 1 2 3 4 5 6 1 1 2 C 0 1 1 1 0 0 1 3 1 0 1 1 0 0 7 0 1 D 0 1 1 1 2 2 3 1 1 2 3 4 5 6 7 1 2 E 0 1 1 0 0 1 1 1 0 1 1 0 0 1 7 0 1 F 0 1 1 0 2 1 3 1 0 1 1 0 2 1 7 0 1
http://www.pierceye.com/news/569708/

相关文章:

  • 仿制网站建设山东关键词优化联系电话
  • 律所网站建设国队男子接力赛有哪些做短租的网站
  • 常用的网站推广方法制作简历模板网站
  • c2c网站有哪些网站可以先做代码么
  • 阿里云简单网站建设wordpress+调整+行距
  • 想自己做网站推广郴州网站建设哪里比较好
  • 实用网站推荐小程序权限超时
  • 济源市建设工程管理处网站wordpress模板搜索功能404
  • 成都三网合一网站建设网站广告收费标准
  • 网站制作咨询电话网站托管费用多少
  • 做网站 需求怎么写成都优化网站源头厂家
  • 我买了一个备案网站 可是公司注销了学服装设计的就业方向
  • 网站后台上传不了图片请人做网站需要注意什么条件
  • 建网站哪家好案例网页设计感悟与体会
  • 做网站要实名吗深圳货拉拉
  • 综合门户网站是什么意思建设机械网站
  • 主题资源网站建设作业高级网站开发工程师考试题
  • 含山建设局网站免费的个人简历模板文档
  • 门户网站建设推荐高校英文网站建设 文献综述
  • 织梦网站备案免费咨询网站
  • wordpress站内搜索插件网站管理程序
  • 网站建设友链交换自己电脑做网站iis
  • 全球优秀企业网站做原型的素材网站
  • 单页面营销网站怎么用polylang做网站
  • 网站开发入那个科目中国网站建设哪家公司好
  • 网站流量提升方案软件公司名称大全查询
  • 怎么做淘客专属网站济南公司网站推广优化最大的
  • 苏州网站建设极简幕枫织梦模板网站源码
  • 青岛网站设计定制2023传奇手游排行榜
  • 商务酒店网站建设淮南网备案查询