2012年7月24日
摘要: BPD算法是对角式位并行算法,我是真没搞懂这个算法的原理是什么。但是根据伪代码我写出来了BPD算法的c++版实现。当容错率在0.1以上的时候,用BPD算法的效率要更高一些。 1 void BPD(char *p, char *t,int k) 2 { 3 int Pstr_len,Tstr_len,j,i,pos,D,x; 4 int B[128],BB[128]; 5 Pstr_len = strlen(p); 6 Tstr_len = strlen(t); 7 8 //Preprocessing 9 for(j=0;j<128;j++)... 阅读全文
posted @ 2012-07-24 22:52 unhealthy 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 今天有必要写篇日志来记录一下暑假c++大作业的情况。 我还是笔到临头就无语,本来挺有想法要写的,现在又不知道说啥....写写流水账吧。 首先是使劲的看算法书,华亮师兄扔了本《柔性字符串匹配》给我看,其实我没看完,我只看了单模式串匹配和近似匹配部分,多模式串、扩展模式串、正则表达式这三章我都还没看...以后补上... 把看过的算法都用c++自己实现了一遍,然后选了一个BPR近似匹配算法来试试手。发现可以用,近似匹配算法部分的框架算是有了。 接着想怎么来解决词库的问题,看了好多篇论文,谋篇论文里提到一个n-gram倒排索引的搜索方法,我就试着来建一个。利用txt文本文件的储存方式,我把... 阅读全文
posted @ 2012-07-24 12:25 unhealthy 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 近似匹配字符串的BPR算法,其实shift-and算法就是BPR算法的一种特例,就是精确匹配版的BPR。 BPR也是用到位并行技术。 原理嘛我还是没有很彻底的搞清楚,但是我把代码给写出来了..... 我的BPR算法C++实现: 1 int BPR(const char *p, char *t, int k) 2 { 3 int Pstr_len,Tstr_len,i,pos; 4 int R[128],B[256],pR,nR; 5 Pstr_len = strlen(p); 6 Tstr_len = strlen(t); 7 8 ... 阅读全文
posted @ 2012-07-24 11:36 unhealthy 阅读(641) 评论(0) 推荐(0) 编辑
摘要: BNDM算法的搜索方法与BDM算法相同,但它使用了位并行来识别子串。 与原始的BDM相比,BNDM更简单,内存用量更少,具有更好的引用局部性,并且易于扩展到更复杂的模式串的情形。 在当前搜索窗口内,设已读入的字符串为u,BNDM算法维护一个集合,记录u在prv中的所有出现位置。同shift—and算法一样,该集合可以用一个位向量D来表示。如果子串pj...pj+|u|-1等于u,那么D的第m-j+1位是1,表示p的位置j是一个活动状态。 当读入一个新的文本字符σ时,要从D更新到D'。D‘的一个活动状态j对应于σu在模式串中的一个起始位置,也就是说: * u出现在模式串的位置j+1,.. 阅读全文
posted @ 2012-07-24 11:27 unhealthy 阅读(584) 评论(0) 推荐(0) 编辑