bm算法,C语言实现.doc
《bm算法,C语言实现.doc》由会员分享,可在线阅读,更多相关《bm算法,C语言实现.doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法设计与分析基础实验报告实验名称 BM算法的实现 学 院 计算机学院 专业班级 计算机科学与技术09(2)班 学 号 姓 名 黄 进 杰 指导教师 顾 国 生 2012 年 12 月 03 日一、 实验目的与要求l 理解Boyer-Moore算法的思想l 掌握用Boyer-Moore算法来查找字符或字符串的方法二、 实验内容#include #include #include #define TMax 10000/文本串最大值 #define PMax 200/模式串最大值/* 函数:int* MakeSkip(char *, int)目的:根据坏字符规则做预处理,建立一张坏字符表参数:pt
2、rn = 模式串PPLen = 模式串P长度 返回: int* - 坏字符表*/int* MakeSkip(char *ptrn, int pLen)int i;/为建立坏字符表,申请256个int的空间/*PS:之所以要申请256个,是因为一个字符是8位, 所以字符可能有2的8次方即256种不同情况*/int *skip = (int*)malloc(256*sizeof(int);if(skip = NULL)fprintf(stderr, malloc failed!);return 0;/初始化坏字符表,256个单元全部初始化为pLenfor(i = 0; i 模式串PPLen = 模
3、式串P长度 返回: int* - 好后缀表*/int* MakeShift(char* ptrn,int pLen)/为好后缀表申请pLen个int的空间int *shift = (int*)malloc(pLen*sizeof(int);int *sptr = shift + pLen - 1;/方便给好后缀表进行赋值的指标char *pptr = ptrn + pLen - 1;/记录好后缀表边界位置的指标char c;if(shift = NULL)fprintf(stderr,malloc failed!);return 0;c = *(ptrn + pLen - 1);/保存模式串中
4、最后一个字符,因为要反复用到它*sptr = 1;/以最后一个字符为边界时,确定移动1的距离pptr-;/边界移动到倒数第二个字符(这句是我自己加上去的,因为我总觉得不加上去会有BUG,大家试试“abcdd”的情况,即末尾两位重复的情况)while(sptr- != shift)/该最外层循环完成给好后缀表中每一个单元进行赋值的工作char *p1 = ptrn + pLen - 2, *p2,*p3;/该do.while循环完成以当前pptr所指的字符为边界时,要移动的距离dowhile(p1 = ptrn & *p1- != c);/该空循环,寻找与最后一个字符c匹配的字符所指向的位置p2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- bm 算法 语言 实现
限制150内