12 2012 档案

摘要:简介哈稀函数按照定义可以实现一个伪随机数生成器(PRNG),从这个角度可以得到一个公认的结论:哈希函数之间性能的比较可以通过比较其在伪随机生成方面的比较来衡量。一些常用的分析技术,例如泊松分布可用于分析不同的哈希函数对不同的数据的碰撞率(collision rate)。一般来说,对任意一类的数据存在一个理论上完美的哈希函数。这个完美的哈希函数定义是没有发生任何碰撞,这意味着没有出现重复的散列值。在现实中它很难找到一个完美的哈希散列函数,而且这种完美函数的趋近变种在实际应用中的作用是相当有限的。在实践中人们普遍认识到,一个完美哈希函数的哈希函数,就是在一个特定的数据集上产生的的碰撞最少哈希的函数 阅读全文
posted @ 2012-12-19 10:30 Eric1990 阅读(559) 评论(0) 推荐(0)
摘要:字符串的算法一般大公司都会考到,我们首先要想到高效的hash。如百度查找一组字符串是否出现在某个文本中,这个不是考什么kmp,他们想听到的是hash。趋势科技考的是从某个文本中删除一组字符串,我想也是要hash吧。1 概述链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但Hash链表查找的时间效率为O(1)。设计高效算法往往需要使用Hash链表,常数级的查找速度是任何别的算法无法比拟的,Hash链表的构造和冲突的不同实现方法对效率当然有一定的影响,然 而Hash函数是Hash链表最核心的部分,本文尝试分析一些经典软件中使用到的字符串Hash函数在执行效率、离散性、 阅读全文
posted @ 2012-12-19 10:27 Eric1990 阅读(206) 评论(0) 推荐(0)
摘要:转自:http://blog.csdn.net/joylnwang/article/details/6801720提到多模式匹配算法,就得说一下Wu-Manber算法,其在多模式匹配领域相较于Aho-Corasick算法,就好象在单模式匹配算法中BM算法相较于KMP算法一样,在绝大多数场合,Wu-Manber算法的匹配效率要好于Aho-Corasick算法。这个算法是由吴升(台湾)和他的导师Udi Manber在九十年代提出。当然,要想充分理解WM算法如何加快多模式匹配的效率,还需要对BM算法的深刻了解,可以参考我的另一篇文章《BM算法详解》。在BM算法中引入的坏字符跳转概念,是BM算法能够在 阅读全文
posted @ 2012-12-17 11:25 Eric1990 阅读(520) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/shy-/archive/2012/05/01/2485140.html首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配算法的基础知识。AC自动机算法分为3步:构造一棵Trie树,构造失败指针和模式匹配过程。如果你对KMP算法和了解的话,应该知道KMP算法中的next函数(shift函数或者fa 阅读全文
posted @ 2012-12-13 12:57 Eric1990 阅读(177) 评论(0) 推荐(0)
摘要:星期五的时候,在网上看别人的总结看了很久也没有什么收获,不过星期六看了clj原汁原味的论文,终于明白了(网上的总结只写了大致做法,比较难理解).后缀自动机实质上是字母树,记录的字符串是某个字符串s的所有后缀.这里以字符串ACADD为例:这样很浪费空间和时间(实际上都是O(n^2)).但是,注意:这棵字母树的结点虽然多,但大部分结点都只有一个儿子,而且有很多段是一样的.那么,利用公共部分,就可以对空间进行压缩,具体地说,就是把自己连到儿子的边删掉(并把该儿子及其后代删掉),再把这条边连到别的子树,这样就能充分利用公共部分,节省空间.但是,如何保证这样做和原来的笨做法是等价的,又如何把时间复杂度和 阅读全文
posted @ 2012-12-12 10:03 Eric1990 阅读(232) 评论(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-12-11 20:31 Eric1990 阅读(542) 评论(0) 推荐(0)
摘要:如果我们想要建立一个自动机,使它能够接收一个串s的所有后缀,那么最暴力的想法应该就是,直接用这个串的所有后缀来建立一个AC自动机上面就是用aabbabd这个字母串作为母串建立的AC自动机(没有画fail边,好吧,那它就是个字母树...),嗯,建出这个东西的确就可以接收此串的所有后缀了,但是但是,聪明的朋友就会发现,这玩意儿的节点个数是O(n^2)级别的….我只给了你一个串,你就用了串长度平方个节点,害得我对于两位数的节点只能画更大的圆,太坑爹了吧。所以我们就需要YY出一个O(n)级别的节点个数和转移数的自动机也就是后缀自动机来处理这个问题。假设我们已经YY出了一个可以接收串S的后缀自动机A,那 阅读全文
posted @ 2012-12-11 15:52 Eric1990 阅读(202) 评论(0) 推荐(0)
摘要:非原创,仅供自学用转自:http://www.cnblogs.com/dsky/archive/2012/04/24/2467655.htmlHorspool是后缀搜索,也就是搜索已读入文本中是否含有模式串的后缀;如果有,是多长,显然,当后缀长度等于模式串的长度时,我们就找到了一个匹配。Horspool算法认为:对于每个文本搜索窗口,将窗口内的最后一个字符(C)与模式串的最后一个字符进行比较。如果相等,则继续从后向前验证其他字符,直到完全相等或者某个字符不匹配。然后,无论匹配与否,都将根据在模式串的下一个出现位置将窗口向右移动。匹配串:abcbcsdxzcxx模式串:cbcac这个时候我们从右 阅读全文
posted @ 2012-12-11 15:19 Eric1990 阅读(282) 评论(0) 推荐(0)
摘要:文章转自:http://www.searchtb.com/2011/07/%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8C%B9%E9%85%8D%E9%82%A3%E4%BA%9B%E4%BA%8B%EF%BC%88%E4%B8%80%EF%BC%89.html本系列文章主要介绍几种常用的字符串比较算法,包括但不限于蛮力匹配算法,KMP算法,BM算法,Horspool算法,Sunday算法,fastsearch算法,KR算法等等。本文主要介绍KMP算法和BM算法,它们分别是前缀匹配和后缀匹配的经典算法。所谓前缀匹配是指:模式串和母串的比较从左到右,模式串的移动也是从左到右; 阅读全文
posted @ 2012-12-11 11:46 Eric1990 阅读(198) 评论(0) 推荐(0)