CN1889080A - 一种用于检索字符串的方法 - Google Patents

一种用于检索字符串的方法 Download PDF

Info

Publication number
CN1889080A
CN1889080A CN 200610052710 CN200610052710A CN1889080A CN 1889080 A CN1889080 A CN 1889080A CN 200610052710 CN200610052710 CN 200610052710 CN 200610052710 A CN200610052710 A CN 200610052710A CN 1889080 A CN1889080 A CN 1889080A
Authority
CN
China
Prior art keywords
character string
node
character
multiway tree
branch
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN 200610052710
Other languages
English (en)
Inventor
陈纯
卜佳俊
刘康苗
陈伟
赵梦
潘照明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN 200610052710 priority Critical patent/CN1889080A/zh
Publication of CN1889080A publication Critical patent/CN1889080A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种用于检索字符串的方法。相对于传统索引技术如Hash或Btree或AVL-树等,本发明以多叉树的存储方式来记录字符串的字符序列结构信息,并在检索方法中利用了这些信息,能够高效地实现对字符串检索,尤其适合在大规模字符串集合环境下字符串的精确快速查找和前缀、后缀等模糊查找。同时对多叉树结点的内存分配进行了分层管理,并对最后生成的多叉树进行了适度的压缩,有效的节省了内存资源,克服了传统检索字符串方法所存在的检索效率低、或者检索效率虽高但是过分消耗内存资源、不支持模糊查询等不足,是一种既高效又实用的字符串检索方法。

Description

