2012年8月20日
摘要: 土耳其八日游回来... 抓紧时间写代码,现在大作业0.5版发布了。 大幅度优化界面,使其没有原来那样丑陋不堪.... 美化完成列表,增加背景颜色,改变字体颜色、样式、大小。使完成列表能与输入框伴随移动。 增加选中行高亮且变色。输入后自动选中第一行。 补完输入单词,就算单词不在词库里也可以自动补完了。 添加双击选择、空格选择(自动弹出第一个词语)。 优化代码,减少不必要开销,加快速度。 完成智能(虽然只是低智能)排序与筛选,再也没有原来那样一大把重复词语的现象了.... 优化搜索规则,使退格时不出现二次搜索。加快了速度减少了系统消耗。 因为采用了MVC的模式,换了一个Vi... 阅读全文
posted @ 2012-08-20 18:17 unhealthy 阅读(150) 评论(0) 推荐(0) 编辑
  2012年8月10日
摘要: 前段时间去旅游了,从广州骑单车骑到厦门。 全程共十天,意味着十天没写代码...不过路上还是有看书,在学java。 说回大作业。 在0.001的基础上增添了一个输出文本框,然后实现了键盘数字键快捷输出的功能。 优化了搜索算法,减少了不必要的开销,解决了一个单词错位的bug,整体速度有加快。 彻底的跟txt文件say goodbye了,之前在搜索算法的过程中用到了几个txt文件,现在都用容器来解决了,这样就减少了硬盘读写,加快了速度。 在用容器储存候选单词的过程中解决了一个单词与中文解释错位的bug,现在再也没遇到这样的问题了。 减少了搜索算法中的循环次数,在n-gram索引的搜... 阅读全文
posted @ 2012-08-10 13:40 unhealthy 阅读(111) 评论(0) 推荐(0) 编辑
  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) 编辑
  2012年7月5日
摘要: Horspool算法是首个对BM算法进行简化的算法。Horspool算法对d3进行了一些修改,使其易于计算并能产生更大的跳跃距离。 对于每个搜索窗口,该算法将窗口内文本的最后一个字符和模式串的最后一个字符进行比较。如果相等,则需要一个验证过程。该验证过程在搜索窗口中从后向前对文本和模式串进行比较,直到完全相等或者在某个字符处不匹配。然后,无论匹配与否,都将根据窗口内文本的最后一个字符的下一个出现位置将窗口向右移动。我的Horspool算法c++版实现代码: 1 void Horspool(char *p, char *t) 2 { 3 int Pstr_len,Tstr_len,i,... 阅读全文
posted @ 2012-07-05 00:00 unhealthy 阅读(303) 评论(0) 推荐(0) 编辑
  2012年7月4日
摘要: 与KMP算法一样,shift-and 和shift-or算法都是基于前缀搜索的字符串匹配算法。但是该算法的思想比KMP简单很多,它维护一个字符串的集合,集合中的每个字符串既是模式串P的前缀,同时也是已读入文本的后缀。每读入一个新的文本字符,该算法即用位并行的方法更新集合。该集合用一个位掩码D=dm......d1来表示。先说shift-and算法。D的第j位被置为1(称为D的第j位是活动的)当且仅当p1...pj是t1....tj的后缀。当dm是活动时,就表示有一个成功的匹配。当读入下一个字符ti+1时,需要重新计算新的位掩码D’。D’的第j+1位是活动的当且仅当D的第j位是活动的(即p1.. 阅读全文
posted @ 2012-07-04 16:05 unhealthy 阅读(1572) 评论(0) 推荐(0) 编辑