回应模式 - No.63929406


No.63929406 - 学业打卡


Mlk0的本科学习生活无名氏No.63929406 只看PO

2024-09-30(一)00:56:40 ID:Mlk0Yai 回应

以及26跨考

无标题无名氏No.65507555

2025-03-11(二)23:04:46 ID: Mlk0Yai (PO主)

>>No.65507486
不,…就是跳过几个。

无标题无名氏No.65507934

2025-03-11(二)23:32:53 ID: Mlk0Yai (PO主)

等等
我脑子里能把next数组直接算出来,但是我不理解实现这个算法的代码背后的逻辑

无标题无名氏No.65508024

2025-03-11(二)23:39:34 ID: Mlk0Yai (PO主)

还有,我知道next数组为kmp算法服务但是我捋不清next数组如何联系kmp算法,我是说next数组这套方法是怎么能套在kmp算法上的

无标题无名氏No.65508028

2025-03-11(二)23:40:06 ID: Mlk0Yai (PO主)

不行我感觉我提的问题也不是很清楚 有点混乱

无标题无名氏No.65508993

2025-03-12(三)01:05:40 ID: Mlk0Yai (PO主)

我的理解里,kmp算法就是要看模式串里前缀后缀有没有共同的地方。当主串指针和模式串指针行进到不能匹配的位置时,主串指针先不动,根据已经通过匹配的子串,看模式串里(已经通过匹配的部分)前后缀是否有相同。若存在相同,则模式串指针移动到公共后缀的后一个字符(不包含公共前缀),然后再去和主串尝试匹配,也就是说这相当于前缀移动到后缀的位置(于是就实现了“主串当前指针之前通过匹配的子串不需要再参与匹配”)。
那么我的问题是?…

next数组产生的逻辑?…对,我能依靠记忆里的方法算出每个next值但是我不知道这样算背后的逻辑。

根据我的第一段描述里,我是知道要寻找公共前后缀。那么相应的,我就需要找到模式串里所有的公共前后缀。当然这些公共前后缀的长度会有所不同,又因为第一段里我说过模式串的指针需要移动到公共前缀后一个字符再尝试与主串匹配,那么模式串指针移动的终点与…当然会与匹配的公共前后缀长度相关。
这么一想,我又觉得认为“next数组中存储的是’当该字符不匹配时,对应的next数为 模式串指针应当传送至的模式串中的对应字符 的数组下标(数组下标从0开始)‘ ”仿佛可取,又或者“跳过”的说法和这个其个其实一样只是我没琢磨出来。主要是看的几个视频举的例子都符合我的这个思路,不知道是不是巧合,我也不敢确定我的思路一定可以推广到全部。是我走错路了也有可能。

果然…到底是怎么得来的next数组啊,为什么是这种方式实现的…果然是卡在了这里。
先睡觉吧

无标题无名氏No.65518653

2025-03-12(三)22:59:35 ID: Mlk0Yai (PO主)

>>No.65508993
我艹我在说什么 我又不懂了

无标题无名氏No.65518680

2025-03-12(三)23:01:28 ID: Mlk0Yai (PO主)

>>No.65508993
这里第一段应该是“模式串指针移到公共「前」缀的后一个字符”

无标题无名氏No.65518690

2025-03-12(三)23:02:22 ID: Mlk0Yai (PO主)

>>No.65518680
而且括号里的(不包含…)说的不对

无标题无名氏No.65518735

2025-03-12(三)23:06:22 ID: Mlk0Yai (PO主)

>>No.65508993
又看了一个视频 采用的确实是“定位”而非“跳过”的说法
我现在搞不懂为什么是和公共前后缀长度有关