KZ
item
Негізгі бет
Трендинг
Журнал
Ұнаған бейнелер
Ең жақсы KZitem
Фильм және анимация
Автокөліктер мен көлік құралдары
Музыка
Үй жануарлары мен аңдар
Спорт
Ойындар
Комедия
Ойын-сауық
Тәжірибелік нұсқаулар және стиль
Ғылым және технология
Кіру
Тіркелу
Кіру
Тіркелу
Негізгі бет
Трендинг
Журнал
Ұнаған бейнелер
Ең жақсы KZitem
Фильм және анимация
Автокөліктер мен көлік құралдары
Музыка
Үй жануарлары мен аңдар
Спорт
Ойындар
Комедия
Ойын-сауық
Тәжірибелік нұсқаулар және стиль
Ғылым және технология
Негізгі бет
KMP字符串匹配算法1
Күн бұрын
KMP字符串匹配算法1
Рет қаралды
34,740
黄浩杰
1
1
KMP字符串匹配算法01
主要介绍KMP算法的原理以及手动运算过程。下一讲会带大家写代码。
Жүктеу
Пікірлер: 92
@zhewang2653
5 жыл бұрын
目前能找到的最好版本了,算法和过程讲解的很清楚。 美中不足的是,看完这个视频我只知道了怎么做,而不知道为什么要这么做。具体原理和为什么不够清晰,如果只是强记算法流程忘得很快。 能想到的几个问题是: 1. 为什么要找最大公共前后缀,原理是什么,具体作用是什么。 2. 前缀表的长度要与搜索字符的pattern相同,但为什么可以不看最后一个最长公共前后缀而要在index[0]的位置补充-1. 比如 ABAB的前缀表应该是[0,0,1,2],为什么用这个前缀表算法就行不通(已亲测貌似行不通),而非要改成[-1,0,0,1]? 3.为什么当字符不匹配发生的时候,能够放心的通过前缀表对应的数值进行移动?原理是什么?我个人理解是为了最大限度的保留已经成功匹配的字符串,避免做无用功像brute force那样重复的去试验。但是具体是如何实现了最大限度的保留了成功匹配,视频中没有例子支撑,所以不好理解。
@FatAsianDude
3 жыл бұрын
是啊,只讲了应用,没有讲原理,这样很容易忘。
@piinoeer710new2
3 жыл бұрын
可以看下邓俊辉的公开课 数据结构
@ArthurKing7634
2 жыл бұрын
可以自己體會一下 我的理解是為了可以知道,在匹配失敗時,可以往右跳多少繼續執行,省去每次重新從頭匹配的cost
@chenyifa
5 жыл бұрын
这哥们讲东西讲的很细致透彻
@yuewenz4230
7 жыл бұрын
书写好工整 强迫症患者看的好舒服!
@susiexu72
Жыл бұрын
我在bilibili上搜kmp 看到视频首图就知道是你的视频了。每一个讲解都是精品!
@xiu8548
2 жыл бұрын
终于找到一个讲清楚前缀表是怎么搞出来的,看了几个人都没说清楚。 谢谢
@larry1285
4 жыл бұрын
終於看到我看得懂的教學了 謝謝
@nkyfxlyy
5 жыл бұрын
最工整最完整最详细最清晰的解答了。。。前后看了十个吧,也许是我笨,一直没明白到底是怎么个算法,但现在终于明白了,感谢up主
@一天-b3e
4 жыл бұрын
过几天你又忘记了
@nkyfxlyy
4 жыл бұрын
@@一天-b3e 真的哎!
@一天-b3e
4 жыл бұрын
@@nkyfxlyy 本质是你刚匹配出错时前面已经匹配的一小段字符串的前缀和后缀如果相同的话,找出这个最大公共前后缀长度,这样下次匹配就不要从模式串从头开始,因为这个最大前缀在你上次匹配出错时候刚匹配过,你自己想想吧,想偷懒肯定要找出最大的公共前后缀长度,尽可能减少无用功:)
@kazmalomlice801
5 жыл бұрын
看了各式各樣的文字解說 還是不如你講得容易懂 謝謝!
@guoyidong6369
3 жыл бұрын
正月点灯笼大佬,从b站跑过来!视频真的太棒了
@ruixincheng6201
4 жыл бұрын
强呀,看完算法导论的讲解再看你的瞬间明白,厉害!
@zixuanpeng1183
4 жыл бұрын
看完wik的KMP完全没搞懂,看了作者讲解非常透彻
@bobyuan5007
6 жыл бұрын
看了四个视频,就这个看懂了。 感谢拖动P字符串的讲解方式。 有一个问题,为什么当P的某个字符与T不匹配的时候,移动的时候按照prefix table?
@tpof314
6 жыл бұрын
因为prefix table的作用,就是用来保证前面有多少个字符能够完整匹配上。所以,按照prefix table移动的话,前面已经成功匹配的部分,可以完全保证不用重新匹配一次
@xuzhongwei9735
4 жыл бұрын
是的
@RDY_97
5 жыл бұрын
根据《算法导论》讲的,一般前缀后缀等不包括字符串本身
@guoyidong6369
3 жыл бұрын
真的太爱您了,视频太有用了
@frankli3066
Жыл бұрын
感謝講解 下禮拜的資料結構期中有救了QQ
@celinlu7274
2 жыл бұрын
讲的非常清楚,感谢
@jasonyang9178
2 жыл бұрын
感谢感谢 终于搞清楚了 其他文章视频都讲不清楚
@塩酸田代
3 жыл бұрын
比較了下 Thomas H. Cormen 的《Introduction to Algorithms》以及 GeeksforGeeks 的解法,這邊計算 prefix table 時位移 1 位並補上 -1 在首位並非必要,差別在於 1. 判斷匹配成功結束時的 index 會差一個 offset。2. 判斷 prefix 全部不匹配、需要從頭來的判斷式與 index reset 不同。其餘流程都一樣
@狄江
2 жыл бұрын
表达太清晰了!👍👍👍
@zzhang4373
6 жыл бұрын
讲得很清楚
@YoungChillq
Жыл бұрын
牛啊,终于看懂了
@kosamexu8790
4 жыл бұрын
讲得超级清楚,终于听懂了哭哭
@XXX-md6iu
3 жыл бұрын
看了各式各樣的教學,你的講解是最清楚易懂的
@xihuang6992
6 жыл бұрын
想的清晰才能讲得清晰。手动给赞。
@xihuang6992
6 жыл бұрын
唯一遗憾的就是KMP利用了匹配失败之前成功匹配的子串信息减少了不必要的匹配次数这点(也就是为什么计算前缀表)没有直接讲出来。
@tonybernoulli7859
5 жыл бұрын
求多做一些这种算法视频,讲得太好了
@tpof314
5 жыл бұрын
谢谢支持。我还有录了不少这种视频。点我的头像应该就可以找到其他相关视频了。希望能帮我宣传宣传。
@tonybernoulli7859
5 жыл бұрын
黄浩杰 最近一直在看你的讲解,segment tree, NP, DP讲的都非常清楚! 一定宣传
@tpof314
5 жыл бұрын
@@tonybernoulli7859 谢谢,谢谢!
@heshiyin
6 жыл бұрын
讲的很棒!支持
@chris--tech
5 жыл бұрын
太棒了,讲的太明白了
@tanhaosz
3 жыл бұрын
讲得很好
@punhaldu1361
3 жыл бұрын
讲的太赞啦!!!
@xuzhongwei9735
4 жыл бұрын
讲得太好了!
@erdunbao8796
2 жыл бұрын
很多不懂得不是什么步骤得到结果, 而是走每一步的时候的为什么这样做, 作者怎么想的
@李小四-v1i
5 жыл бұрын
清楚易懂~強
@monica_chen
Жыл бұрын
謝謝你 終於看懂了QQ
@nilcipher1351
5 жыл бұрын
谢谢!讲得很好
@fanfan196
3 жыл бұрын
请您多出视频。讲解清晰声音好听(
@lawrencewqy
4 жыл бұрын
个人理解,为什么算出来prefix后要右移一位并且头部置为-1?因为prefix表示的是当前字符之前字符串的公共前后缀的最大长度,所以是不包括当前字符本身的,因此需要右移一位。
@王甯-h2x
3 жыл бұрын
@Soap 你理解完當然覺得沒那麼難理解, 同理心. 不過你後面的解釋是清楚的, 但也花了不少行數.
@haemonyang6278
5 жыл бұрын
GOOD 資料結構有救了
@yiningli3160
4 жыл бұрын
题外话,小哥声音好听
@onejava5662
4 жыл бұрын
小花妹妹一枚。。。
@wilburz125
6 жыл бұрын
太厉害了!
@srewsala1779
2 жыл бұрын
終於懂了..牛逼..
@user-so4bl6ss7k
2 жыл бұрын
謝謝
@赵祎-w3t
6 жыл бұрын
十分感谢
@laiwei5974
7 жыл бұрын
7:57秒的时候你说真正写出来的时候要把本来的前缀值移动一下。-1对应第一个元素,0对应第二个。 不是很理解为什么,这样我们本来的prefix 值不是给错人了吗
@tpof314
7 жыл бұрын
这个是根据index来的。原本前缀表发明的时候,是以1为最小index来创建的。但是,现在大部分的语言的index都是从0开始。所以,全部移动一位,强迫对齐。
@suehong7783
2 жыл бұрын
黄浩杰我的男神
@jlpeng9036
5 жыл бұрын
好赞!
@whoami7228
6 жыл бұрын
谢谢
@劉彥廷-n5m
5 жыл бұрын
太強了
@binluo9622
2 жыл бұрын
为什么不讲一下最长公共前后缀的定义是什么?看得很懵逼,而且第一个为什么要变成-1?
@piinoeer710new2
3 жыл бұрын
两年了。我又来了
@abelyuan240
3 жыл бұрын
妙啊
@konglee8737
5 жыл бұрын
想知道你的数位板是哪个型号
@marionxia6433
3 жыл бұрын
怎么得到这个前缀表?
@jomosis9234
5 жыл бұрын
7:04 为什么 ababc的最长公共前后缀是0呢,最长前缀是abab,最长后缀是babc,公共前后缀不是bab吗
@tpof314
5 жыл бұрын
前缀必须从第一个字母开始算。后缀必须以最后一个字母结束。不能从中间砍。
@tpof314
5 жыл бұрын
bab并不是ababc的后缀。
@jomosis9234
5 жыл бұрын
@@tpof314 感谢回复,我刚刚没有仔细看视频,漏了细节,现在已经完全明白了,第一次理解KMP,感动
@user-gt5hg9mg7t
2 жыл бұрын
根本不需要這麼複雜
@ChMno2
Жыл бұрын
: D
@hz3169
7 жыл бұрын
关键是为什么想到用前缀表呢???
@tpof314
7 жыл бұрын
问得好~ 我也不知道…… 关于前缀表,网上有很多种不同的理解方法。不过,我自己感觉解释得比较好的是通过自动机的原理来解释前缀表的构造。至于当时作者是怎么想出来的,这点真的不清楚。有兴趣的话可以去找相关材料看一下。
@hz3169
7 жыл бұрын
请问代码什么时候出来呢,期待
@tpof314
7 жыл бұрын
代码只能再等一段时间了。下周有特别重要的任务要完成~ 不好意思了
@xinxinwang9370
6 жыл бұрын
有自动机DFA或FSM基础的同学可以参考这个链接: www.ics.uci.edu/~eppstein/161/960222.html
@SeanXWJiang
5 жыл бұрын
为什么我看这个视频没有声音?
@tpof314
5 жыл бұрын
有声音的。我这边测试是有声音的。
@SeanXWJiang
5 жыл бұрын
@@tpof314 我用手机APP就有声音了。。。难受。就KMP这两个视频没声音,其他的都可以
@wanyinwu5586
5 жыл бұрын
关键是前缀表的原理啊。。。感觉没讲到。。
@tpof314
5 жыл бұрын
好多人都在说前缀表的原理没有讲到。过段时间我再录一小段补充一下。其实原理非常简单,这里先提示一下:前缀表为什么这么算?换一种说法:这个最长公共前后缀代表了什么意思?
@wanyinwu5586
5 жыл бұрын
@@tpof314我后来看了邓俊辉老师的数据结构就懂了。你讲的方式已经很好了,很容易看懂,就是感觉不够深入。
@raysunerraysuner8483
4 жыл бұрын
我看了邓俊辉老师还是没能懂,能交流下吗
@zhangyiwen7716
4 жыл бұрын
kzitem.info/news/bejne/z4CYtJlmkqybm6w 建议你学习一下这个视频
@你的几把毛
Жыл бұрын
全是广告
@lylechen8881
5 жыл бұрын
卵用都没有!这个前缀表算法是从天上掉下来的吗?还是从地里长出来的?
@朱融晨-g9b
5 жыл бұрын
Lyle Chen 我的理解就是,这个前缀表是为了确定模式字符串P最多可以往后移动多少位(暴力法是只移动一位)
@RDY_97
5 жыл бұрын
《算法导论》32章
@RDY_97
5 жыл бұрын
也不至于卵用没有吧。。。
Пікірлер: 92