kmp算法c语言,kmp算法c语言代码

dfnjsfkhak 5 0

大家好,今天小编关注到一个比较意思的话题,就是关于kmp算法c语言问题,于是小编就整理了2个相关介绍kmp算法c语言的解答,让我们一起看看吧。

  1. KMP算法中的next数组如何计算?
  2. 什么样的代码叫好代码?

KMP算法中的next数组如何计算

你好,KMP算法中的next数组是用来优化模式匹配过程的关键数组,它记录了模式串中前缀和后缀的最长公共部分长度。具体计算方法如下:

1. 初始化next数组,将next[0]赋值为-1,将next[1]赋值为0。

kmp算法c语言,kmp算法c语言代码-第1张图片-芜湖力博教育咨询公司
图片来源网络,侵删)

2. 从模式串的第二个字符开始,依次计算每个字符对应的next值。***设当前计算的字符为P[j],其前一位的next值为next[j-1],则需要判断P[j]和前缀P[0...next[j-1]]的最长公共部分长度。

3. 如果P[j]和P[next[j-1]]相等,则next[j]的值为next[j-1]+1。

4. 如果P[j]和P[next[j-1]]不相等,则需要不断回溯,将next[next[j-1]]作为新的next[j-1],然后再次判断P[j]和P[next[j-1]]的最长公共部分长度。这个过程可以使用递归实现,也可以使用循环实现。

kmp算法c语言,kmp算法c语言代码-第2张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

5. 如果回溯到next[j-1]=-1时仍然没有找到相等的前缀,则next[j]=0。

6. 计算完所有的next值后,就可以使用KMP算法进行字符串匹配了。

举个例子:***设模式串为"ABCDABD",则next数组为[-1,0,0,0,0,1,2,0]。

kmp算法c语言,kmp算法c语言代码-第3张图片-芜湖力博教育咨询公司
(图片来源网络,侵删)

1. 计算next数组是一种字符串匹配算法中常用的方法。

2. 具体来说,next数组是指在匹配过程中,当匹配失败时,根据已经匹配的前缀和后缀的信息,确定下一次匹配的起始位置

3. 计算next数组的方法有多种,其中最常用的是KMP算法。

KMP算法的核心思想通过处理模式串,得到一个next数组,用于在匹配过程中快速跳过已经匹配的部分,从而提高匹配效率

具体计算方法可以参考相关的算法书籍或网络***。

abaabcac01122312前两个字母next序列分别为01,直接写上第三个"a" 时,它前一个字母为b,从头开始字母为a, a!=b所以为1第四个"a" 时,前字母为a,从头开始字母为a,a=a,所以值为1+1=2(相等时为串长加1)第五个"b",前个字母为a,从头开始a,a=a,为2第六个"c",前个字母为b,再往前是a,ab,从头开始ab串,ab=ab,因此值为2+1=3第七个字母为"a",前个字母为c,与从头开始的第一个字母不相等,所以为1第八个为"c",前个字母为a,与开始第一个字母相等,因此为2则返回逻辑“真(TRUE)”,反之返回逻辑“***(FALSE)”。

什么样的代码叫好代码?

本人是软件行业从业者,也经常考虑这个问题,正好借这个机会说一下个人的一些想法。个人认为好代码,可能需要满足一下一些条件

第一,实现功能,我认为这也是最重要的。如果你写的代码连最基本的功能都没实现,即使再漂亮再优雅,但一点实用性都没有,这点不满足的话,根本谈不上好代码。所以,我认为最大的质量就是实现功能,没有实现功能,其他的都是白扯

第二,排版合理。必要的缩进、换行、空行、空格括号对齐要合理,代码有层次感。

第三、必要的注释。类注释,说明类的用途,类的作者,可能还有类的用法等说明。方法注释,方法用途,方法作者,继承说明,参数说明,返回值说明等等。变量注释,主要说明变量的用途。代码块的注释,简明扼要的说明代码的作用,让其他人清楚明白。

第四、合理的命名规则。类的命名、方法的命名、变量的命名要有意义,易懂。

第五、编码中需要注意的一些事项和遵循的原则。比如输入流和输出流的关闭,需要在finally中进行操作。比如在代码中注意判空,防止NPE的出现。比如对大文件的处理,不要一下子读入内存,防止内存爆掉。比如注意抽取常量,统一处理,便于维护。比如对异常,最好进行精细化处理,可针对不同进行不同操作等等。还有一些基本原则,比如单一原则,方法实现功能尽量单一。比如开闭原则,比如依赖倒置原则,比如接口隔离原则,比如DRY原则等等。

第六、设计模式的使用。合理的使用设计模式,可以减少你代码的耦合度,提高代码的扩展性,提高可维护性。另外,可借助框架来减少你代码的耦合度,比如我们经常提到的spring

第七、合理的设计。进行必要的设计,但不会过度设计,让代码满足当前的需求。好的架构一般是演化出来的,未必是一次设计出来的

到此,以上就是小编对于kmp算法c语言的问题就介绍到这了,希望介绍关于kmp算法c语言的2点解答对大家有用

标签: next 数组 代码

上一个无人机培训力度要求,无人机培训力度要求多少

下一个无人机教飞培训,无人机教飞培训内容