java学习之算法2


@

字符串比较

BF算法即为暴力破解算法

通过一位一位的移动,和比较来确定了,相重复的字符串

RK算法属于hash算法

通过一位一位的移动,来计算和相比较的目标字符串的hash值,这个减少比较的次数,但是也会出现需要移动一次,比较整个字符串的内容,跟暴力算法一样了

BM算法

BM算法

坏字符规则:从右往左匹配,从要找的A字符串中找到第一个不匹配的字符(就是坏字符),将B字符串右移,直到B串中出现与A串坏字符对齐,再往左边继续寻找坏字符,如果B目标字符串中没有该坏字符,则直接移动到该坏字符的下一位即可;也就是在B中不匹配的字符之前找一个,跟A中坏字符相同的,把Byi

好后缀规则:从右往左匹配,找到坏字符(坏字符之后的就是好后缀),往左找B中是否还有该好后缀,若有则将B右移到该位置与A好后缀对齐,重复该规则。如果B串往右没有该好后缀,则右移到好后缀的右边一位,重复该规则,避免B串的前缀与好后缀的后缀匹配

综合使用,那种移动的位数多使用那种

时间复杂度O(n/m) ,退化时间复杂度O(n*m)

BM算法

KMP复杂度

前缀,后缀

PMT值:前缀集和后缀集的交集中集中的最长元素的长度

在不匹配的字符串前A串的后缀和B串的前缀的最大公共交叉字符串

例子


文章作者: 毛豆不逗比
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 毛豆不逗比 !
  目录
{% include '_third-party/exturl.swig' %} {% include '_third-party/bookmark.swig' %} {% include '_third-party/copy-code.swig' %} + {% include '_custom/custom.swig' %}