[发明专利]一种用于检索字符串的方法无效
申请号: | 200610052710.4 | 申请日: | 2006-07-31 |
公开(公告)号: | CN1889080A | 公开(公告)日: | 2007-01-03 |
发明(设计)人: | 陈纯;卜佳俊;刘康苗;陈伟;赵梦;潘照明 | 申请(专利权)人: | 浙江大学 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 杭州求是专利事务所有限公司 | 代理人: | 林怀禹 |
地址: | 310027浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公开了一种用于检索字符串的方法。相对于传统索引技术如Hash或Btree或AVL-树等,本发明以多叉树的存储方式来记录字符串的字符序列结构信息,并在检索方法中利用了这些信息,能够高效地实现对字符串检索,尤其适合在大规模字符串集合环境下字符串的精确快速查找和前缀、后缀等模糊查找。同时对多叉树结点的内存分配进行了分层管理,并对最后生成的多叉树进行了适度的压缩,有效的节省了内存资源,克服了传统检索字符串方法所存在的检索效率低、或者检索效率虽高但是过分消耗内存资源、不支持模糊查询等不足,是一种既高效又实用的字符串检索方法。 | ||
搜索关键词: | 一种 用于 检索 字符串 方法 | ||
【主权项】:
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,其他不变;删除成功。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江大学,未经浙江大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/200610052710.4/,转载请声明来源钻瓜专利网。
- 上一篇:滚筒洗衣机
- 下一篇:运用于图像编码和视频编码的离散余弦变换方法