摘要: 原题: http://poj.org/problem?id=3002DescriptionBill has found the perfect way to make money playing the slot machines. After months of careful research, he has finally figured out the mechanics behind how the machines operate. Now he is ready to make profit of his findings.But first an introduction to 阅读全文
posted @ 2011-06-28 00:08 ljsspace 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 原题:http://topic.csdn.net/u/20110623/10/0324c75e-f72a-4894-83e9-f5a00fc88f62.html?85618描述:有k个正整数 任取其中k-1个数 找到一个他们的最小公倍数数N 求N的最小值分析:可以采用以下三种方法:******************************1) 方法一:(缺点:需对k个数做质因素分解)基本想法是先对每个数做质因素分解,然后对k-1个数两两相互统计,找出它们对应质因子的最大个数,最后当所有k-1个数统计结束时,结果就是该质因子个数的最大值,然后将这些质因子相乘(个数>=1,需要重复相乘), 阅读全文
posted @ 2011-06-28 00:05 ljsspace 阅读(501) 评论(1) 推荐(0) 编辑
摘要: 原题:http://acm.hdu.edu.cn/showproblem.php?pid=1251Problem DescriptionIgnatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).Input输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.注意:本题只有一组测试数据,处理到文件结束.Output对于每个提问,给出以该字 阅读全文
posted @ 2011-06-28 00:01 ljsspace 阅读(522) 评论(0) 推荐(0) 编辑
摘要: Patricia前缀树(Patricia Trie)及其基本操作Trie是一种字典树,用于存储文本字符,并利用了单词之间共享前缀的特点,所以叫做前缀树。不像平衡BST,Trie的高度只与最长的文本串的长度s有关系,而与单词的数量n无关。Trie的节点分两种:内部结点和叶子结点,内部结点用来存储单词key的成分字母,如果设字母表大小为d,那么每个内部结点最多有d个孩子,叶子结点存储该单词作为key的数据内容(data)。注意内部结点和叶子结点并不是互斥的,一个内部结点本身可以有儿子结点,同时它也可以是一个叶子结点。例如:这里ab结点本身就是叶子结点,因为它以#结束符标记了,同时它有两个儿子结点a 阅读全文
posted @ 2011-06-27 23:59 ljsspace 阅读(4121) 评论(0) 推荐(1) 编辑
摘要: Boyer-Moore除了考虑Horspool算法(参考笔者的另一篇专门介绍Horspool算法的文章)的坏字符之外,还将模式串中已经匹配成功的后缀(叫做好后缀, good suffix)考虑进来,从而得到全部已经知道的启发信息(heuristic)。因此从理论上来说,BM算法应该是性能最佳的一个算法,实践中也证明了这一点。 这也是为什么BM算法经常用作精确匹配算法里面的性能测试基准算法。例如,在通过下面的图示就可以看出, KMP算法由于没有考虑进来bad character信息,比较次数比BM算法稍多: (图一)上面在i=4,j=4时出现mismatch,在KMP算法中的做法是找出j-1右边 阅读全文
posted @ 2011-06-21 16:45 ljsspace 阅读(834) 评论(0) 推荐(0) 编辑
摘要: KMP(Knuth–Morris–Pratt)算法的发明时间几乎跟BM(Boyer-Moore)算法在同一时期,即上世纪70年代末(巧合的是随着互联网的发展对文本处理提出了更高的要求,从而最近几年字符处理又成了热门话题),二者在最坏情况下的时间复杂度都是O(n)。它与BM算法的主要区别是:1)在每次匹配中都是从左到右匹配,BM算法每一次匹配过程都是从模式串末尾开始匹配(指针从右到左移动),直到发现匹配失败字符(mismatch)才根据两张表(好后缀位移表-good suffix shift table和坏字符位移表-bad character shift table)决定向右移动一定的位置,因 阅读全文
posted @ 2011-06-21 16:41 ljsspace 阅读(551) 评论(0) 推荐(0) 编辑
摘要: 英语里有句习语叫"find a needle in a haystack",译成中文叫"大海捞针"(原意是在一堆干草中寻找一根针)。计算机中的文本匹配(string matching)就是要解决怎样在一段很长的文本中找到符合要求的一个子串,该子串通常叫模式串(pattern),也就是对应我们要找的“针”。常用的文本精确匹配(exact string matching)算法有蛮力法(brute-force),Boyer-Moore算法和KMP算法。后两种算法都是用空间换 时间的经典案例,不像蛮力法,文本的位置指针i不需要回退到已经匹配过的字符位置(BM算法 阅读全文
posted @ 2011-06-19 14:54 ljsspace 阅读(1466) 评论(0) 推荐(0) 编辑
摘要: 原题出自:http://topic.csdn.net/u/20110617/10/f9b370a2-dad8-42ad-9202-86e23cd84dea.html问题描述:小华和小明的风筝不小心断了线,掉到了一个圆形湖圆心处的孤岛上。两人都不会游泳,幸好湖边有一条小船,不过可惜没有桨,也没有其他的动力工具。船上放着一根绳子,两人决定利用这根绳子,将一头栓在船上,小华上船,小明在岸边拉绳子使船移动的方法,靠近小岛,由小华取回风筝,再由小明把船拉回岸边。如果他们最后成功了,请问这根绳子最少要有多长(栓在船上的部分不计)?他们是怎么做到的?分析:设湖的圆心为O,湖的半径为r。显然绳子长度>= 阅读全文
posted @ 2011-06-17 22:32 ljsspace 阅读(401) 评论(2) 推荐(0) 编辑
摘要: AA树 - 红黑树的变种作者:ljs 2011-06-15AA树是Arne Andersson教授在他的论文"Balanced search trees made simple"中介绍的一个红黑树变种,设计的目的是减少RB树考虑的cases。AA树是一颗红黑树,但是规定红色结点不能作为任何结点的左孩子,也就是说红色结点只能作为右孩子。这样本质上跟2-3树类似(虽然后者属于B树)。另外AA树为实现方便,不再使用红黑两种颜色,而是用level标记结点。level实际上就相当于RB树中的black height,叶子结点的level等于1(反过来,level等于1的不一定是叶子结 阅读全文
posted @ 2011-06-16 00:08 ljsspace 阅读(1474) 评论(1) 推荐(0) 编辑
摘要: 原题:1) ZOJ: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=21362) POJ: http://poj.org/problem?id=2533问题描述:A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequence of the given numeric sequence (a1, a2, ..., aN) be any sequence (ai1, ai2, ..., aiK), where 1 阅读全文
posted @ 2011-06-11 20:14 ljsspace 阅读(316) 评论(0) 推荐(0) 编辑