一种用于检索字符串的方法
技术领域
本发明涉及大量字符串集合管理相关的技术领域,特别是涉及一种用于检索字符串的方法。
背景技术
今年来,随着计算机用户的持续增加,各种计算机应用不断涌现,而许多计算机应用都涉及到对一个非常大的字符串集合的有效管理问题。例如,从档案管理、文献目录查找、地理信息索引、搜索引擎到WEB上大量文本的处理都涉及到一个非常大的字符串集合。同时,随着IPv6的兴起,如何在巨量的IP地址中实现对IP的快速检索成为一个人们关心的问题;
目前已有许多用于字符串管理的数据结构,其中二叉搜索树BST是最简单且最直观的一种。BST结构的性能主要取决于树的形态,与输入字符串集的排列有关。假设字符串集合的分布是稳定的,则BST结构是相当快的;如果字符串集合的分布不稳定,特别是有序的,BST的性能最差为(o(n));BST退化为一棵单枝树。因此BST特别不适合有序排列的输入字符串集合。此外BST有许多的变种,如AVL-树和红-黑树,它们与BST树的不同在于插入字符串的过程中重组树的结构,保持树的近似平衡,从而保证不会出现单枝树,BST树及其变种虽然占用空间少但速度慢,所以并不是最理想的数据结构。字符串处理中常用的另外一种数据结构是哈希表和B树。哈希表是一种直接计算记录存放地址的方法,它在关键码(字符串)与存储位置之间直接建立映像。但是,在某些要求字符串有序存储(如索引维护及前缀查找)的应用中,哈希表就价值就不是很大了。B树在要求快速检索字符串时也存在这个问题;
如果能针对要访问数据的内部结构特点,定义一个通用的数据存储和访问方法,则可以提高存储效率,并降低数据访问的时间。
发明内容
本发明的目的在于提供一种用于高效检索字符串的方法。
本发明解决其技术问题采用的技术方案如下:
1)以多叉树的存储方式来记录字符串的字符序列结构信息,同时对多叉树结点的内存分配进行了分层管理
用多叉树的形式来存储字符串,树的第一层为根结点,接下来的每一层依次表示该字符串中的一个字符,每个树结点存储了当前字符,从根结点到该结点所形成的字符串的编号id和后继结点的指针,该编号id用于标识一个唯一的字符串,程序中默认从1开始,按序分配,或由用户指定;对中文字符串来说,多叉树的第一层为根结点,第二层则按照字符串第一个汉字的GB2312编码来标识,共有三千多个分支,分别表示三千多个汉字,最左边分支的GB2312编码最小,表示汉字“阿”,其他的汉字就利用它与“阿”的GB2312编码的差值来索引;第三层表示字符串中的第二个汉字,由于汉语词汇固定的组合和搭配形式,并不是任意两个汉字都可以组成一个词语,每个汉字后面可能出现的汉字是有限的,而不是汉字的全集;所以从第三层开始,如果每个汉字结点下一层可能出现的后续汉字的数目大于等于不同汉字数目的一半,就用后继汉字与“阿”的GB2312编码的差值来索引;否则,如果每个汉字结点下一层可能出现的后续汉字的数目小于不同汉字数目的一半,就只存储汉字结点下一层可能出现的后续汉字的信息;依此类推,这样就可以大大节省存储空间;
对英文字符串来说,多叉树的第一层也为根结点,第二层表示字符串的第一个字母,共有26个分支,分别对应26个英文字母,由于英文字母的个数少,不会占用很大的存储空间,因此多叉树第二层以下的各层也采用同样的方式来依次表示字符串中的各个字母,即每一层都包括26个分支;
2)将字符串插入到多叉树中
a)对于中文字符串:
第一步,以字符串中的第一个汉字的GB2312编码与“阿”的GB2312编码的差值索引到多叉树第二层的分支结点,这个分支结点存储的是其下层结点,也就是字符串的第二个汉字的信息的指针;
第二步,如果第一个汉字可能的后继汉字的数目大于等于不同汉字数目的一半,则后继汉字的GB2312编码与“阿”的GB2312编码的差值索引到第三层的分支结点;否则为第一个汉字结点预分配16个下层结点存储单元(这里为了避免每次添加字符串时都要重新分配,每次分配时将一次性预分配16个下层结点单元);如果已经为该分支结点分配了存储下层(第三层)结点的空间,则给第二个汉字分配其中的一个单元;如果上一次分配的16个单元已经用完,则重新再分配16个;第三层结点单元中存储了第二个汉字,和当前已添加的字符串的编号id号以及第三个汉字的信息的指针;
第三步,同理,如果第二个汉字可能的后继汉字的数目大于等于不同汉字数目的一半,则后继汉字的GB2312编码与“阿”的GB2312编码的差值索引到
第四层的分支结点;否则给第三层结点预分配16个下层结点存储单元,存储第三个汉字和当前已添加的字符串的编号id号以及第四个汉字的信息的指针;依此类推,依次为每一个结点分配其下层结点的存储空间,直到字符串的末尾,此时该字符串就添加到多叉树中了;
b)对于英文字符串
第一步,根据字符串中的第一个字母在字母表中的序号索引到多叉树第二层的分支结点,这个分支结点存储的是第三层结点,也就是字符串的第二个字母的信息的指针;
第二步,同理根据字符串中第二个字母在字母表中的序号索引到多叉树第三层的分支结点;依此类推,直到字符串的末尾,此时该字符串就添加到多叉树中了;
3)字符串集的压缩
由于建立多叉树时,有些层可能存在多个分支,比如中文的多叉树的第二层就有三千多个分支,对一个字符串集而言有些分支可能并没有用到;而且分支较少的层每次都是为结点预分配16个下层结点存储单元,这样有些分配出去的空间可能并没有使用;因此先把多叉树结构写入外存,需要读入内存时,释放多叉树中这些空的不用的单元,只把有数据的单元按照原来的结构读到内存中,这样就大大实现了字符串集的压缩;
4)在多叉树中精确检索字符串
a)对于中文字符串:
第一步,根据字符串中的第一个汉字的GB2312编码与“阿”的GB2312编码的差值找到该汉字在多叉树中第二层的分支结点;
第二步,沿着该分支往下,根据待检索的字符串的第二个汉字找到第三层的分支结点;再从第三层的分支结点出发,根据待检索字符串中第三个汉字找到第四层的分支结点;依此类推,直到该字符串的末尾,末尾所在的结点记录了该字符串的编号id,返回该编号id号则完成了字符串的精确检索;若多叉树的分支无法到达该字符串的末尾,则证明该字符串不在多叉树中;
b)对于英文字符串
第一步,根据字符串中的第一个字母在字母表中的序号找到该字母在多叉树中第二层的分支结点;
第二步,沿着该分支往下,根据字符串中第二个字母在字母表中的序号找到该字母在多叉树中第三层的分支结点;依此类推,直到字符串的末尾,末尾所在的结点记录了该字符串的编号id,返回该编号id号则完成了字符串的精确检索;若多叉树的分支无法到达该字符串的末尾,则证明该字符串不在多叉树中;
5)在多叉树中模糊检索字符串
字符串的模糊检索是指给定字符串的前缀或后缀,在多叉树中检索出所有包含该前缀或后缀的字符串;对前缀字符串的检索,采用与精确检索相同的方式,从多叉树的根结点开始逐层找到该字符串前缀所在分支上的结点,直到前缀的末尾,找到从末尾结点开始的所有的下层分支,这些下层分支表示的是该前缀的后续字符串,该前缀字符串分别与这些下层分支表示的后续字符串组合即为模糊检索的结果;若多叉树的分支无法到达该前缀字符串的末尾,则检索失败;
对后缀字符串的检索,则反方向从多叉树的底层结点开始,向上逐层找到与后缀字符串中的字符相对应的分支结点,这里也是从后缀字符串的末尾字符开始往前查找,直到后缀的最前端,找到最前端字符对应结点的所有上层分支,这些上层分支表示的是该后缀前面的字符串,这些上层分支分别串接该后缀字符串即为模糊检索的结果;若向上查找时,多叉树的分支无法到达该后缀字符串的最前端,则检索失败;
6)从多叉树中删除字符串
第一步,按照精确检索的方法找到待删除的字符串在多叉树中的分支;
第二步,若字符串的末尾所在的分支结点是多叉树的底层结点,即该字符串没有后续字符,则删除末尾结点中该字符串的编号id,并释放末尾结点占用的存储空间;若字符串的末尾所在的分支结点不是多叉树的底层结点,即末尾结点还有下层分支,则仅删除末尾结点中该字符串的编号id,其他不变;删除成功。
本发明与背景技术相比,具有的有益的效果是:
本发明是一种适用于大规模字符串集合环境下的,用于高效的检索中英文字符串的方法。
(1)本发明是一种全新的索引方法,能够高效地实现对中英文字符串的存储、添加、检索和删除,尤其适合在大规模字符串处理环境中,字符串的快速查找以及前缀、后缀等各种形式的模糊查找,在时间和空间效率上都优于传统的Btree索引方法。
(2)本发明同时对多叉树的存储进行了分层管理,对于多叉树结点的内存分配采用了静态分配和动态分配相结合的方式,并对最后生成的多叉树结构进行了适度的压缩,有效的节省了内存资源,克服了传统的检索字符串方法所存在的检索效率低、或检索效率虽高但是过分消耗内存资源、以及不支持模糊查询等不足。
附图说明
图1是系统的总体结构示意图;
图2是向多叉树中插入了四个字符串(分词,互联网,搜寻,搜索)后,多叉树的逻辑示意图;
图3是向多叉树中插入了四个字符串(分词,互联网,搜寻,搜索)后,多叉树的内部结构示意图;
具体实施方式
在基于大规模字符串处理的应用系统中,采用本发明所提供的多叉树索引访问方式,可以实现对字符串的高效检索,以搜索引擎中分词词典为例,系统的总体结构示意图如图1所示,具体的实施步骤如下:
1.创建字符串的存储结构,初始化字符串存储结构,分配必要的内存空间,以及决定静态分配内存的层数和动态分配内存的层数。
2.调用向多叉树中插入字符串的程序,具体过程如下:
a)对于中文字符串:
第一步,以字符串中的第一个汉字的GB2312编码与“阿”的GB2312编码的差值索引到多叉树第二层的分支结点,这个分支结点存储的是其下层结点,也就是字符串的第二个汉字的信息的指针;
第二步,如果第一个汉字可能的后继汉字的数目大于等于不同汉字数目的一半,则后继汉字的GB2312编码与“阿”的GB2312编码的差值索引到第三层的分支结点;否则为第一个汉字结点预分配16个下层结点存储单元(这里为了避免每次添加字符串时都要重新分配,每次分配时将一次性预分配16个下层结点单元);如果已经为该分支结点分配了存储下层(第三层)结点的空间,则给第二个汉字分配其中的一个单元;如果上一次分配的16个单元已经用完,则重新再分配16个;第三层结点单元中存储了第二个汉字,和当前已添加的字符串的编号id号以及第三个汉字的信息的指针;
第三步,同理,如果第二个汉字可能的后继汉字的数目大于等于不同汉字数目的一半,则后继汉字的GB2312编码与“阿”的GB2312编码的差值索引到第四层的分支结点;否则给第三层结点预分配16个下层结点存储单元,存储第三个汉字和当前已添加的字符串的编号id号以及第四个汉字的信息的指针;依此类推,依次为每一个结点分配其下层结点的存储空间,直到字符串的末尾,此时该字符串就添加到多叉树中了;
b)对于英文字符串
第一步,根据字符串中的第一个字母在字母表中的序号索引到多叉树第二层的分支结点,这个分支结点存储的是第三层结点,也就是字符串的第二个字母的信息的指针;
第二步,同理根据字符串中第二个字母在字母表中的序号索引到多叉树第三层的分支结点;依此类推,直到字符串的末尾,此时该字符串就添加到多叉树中了;
如,向多叉树中插入字符串“互联网”,步骤为:
(1)用“互”的GB2312编码减去“阿”的GB2312编码,若差值为a,则应插入到多叉树第二层的第(a+1)个分支,这个分支结点中存储的是“互”的后继汉字“联”的指针,它指向为汉字“联”所分配的存储单元。
(2)如果“互”的后继汉字的数目大于等于不同汉字数目的一半,则用“联”的GB2312编码减去“阿”的GB2312编码,若差值为b,则“联”在多叉树第三层的第(b+1)个分支,这个分支结点中存储的是字符串“互联”的编号id和“联”的后继汉字“网”的指针。如果“互”的后继汉字的数目小于不同汉字数目的一半,为“互”分配16个下层结点存储单元,把字符串“互联”的编号id和“联”的后继汉字“网”的指针存到其中一个下层结点单元中。
(3)同理,如果“联”的后继汉字的数目大于等于不同汉字数目的一半,则用“网”的GB2312编码减去“阿”的GB2312编码,若差值为c,则“联”在多叉树第三层的第(c+1)个分支,这个分支结点中存储的是字符串“互联网”的编号id。如果“互”的后继汉字的数目小于不同汉字数目的一半,为“联”分配16个下层结点存储单元,把字符串“互联网”的编号id存到其中一个下层结点单元中。这样就完成了字符串“互联网”的插入。
向多叉树中插入(分词,互联网,搜索,搜寻)四个字符串之后,多叉树的逻辑示意图如图2所示,其中,黑色结点用于标识从根到此结点可形成一个字符串,用于特定的编号id标记它;插入后对应的字符串内部存储结构示意图如图3所示。
3.调用字符串集的压缩程序,具体过程如下:
于上述插入了(分词,互联网,搜索,搜寻)四个字符串的字符串存储结构,调用字符串集压缩程序的作用就是,通过把多叉树后两层中预先分配的多余的空指针释放掉,来实现内存的压缩。
4.调用精确检索字符串的程序,具体过程如下:
a)对于中文字符串:
第一步,根据字符串中的第一个汉字的GB2312编码与“阿”的GB2312编码的差值找到该汉字在多叉树中第二层的分支结点;
第二步,沿着该分支往下,用二分查找的方法,根据待检索的字符串的第二个汉字找到第三层的分支结点;再从第三层的分支结点出发,根据待检索字符串中第三个汉字找到第四层的分支结点;依此类推,直到该字符串的末尾,末尾所在的结点记录了该字符串的编号id,返回该编号id号则完成了字符串的精确检索;若多叉树的分支无法到达该字符串的末尾,则证明该字符串不在多叉树中;
b)对于英文字符串
第一步,根据字符串中的第一个字母在字母表中的序号找到该字母在多叉树中第二层的分支结点;
第二步,沿着该分支往下,用二分查找的方法,根据字符串中第二个字母在字母表中的序号找到该字母在多叉树中第三层的分支结点;依此类推,直到字符串的末尾,末尾所在的结点记录了该字符串的编号id,返回该编号id号则完成了字符串的精确检索;若多叉树的分支无法到达该字符串的末尾,则证明该字符串不在多叉树中;
如,要在插入了(分词,互联网,搜索,搜寻)四个字符串的多叉树中,查找“互联网”这个字符串,步骤为:
(1)用“互”的GB2312编码减去“阿”的GB2312编码,若差值为a,则找到多叉树第二层的第(a+1)个分支结点,这个分支结点中存储了“互”的下层结点的指针。
(2)在“互”的下层结点中用二分查找法快速查找“联”所在的分支结点,其中存储了“联”的下层结点的指针。
(3)同理在“联”的下层结点中用二分查找法快速查找“网”所在的结点,返回字符串“互联网”的编号id,查找成功。
这里“互联网”这个字符串的标识号为2,因为它是向多叉树中插入的第二个字符串,若外部没有指定,在标识号由程序自动从1开始分配。
5.调用模糊检索字符串的程序,具体过程如下:
字符串的模糊检索是指给定字符串的前缀或后缀,在多叉树中检索出所有包含该前缀或后缀的字符串;对前缀字符串的检索,采用与精确检索相同的方式,从多叉树的根结点开始逐层找到该字符串前缀所在分支上的结点,直到前缀的末尾,找到从末尾结点开始的所有的下层分支,这些下层分支表示的是该前缀的后续字符串,该前缀字符串分别与这些下层分支表示的后续字符串组合即为模糊检索的结果;若多叉树的分支无法到达该前缀字符串的末尾,则检索失败;
对后缀字符串的检索,则反方向从多叉树的底层结点开始,向上逐层找到与后缀字符串中的字符相对应的分支结点,这里也是从后缀字符串的末尾字符开始往前查找,直到后缀的最前端,找到最前端字符对应结点的所有上层分支,这些上层分支表示的是该后缀前面的字符串,这些上层分支分别串接该后缀字符串即为模糊检索的结果;若向上查找时,多叉树的分支无法到达该后缀字符串的最前端,则检索失败;
如,在插入了(分词,互联网,搜索,搜寻)四个字符串的多叉树中进行模糊检索,步骤为:
(1)假如前缀字符串为“搜”,则先用精确检索同样的方法找到“搜”所在的分支结点,以及“搜”所有的下层分支,把“搜”分别与这些分支结点串接,就得到了“搜索”和“搜寻”两个字符串。
(2)假如后缀字符串为“词”,则从多叉树的底层结点开始找到所有包含“词”的分支,以及“词”所有的上层分支,把这些分支与“词”串接就得到了“分词”这个字符串。
(3)假如前缀字符串为“互”,后缀字符串为“网”,则先用精确检索同样的方法找到“互”所在的分支结点,以及“互”所有的下层分支,在这些下层分支中从底层结点开始,找到所有包含“网”的分支,从“互”所在的结点出发到“网”所在的结点的路径对应的字符串即为结果,就找到了“互联网”。
第六步:进行清理工作,调用从多叉树中删除字符串的程序,具体过程如下:
第一步,按照精确检索的方法找到待删除的字符串在多叉树中的分支;
第二步,若字符串的末尾所在的分支结点是多叉树的底层结点,即该字符串没有后续字符,则删除末尾结点中该字符串的编号id,并释放末尾结点占用的存储空间;若字符串的末尾所在的分支结点不是多叉树的底层结点,即末尾结点还有下层分支,则仅删除末尾结点中该字符串的编号id,其他不变;删除成功。
如,在插入了(分词,互联网,搜索,搜寻)四个字符串的多叉树中,删除字符串“搜索”的步骤为:
(1)按照精确检索的方法在多叉树中查找“搜索”,找到末尾结点“索”;
(2)删除末尾结点中“搜索”的编号id,把其占用的内存资源完全释放掉。

