Boyer-Moore BM算法(普林斯顿算法课Algorithm2-part II:Substring Search)
来源:互联网 发布:初始化磁盘数据错误 编辑:程序博客网 时间:2024/06/16 13:25
Intuition :
从右到左对照pattern扫描字符当发现一个不在pattern里面的字符的时候,尽可能多的跳过字符。
Case 1:
当前匹配失败的字符不在pattern里面的时候,跳过这个字符,在右侧从下一个字符开始重新开始匹配pattern。
before
Txt · · · · · T L EPat · · N E E D L E
after
Txt · · · · · T L EPat · · · · · · N E E D L E
Case 2a:
当前匹配失败的字符在pattern里面的时候,将pattern移到与该字符对应的位置重新开始
before
Txt · · · · · N L EPat · · N E E D L E
after
Txt · · · · · N L EPat · · · · · N E E D L E
Case 2b:
当前匹配失败的字符在pattern里面,但是需要back-up,此时back-up并没有帮助。
before
Txt · · · · · E L EPat · · N E E D L E
Wrong
Txt · · · · · E L EPat N E E D L E
那么如何skip :
预先计算txt里面每个字符c在pattern里面的位置(-1表示字符不在pattern里面)
right = new int[R]; for (int c = 0; c < R; i++) { right[c] = -1; } for (int j = 0; j < M; j++) { right[pat.charAt(j)] = j; }
Boyer-moore算法
public int search(String txt) { int N = txt.length(); int M = pat.length(); int skip; for (int i = 0; i < N; i += skip) { skip = 0; for (int j = M - 1; j >= 0; j--) { if (pat.chatAt(j) != txt.charAt(i + j)) { skip = Math.max(1, j - right[txt.charAt(i + j)]); } } if (skip == 0) { return i; } } return N; }
阅读全文
1 0
- Boyer-Moore BM算法(普林斯顿算法课Algorithm2-part II:Substring Search)
- BM(Boyer-Moore)算法
- Boyer-Moore(BM)算法学习
- BM算法(Boyer-Moore algorithm)
- Boyer-Moore算法(BM) and Sunday算法
- 【weekly-sharing】BM算法(Boyer-Moore算法)学习记录
- 算法导论—Boyer-Moore(BM)算法
- Boyer-Moore algorithm (BM算法)--带模拟器
- java 实现的Boyer-Moore(BM)算法
- BM算法(Boyer-Moore) (JAVA实现)
- 字符串匹配算法 之 BM(Boyer-Moore)
- 字符串查找算法BM算法(Boyer-Moore)算法
- 字符串查找算法BM算法(Boyer-Moore)算法
- 字符串匹配的Boyer-Moore算法 BM算法详解
- 字符串匹配的Boyer-Moore算法 BM算法详解
- Boyer-Moore算法学习
- Boyer-Moore 算法详解
- Boyer-Moore算法学习
- 【观察】联想数据中心业务整体布局见成效 背后的动能和势能
- Scrapy架构简述
- NOIP2017 游记 Day 1
- 该如何学习java-IO流
- U3D Shader Forward Path光源存储信息
- Boyer-Moore BM算法(普林斯顿算法课Algorithm2-part II:Substring Search)
- C++创建对象及注意事项
- BFS/DFS引出A*算法
- 2017CCPC 秦皇岛比赛总结
- redis五大类型用法
- javascript中自执行(自调用)函数的两种写法
- 51nod 1350 斐波那契表示 (数学)
- xampp 无法启动apache
- 系统之间通讯方式(BIO和NIO的区别)(二)