社区
数据结构与算法
帖子详情
关于BM算法里bmBc[x[i]]为什么要用字符来做数组下标?
goodboy5201314
2010-07-13 02:35:32
关于BM算法里bmBc[x[i]]为什么要用字符来做数组下标?不怕数组越界和其他数据冲突么?
...全文
77
2
打赏
收藏
关于BM算法里bmBc[x[i]]为什么要用字符来做数组下标?
关于BM算法里bmBc[x[i]]为什么要用字符来做数组下标?不怕数组越界和其他数据冲突么?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
goodboy5201314
2010-07-21
打赏
举报
回复
有没有其他答案呢??
donkey301
2010-07-13
打赏
举报
回复
bmBC记录的是每个字符最后在模式串中的位置,正常来说用一个表,譬如hashtable或者stl中的map来表示就行了。但如果是c语言,没有hashtable,而自己造一个又比较麻烦,所以用所有字符的数组来代替这个表,虽然有些浪费,但简单够用就行。这个数组是不会越界的,因为开辟的时候大小就取成了所有的字符的个数。
相关推荐
BM
算法
#ifndef __
BM
_H__ #define __
BM
_H__ #include <algorithm> using namespace std; #define ASIZE 256 void pre
Bm
Bc
(char *x, int m, int
bm
Bc
[]) { int i; for (i = 0; i < ASIZE; ++i)
bm
Bc
[i] = m; for (i = 0; i < m - 1; ++i)
bm
Bc
[x
BM
算法
实现源代码
void pre
Bm
Bc
(char *x, int m, int
bm
Bc
[]) { int i; for (i = 0; i < ASIZE; ++i)
bm
Bc
[i] = m; for (i = 0; i < m - 1; ++i)
bm
Bc
[x[i]] = m - i - 1; } void suffixes(char *x, int m
Horspool(
字符
串匹配)
算法
实现 c语言
#include<stdio.h> #define ASIZE 256 void pre
Bm
Bc
(char *x, int m, int
bm
Bc
[]) { int i; for (i = 0; i < ASIZE; ++i)
bm
Bc
[i] = m; for (i = 0; i < m - 1; ++i)
bm
Bc
[x[...
BM
算法
自我理解
BM
算法
坏
字符
原则: 示例: 76543210 GCAGCGAG 坏
字符
(Bad Char):多次重复的
字符
在子串中最后出现的位置
bm
Bc
【i】: GCAT 1328 T为文本中出现的
字符
但是模式串中不包含的
字符
好后缀原则: 好后缀(Good Suffix):到与当前匹配的后缀相同但是与当前失配
字符
不同的位置的距离
bm
Gs【i】: 7 6 5 4 3 2 1 0 G C A G C G A...
BM
algorithm
//
BM
algorithm /* 1:
bm
bc
[p[i]]:p中最右边出现的p[i]
字符
到p最后一个
字符
的步长(plen-1-i),但不是坏
字符
时需要主串移动的步长 2: suffix[i]:p[i]往前推(包括p[i]),与p[len-1]往前推(包括p[len-1]),的最大匹配长度(匹配
字符
个数) 3:
bm
gs[i]:p中能够最大匹配p[i+1]到p[len-1]
字符
的步长,其是好
发帖
数据结构与算法
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
3.2w+
社区成员
3.5w+
社区内容
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
帖子事件
创建了帖子
2010-07-13 02:35
社区公告
暂无公告