Claims (1)

1.一种用于检索字符串的方法,其特征在于:
1)以多叉树的存储方式来记录字符串的字符序列结构信息,同时对多叉树结点的内存分配进行了分层管理
用多叉树的形式来存储字符串,树的第一层为根结点,接下来的每一层依次表示该字符串中的一个字符,每个树结点存储了当前字符,从根结点到该结点所形成的字符串的编号id和后继结点的指针,该编号id用于标识一个唯一的字符串,程序中默认从1开始,按序分配,或由用户指定;对中文字符串来说,多叉树的第一层为根结点,第二层则按照字符串第一个汉字的GB2312编码来标识,共有三千多个分支,分别表示三千多个汉字,最左边分支的GB2312编码最小,表示汉字“阿”,其他的汉字就利用它与“阿”的GB2312编码的差值来索引;第三层表示字符串中的第二个汉字,由于汉语词汇固定的组合和搭配形式,并不是任意两个汉字都可以组成一个词语,每个汉字后面可能出现的汉字是有限的,而不是汉字的全集;所以从第三层开始,如果每个汉字结点下一层可能出现的后续汉字的数目大于等于不同汉字数目的一半,就用后继汉字与“阿”的GB2312编码的差值来索引;否则,如果每个汉字结点下一层可能出现的后续汉字的数目小于不同汉字数目的一半,就只存储汉字结点下一层可能出现的后续汉字的信息;依此类推,这样就可以大大节省存储空间;
对英文字符串来说,多叉树的第一层也为根结点,第二层表示字符串的第一个字母,共有26个分支,分别对应26个英文字母,由于英文字母的个数少,不会占用很大的存储空间,因此多叉树第二层以下的各层也采用同样的方式来依次表示字符串中的各个字母,即每一层都包括26个分支;
2)将字符串插入到多叉树中
a)对于中文字符串:
第一步,以字符串中的第一个汉字的GB2312编码与“阿”的GB2312编码的差值索引到多叉树第二层的分支结点,这个分支结点存储的是其下层结点,也就是字符串的第二个汉字的信息的指针;
第二步,如果第一个汉字可能的后继汉字的数目大于等于不同汉字数目的一半,则后继汉字的GB2312编码与“阿”的GB2312编码的差值索引到第三层的分支结点;否则为第一个汉字结点预分配16个下层结点存储单元(这里为了避免每次添加字符串时都要重新分配,每次分配时将一次性预分配16个下层结点单元);如果已经为该分支结点分配了存储下层(第三层)结点的空间,则给第二个汉字分配其中的一个单元;如果上一次分配的16个单元已经用完,则重新再分配16个;第三层结点单元中存储了第二个汉字,和当前已添加的字符串的编号id号以及第三个汉字的信息的指针;
第三步,同理,如果第二个汉字可能的后继汉字的数目大于等于不同汉字数目的一半,则后继汉字的GB2312编码与“阿”的GB2312编码的差值索引到第四层的分支结点;否则给第三层结点预分配16个下层结点存储单元,存储第三个汉字和当前已添加的字符串的编号id号以及第四个汉字的信息的指针;依此类推,依次为每一个结点分配其下层结点的存储空间,直到字符串的末尾,此时该字符串就添加到多叉树中了;
b)对于英文字符串
第一步,根据字符串中的第一个字母在字母表中的序号索引到多叉树第二层的分支结点,这个分支结点存储的是第三层结点,也就是字符串的第二个字母的信息的指针;
第二步,同理根据字符串中第二个字母在字母表中的序号索引到多叉树第三层的分支结点;依此类推,直到字符串的末尾,此时该字符串就添加到多叉树中了;
3)字符串集的压缩
由于建立多叉树时,有些层可能存在多个分支,比如中文的多叉树的第二层就有三千多个分支,对一个字符串集而言有些分支可能并没有用到;而且分支较少的层每次都是为结点预分配16个下层结点存储单元,这样有些分配出去的空间可能并没有使用;因此先把多叉树写入外存,然后从外存中读入内存时,释放多叉树中这些空的不用的单元,只把有数据的单元按照原来的结构读到内存中,这样就大大实现了字符串集的压缩;
4)在多叉树中精确检索字符串
a)对于中文字符串:
第一步,根据字符串中的第一个汉字的GB2312编码与“阿”的GB2312编码的差值找到该汉字在多叉树中第二层的分支结点;
第二步,沿着该分支往下,根据待检索的字符串的第二个汉字找到第三层的分支结点;再从第三层的分支结点出发,根据待检索字符串中第三个汉字找到第四层的分支结点;依此类推,直到该字符串的末尾,末尾所在的结点记录了该字符串的编号id,返回该编号id号则完成了字符串的精确检索;若多叉树的分支无法到达该字符串的末尾,则证明该字符串不在多叉树中;
b)对于英文字符串
第一步,根据字符串中的第一个字母在字母表中的序号找到该字母在多叉树中第二层的分支结点;
第二步,沿着该分支往下,根据字符串中第二个字母在字母表中的序号找到该字母在多叉树中第三层的分支结点;依此类推,直到字符串的末尾,末尾所在的结点记录了该字符串的编号id,返回该编号id号则完成了字符串的精确检索;若多叉树的分支无法到达该字符串的末尾,则证明该字符串不在多叉树中;
5)在多叉树中模糊检索字符串
字符串的模糊检索是指给定字符串的前缀或后缀,在多叉树中检索出所有包含该前缀或后缀的字符串;对前缀字符串的检索,采用与精确检索相同的方式,从多叉树的根结点开始逐层找到该字符串前缀所在分支上的结点,直到前缀的末尾,找到从末尾结点开始的所有的下层分支,这些下层分支表示的是该前缀的后续字符串,该前缀字符串分别与这些下层分支表示的后续字符串组合即为模糊检索的结果;若多叉树的分支无法到达该前缀字符串的末尾,则检索失败;
对后缀字符串的检索,则反方向从多叉树的底层结点开始,向上逐层找到与后缀字符串中的字符相对应的分支结点,这里也是从后缀字符串的末尾字符开始往前查找,直到后缀的最前端,找到最前端字符对应结点的所有上层分支,这些上层分支表示的是该后缀前面的字符串,这些上层分支分别串接该后缀字符串即为模糊检索的结果;若向上查找时,多叉树的分支无法到达该后缀字符串的最前端,则检索失败;
6)从多叉树中删除字符串
第一步,按照精确检索的方法找到待删除的字符串在多叉树中的分支;
第二步,若字符串的末尾所在的分支结点是多叉树的底层结点,即该字符串没有后续字符,则删除末尾结点中该字符串的编号id,并释放末尾结点占用的存储空间;若字符串的末尾所在的分支结点不是多叉树的底层结点,即末尾结点还有下层分支,则仅删除末尾结点中该字符串的编号id,其他不变;删除成功。
CN 200610052710 2006-07-31 2006-07-31 一种用于检索字符串的方法 Pending CN1889080A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200610052710 CN1889080A (zh) 2006-07-31 2006-07-31 一种用于检索字符串的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200610052710 CN1889080A (zh) 2006-07-31 2006-07-31 一种用于检索字符串的方法

