1 / 34

精确搜索

精确搜索. 邹权 博士、助理教授 http://datamining.xmu.edu.cn. 介绍. 数据挖掘 数据搜索 (与数据库相关) 数据分析 (与机器学习相关) 举例 给定一段 DNA 序列,找出特定的基因 在互联网中,找出与“刘德华、朱丽倩婚姻相关”的网页. 精确搜索. 最简单、也是最难的问题 字符串精确匹配( Exact String Matching )问题可以描述如下:给定一个 长字符串 T 和一个 短字符串 P ,其中它们的长度分别是 |T|=m, |P|=n ,利用 最理想的时间和空间 找出全部的 T 中与 P 完全匹配的子串。

fawzi
Télécharger la présentation

精确搜索

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 精确搜索 邹权 博士、助理教授 http://datamining.xmu.edu.cn http://datamining.xmu.edu.cn

  2. 介绍 • 数据挖掘 • 数据搜索 (与数据库相关) • 数据分析 (与机器学习相关) • 举例 • 给定一段DNA序列,找出特定的基因 • 在互联网中,找出与“刘德华、朱丽倩婚姻相关”的网页 http://datamining.xmu.edu.cn

  3. 精确搜索 • 最简单、也是最难的问题 • 字符串精确匹配(Exact String Matching)问题可以描述如下:给定一个长字符串T和一个短字符串P,其中它们的长度分别是|T|=m, |P|=n,利用最理想的时间和空间找出全部的T中与P完全匹配的子串。 • 习惯的表示方法:字符串T/P中的第i个字符用T(i)来表示。 http://datamining.xmu.edu.cn

  4. 精确搜索 • Z-box算法 • BMP算法 • AC算法 http://datamining.xmu.edu.cn

  5. Z-Box算法 • [定义]Zi(S)表示在字符串S中从第i位起与S的前缀匹配的最长的字符串的长度。(数值) • 注:如果S在上下文中很明显,Zi(S)可以用Zi来表示。 • 例:S=a a b c a a b x a a z 那么 1 2 3 4 5 6 7 8 • Z5(S)=3; Z6=1;Z7= Z8=0 http://datamining.xmu.edu.cn

  6. Z-box:其中每个与前缀匹配的子串就叫一个Z-box。对于任意数字i,如果S(i)属于某一个Z-box,则定义Li表示该Z-box的最左端的位置,Ri表示该Z-box的最右端的位置。Z-box:其中每个与前缀匹配的子串就叫一个Z-box。对于任意数字i,如果S(i)属于某一个Z-box,则定义Li表示该Z-box的最左端的位置,Ri表示该Z-box的最右端的位置。 • 例:在上例中L6=5 R6=7 • 性质:if i>j,then Ri>=Rj(画图、反证可得) http://datamining.xmu.edu.cn

  7. [任务]在线性时间内(O|S|)计算S的所有Zi • [思想] Z2正常计算,然后归纳计算Zk,可以减少比较的次数 http://datamining.xmu.edu.cn

  8. http://datamining.xmu.edu.cn

  9. [思想]令S=P$T,其中$是特殊字符,在S和T中都不存在。利用Z算法计算Zi(S)。[思想]令S=P$T,其中$是特殊字符,在S和T中都不存在。利用Z算法计算Zi(S)。 • [方案]对于任意j,如果Zn+1+j(S)=n,则P出现在T(j)处。 • [加强]因为$的设定,对于任意i都有Zi<n,即k`总落在P内,所以当k>n时(即在T中)Zk值不用计算,只需要维持(maintain)R和L的值。 http://datamining.xmu.edu.cn

  10. KMP算法 • [名称] Knuth-Morris-Pratt算法 高德纳(1938年1月10日),出生于密尔沃基,美国著名计算机科学家,斯坦福大学计算机系荣誉退休教授。高德纳教授被誉为现代计算机科学的鼻祖,在计算机科学及数学领域发表了多部具广泛影响的论文和著作。 高德纳最为人知的事迹是,他是《计算机程序设计艺术》的作者。此书是计算机科学界最受高度敬重的参考书籍之一。他创造了算法分析的领域,在数个理论计算机科学的分支做出初步贡献,此外还是排版软件TEX的发明人。 “高德纳”这个中文名字是1977年他访问中国之前所取的,命名者是储枫(姚期智的夫人,夫妇都是计算机科学家)。 • [特点]从左向右移动,从左向右比较 http://datamining.xmu.edu.cn

  11. 传统的模式匹配算法缺点 在第一次匹配之后就已经预知了后移一位后匹配的失败 a≠b http://datamining.xmu.edu.cn

  12. 如何避免冗余匹配? 冗余匹配 删除! 直接前移2位 怎么判断匹配是冗余的? 通过模式串自身信息确定 http://datamining.xmu.edu.cn

  13. 冗余匹配的判断 上一次匹配得到的匹配信息 模式串自身的信息 哪些信息? 模式串自身子串间匹配信息 http://datamining.xmu.edu.cn

  14. [定义]对于P中的每个位置i, spi(P)为P[1...i]中最长后缀的长度,该后缀与P的一个前缀匹配[数值] • [注]对于任意串sp1=0 • [例] 1 2 3 4 5 6 7 8 9 0 1 P= a b c a e a b c a b d sp2=sp3=0; sp4=1; sp8=3; sp10=2 • [定义]对于P中的每个位置i ,spi`(P)为P[1...i]中最长后缀的长度,该后缀与P的一个前缀匹配,并且P(i+1)≠P(sp`i+1) • [例]上例中sp`8=0, sp`9=4 http://datamining.xmu.edu.cn

  15. [转移规则]对于P和T,如果P(i+1)≠T(k),则将P[1…sp`i]移到T[k- sp`i...k-1]下面,也就是将P向右移了i- sp`i步,然后比较P(sp`i+1)和T(k);如果发现了一个P在T中,将P向右移动n-sp`n步 • [优点]移动之后,前sp`个字符不用再比较了,直接比较P(sp`i+1)和T(k)就可以了 • [定理]在Knuth-Morris-Pratt算法中,字符比较的次数最多是2m http://datamining.xmu.edu.cn

  16. KMP算法思想 直接滑到第一个最长完全匹配出现位置 节省了匹配相同字符的时间 直接匹配第3位 http://datamining.xmu.edu.cn

  17. KMP算法示例 在已匹配过区域中不用重复匹配 已完成的匹配中没有相同的前缀串出现 前滑j-N[j]=2-0位 http://datamining.xmu.edu.cn

  18. KMP算法示例 直接前滑2位,错开匹配过区域 http://datamining.xmu.edu.cn

  19. KMP算法示例 已匹配区域为0 http://datamining.xmu.edu.cn

  20. KMP算法示例 前滑1位 前滑j-N[j]=1-0位 http://datamining.xmu.edu.cn

  21. KMP算法示例 前滑1位 http://datamining.xmu.edu.cn

  22. KMP算法示例 完成匹配 前滑j-N[j]=4-2位 http://datamining.xmu.edu.cn

  23. [real-time]对于T的任意位置,如果第一次检测它,也就是最后一次检测它(就是说对每一位最多只比较一次),则说它是real-time.[real-time]对于T的任意位置,如果第一次检测它,也就是最后一次检测它(就是说对每一位最多只比较一次),则说它是real-time. • [意义]1. 对于一个小内存机器,在下一个字符读入之前,要保证上一个字符已经处理完毕。 2. 在确定的实例中,real-time方法应该运行的更快一些。 http://datamining.xmu.edu.cn

  24. Knuth-Morris-Pratt算法不是real-time的。因为对于不匹配的位置,还至少要再比较一次。Knuth-Morris-Pratt算法不是real-time的。因为对于不匹配的位置,还至少要再比较一次。 • 如何 把Knuth-Morris-Pratt算法转变成一个real-time方法? http://datamining.xmu.edu.cn

  25. [定义]x是字母表中的一个字符,sp`(i,x)(P)=sp`i(P)并且P(sp`i+1)=x[定义]x是字母表中的一个字符,sp`(i,x)(P)=sp`i(P)并且P(sp`i+1)=x • [思想]P同T进行比较,T(k)=x处与P(i+1)不匹配,那么P向右移动i- sp`(i,x)步。这样T(k)=P(sp`(i,x)+1)=x不用比较,直接比较P(sp`(i,x)+2)和T(k+1)即可。显然这种方法是real-time的. http://datamining.xmu.edu.cn

  26. 关键字树 (Trie) • [目标]在一个目标序列中搜索多个查询序列的完全匹配 • [算法] Aho-Corasick算法 • [数据结构]关键字树 http://datamining.xmu.edu.cn

  27. [定义]集合P的关键字树(keyword tree)是一棵有根树,它的根记为K,满足 1. 每一条边都标定一个字母 2. 从同一结点分开的任意两条边对应着不同的字母 3. 每一个字符串Pi都对应着一个结点v,从树根K出发到达v的路径可以恰好正确地拼出字符串Pi,并且树K的每一个叶结点都对应P的某一个模式。 http://datamining.xmu.edu.cn

  28. P={potato,poetry,pottery,science,school}的关键字树 http://datamining.xmu.edu.cn

  29. 很容易看出构造一颗关键字树的时间复杂性是O(n)。很容易看出构造一颗关键字树的时间复杂性是O(n)。 • 关键字树建立起来以后,对于普通的搜索方法时间复杂性是O(mb),其中b=max|Pi|。然而,我们可以利用失效链接(failure link)技术来加速搜索过程。 • 失效链接的前提是在P中不存在一个模式是另一个模式的子串! http://datamining.xmu.edu.cn

  30. 定义1:L(v)表示从根结点到结点v的字符连接起来得到的字符串。定义1:L(v)表示从根结点到结点v的字符连接起来得到的字符串。 • 定义2:lp(v)表示L(v)中最长后缀的长度,该后缀是P中某个模式的前缀。(数值) L(v)=potat lp(v)=|tat|=3 http://datamining.xmu.edu.cn

  31. 定义3 :α表示字符串L(v)的长为lp(v)的后缀,那么在关键字树中有唯一的结点标定α。该唯一的结点记为nv。当lp(v)=0时,nv就是跟节点K。 • 定义4:有序对(v,nv)称为一个失效链接. http://datamining.xmu.edu.cn

  32. 失效链接的建立算法的关键是在线性时间内得到所有的失效链接,可以采用归纳的思想:若v是根r,或v是r的儿子,则nv=r;假设距根结点的距离小于等于k的所有的结点v的nv都已经计算出来,我们现在计算据r的距离为k+1的结点v的nv.失效链接的建立算法的关键是在线性时间内得到所有的失效链接,可以采用归纳的思想:若v是根r,或v是r的儿子,则nv=r;假设距根结点的距离小于等于k的所有的结点v的nv都已经计算出来,我们现在计算据r的距离为k+1的结点v的nv. http://datamining.xmu.edu.cn

  33. 假设所求的结点为v(距r为k+1的结点),他的父亲是v’,v’到v这条边所标定的字母是x,假设所求的结点为v(距r为k+1的结点),他的父亲是v’,v’到v这条边所标定的字母是x, ①若nv’的下一个字符有x,则设该边的另一个结点为w’,即有nv=w’ ②若nv’到它所有儿子的边所标定的字母均不是x,则字符串L(nv)(表示从根结点到nv所标定的字符串)是L(nv’)的一个后缀跟上x,又因为该后缀与根结点开始的字符串匹配(类似前缀)所以可以检测 后面是否有x,如果没有则继续下去。 http://datamining.xmu.edu.cn

  34. 该算法的主要思想是将集合P构造成一棵关键字树,利用Aho-Corasick算法和失效链接在线性时间内完成搜索。该算法的时间复杂性是O(m+n+k),其中k为P在T中出现的次数。其中预处理阶段的时间复杂性是O(n),搜索阶段的时间复杂性是O(m+k) http://datamining.xmu.edu.cn

More Related