ARTS (第14周)
现在是真正明白了那句话,算法和数据结构是不可分离,二者是相辅相成的。
本周:
BM算法、KMP算法、堆排序。
Algorithm 算法
BM算法
BM算法全名Boyer-Moore字符串搜索算法,是一种非常高效的[字符串搜索算法]。它由Bob Boyer和J Strother Moore设计于1977年。
此算法首先对模式串进行预处理,构建各类字典,减少后期不必要的匹配,在匹配失败的时候根据不同的原则,进行大幅度的跳跃。减少匹配次数。
匹配原则分为好字符原则和坏字符原则,构建字典,匹配到了坏字符或者好字符,就可以根据这二种规则进行一个较长长度的跳跃。
代码如下:
1 | package pack; |
KMP搜索算法
KMP算法是由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此取名KMP。
KMP算法和BM算法类似,也是发现无法匹配的时候进行大幅度的跳跃。
具体实现就是实现一个next()函数(有的地方称之为失效函数),函数本身包含了模式串的局部匹配信息。
匹配失败就根据失效函数进行跳跃。
代码如下:
在后面我还写了一个变种写法,大体思路不变,仅仅是坐标有所改变。
1 | package pack; |
堆排序
堆排序就是利用堆结构,首先建堆,再删除堆顶,以此进行排序的。
1 | package pack; |
Review 英文文章
https://lucene.apache.org/solr/news.html
solr的各个版本信息。
Tip 技巧
极客时间的专栏《数据结构与算法之美》
本周学习了该专栏中的33-34篇
其中33篇是再次重新理解的。之前看完33篇以为理解了BM算法,在后面写代码的时候,发现很多地方尚未理解,本周就重新学习了一遍。
这两篇的核心内容就是BM算法和KMP算法。
BM算法:
分此算法首先对模式串进行预处理,构建各类字典,减少后期不必要的匹配,在匹配失败的时候根据不同的原则,进行大幅度的跳跃。减少匹配次数。
匹配原则分为好字符原则和坏字符原则,构建字典,匹配到了坏字符或者好字符,就可以根据这二种规则进行一个较长长度的跳跃。
KMP算法:
KMP算法和BM算法类似,也是发现无法匹配的时候进行大幅度的跳跃。
具体实现就是实现一个next()函数(有的地方称之为失效函数),函数本身包含了模式串的局部匹配信息。
匹配失败就根据失效函数进行跳跃。
Share 分享
https://www.zhihu.com/question/21923021
如何更好的理解和掌握 KMP 算法? (看其中逍遥行的回答)
https://www.zhihu.com/question/33776070/answer/722984174
算法数据结构中有哪些奇技淫巧