Publications (1)

Publication Number Publication Date
CN1889080A true CN1889080A (zh) 2007-01-03

Family

ID=37578358

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200610052710 Pending CN1889080A (zh) 2006-07-31 2006-07-31 一种用于检索字符串的方法

Country Status (1)

Country Link
CN (1) CN1889080A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101901254A (zh) * 2010-07-20 2010-12-01 无敌科技(西安)有限公司 词条查询方法及其系统
CN102084363A (zh) * 2008-07-03 2011-06-01 加利福尼亚大学董事会 一种用于在结构化数据上高效地支持交互式模糊搜索的方法
WO2012071992A1 (en) * 2010-12-03 2012-06-07 Huawei Technologies Co., Ltd. Method and apparatus for high performance, updatable, and deterministic hash table for network equipment
CN103339624A (zh) * 2010-12-14 2013-10-02 加利福尼亚大学董事会 支持地理结构数据的交互式模糊搜索的高效前缀搜索算法
CN106815282A (zh) * 2016-11-29 2017-06-09 腾讯科技(深圳)有限公司 数据访问方法和装置
CN107153647A (zh) * 2016-03-02 2017-09-12 奇简软件(北京)有限公司 进行数据压缩的方法、装置、系统和计算机程序产品
CN110597800A (zh) * 2018-05-23 2019-12-20 杭州海康威视数字技术股份有限公司 一种注释信息确定、前缀树构建方法及装置

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102084363A (zh) * 2008-07-03 2011-06-01 加利福尼亚大学董事会 一种用于在结构化数据上高效地支持交互式模糊搜索的方法
CN102084363B (zh) * 2008-07-03 2014-11-12 加利福尼亚大学董事会 一种用于在结构化数据上高效地支持交互式模糊搜索的方法
CN101901254A (zh) * 2010-07-20 2010-12-01 无敌科技(西安)有限公司 词条查询方法及其系统
WO2012071992A1 (en) * 2010-12-03 2012-06-07 Huawei Technologies Co., Ltd. Method and apparatus for high performance, updatable, and deterministic hash table for network equipment
CN103339624A (zh) * 2010-12-14 2013-10-02 加利福尼亚大学董事会 支持地理结构数据的交互式模糊搜索的高效前缀搜索算法
CN107153647A (zh) * 2016-03-02 2017-09-12 奇简软件(北京)有限公司 进行数据压缩的方法、装置、系统和计算机程序产品
CN107153647B (zh) * 2016-03-02 2021-12-07 北京字节跳动网络技术有限公司 进行数据压缩的方法、装置、系统和计算机程序产品
CN106815282A (zh) * 2016-11-29 2017-06-09 腾讯科技(深圳)有限公司 数据访问方法和装置
CN106815282B (zh) * 2016-11-29 2019-12-06 腾讯科技(深圳)有限公司 数据访问方法和装置
CN110597800A (zh) * 2018-05-23 2019-12-20 杭州海康威视数字技术股份有限公司 一种注释信息确定、前缀树构建方法及装置

Similar Documents

Publication Publication Date Title
US11899641B2 (en) Trie-based indices for databases
JP5996088B2 (ja) 暗号ハッシュ・データベース
JP6362316B2 (ja) バッファ・プールをメモリ常駐型データのための常在インメモリ・ストレージとして用いた、ハイブリッド・テーブル実装のための方法、システム、およびコンピュータ・プログラム製品
CN1889080A (zh) 一种用于检索字符串的方法
CN110188108B (zh) 数据存储方法、装置、系统、计算机设备及存储介质
CN1786962A (zh) 完美双数组trie树词典管理与检索方法
CN1955958A (zh) 一种基于目录树的分类数据存储及分类目录查询方法
CN1838124A (zh) 海量数据内存数据库中快速定位的网格+t树索引的方法
CN1504912A (zh) 用树状分段改善树搜索性能和存储器带宽的方法和系统
CN1831825A (zh) 文档管理方法和装置以及文档搜索方法和装置
CN101030165A (zh) 一种磁盘空间管理方法及系统
CN101051309A (zh) 在数字图书馆中所采用的检索系统和检索方法
CN1848118A (zh) 管理文件系统的设备和方法
Conway et al. Optimal hashing in external memory
Pibiri et al. Efficient data structures for massive n-gram datasets
CN100476824C (zh) 存储元素的方法与系统及查找元素的方法与系统
CN102867049A (zh) 一种基于单词查找树实现的汉语拼音快速分词方法
Fan et al. Fulgor: a fast and compact k-mer index for large-scale matching and color queries
CN1614591A (zh) 一种组织和访问分布式文件系统目录的方法
CN1255748C (zh) 一种存储虚拟化系统的元数据层次管理方法及其系统
Roumelis et al. Bulk-loading and bulk-insertion algorithms for xBR^+-trees xBR+-trees in Solid State Drives
CN1260546A (zh) 在手持装置中存储和检索数据的方法及装置
CN101582091B (zh) 一种词库创建方法和系统,及相应的单词查询方法和系统
CN1213370C (zh) 非挥发信息存储管理方法
Lambov Trie memtables in cassandra

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C02 Deemed withdrawal of patent application after publication (patent law 2001)
WD01 Invention patent application deemed withdrawn after publication