比特序列检索装置、检索方法以及程序的制作方法

文档序号:6455423阅读:256来源:国知局
专利名称:比特序列检索装置、检索方法以及程序的制作方法
技术领域
本发明涉及从比特序列的集合中检索期望的比特序列的检索装置, 特别是涉及对存储比特序列的数据结构进行设计来实现检索速度等的提 高的技术领域。
背景技术
近年,社会的信息化不断发展,大规模的数据库在各处利用起来。 为了从这种大规模的数据库中检索记录,通常是将与存储有各记录的地 址相对应的记录内的项目用作索引关键字来进行检索,检索出期望的记 录。并且,全文检索中的字符串也能视为文件的索引关键字。
而且,由于这些索引关键字利用比特序列来表现,因而数据库的检 索可归结于比特序列的检索。
为了高速进行上述比特序列的检索,以往做法是,对存储比特序列
的数据结构进行种种设计。作为这种设计之一,公知的是Patricia (帕特 里希亚)树这样的树结构。
图17示出在上述现有的检索处理中使用的Patricia树的一例。Patricia 树的节点构成为包含索引关键字、检索关键字的检査比特位置、以及左 右的链接指针。尽管未作明示,然而当然在节点内包含有用于对与索引 关键字对应的记录进行存取的信息。
在图17的例子中,保持索引关键字"100010"的节点1750a为根节点, 其检查比特位置是O。节点1750a的左链接1740a与节点1750b连接,右 链接1741a与节点1750f连接。
节点1750b保持的索弓I关键字是"Ol 0011",检查比特位置1730b是1 。 节点1750b的左链接1740b与节点1750c连接,右链接1741b与节点1750d 连接。节点1750c保持的索引关键字是"000111",检查比特位置是3。节
6点1750d保持的索引关键字是"011010",检査比特位置是2。
从节点1750c用实线连接的部分表示节点1750c的左右链接指针,
未进行虚线连接的左指针1740c表示该栏是空栏。进行了虚线连接的右
指针1741c的虚线的连接目的地表示指针所指示的地址,在当前情况下
表示右指针指定节点1750c。
节点1750d的右指针1741d指定节点1750d自身,左链接1740d与
节点1750e连接。1750e保持的索引关键字是"010010",检査比特位置是
5。节点1750e的左指针1740e指定节点1750b,右指针1741e指定节点
1750e。
并且,节点1750f保持的索引关键字是"101011",检査比特位置1730f 是2。节点1750f的左链接1740f与节点1750g连接,右链接1741f与节 点1750h连接。
节点1750g保持的索引关键字是"100011",检査比特位置1730g是5。 节点1750g的左指针1740g指定节点1750a,右指针1741g指定节点 1750g。
节点1750h保持的索引关键字是"101100",检査比特位置1730h是3。 节点1750h的左指针1740h指定节点1750f,右指针1741h指定节点1750h。
在图17的例子中,釆用这样的结构随着从根节点1750a开始对树 进行向下遍历,各节点的检査比特位置增大。
当使用某检索关键字进行检索时,从根节点开始依次检查由各节点 所保持的检索关键字的检查比特位置,判定检查比特位置的比特值是1 还是O,在是l时搜索右链接,在是O时搜索左链接。然后,当链接目的 地的节点的检査比特位置不大于链接源的节点的检查比特位置时,艮P, 链接目的地回到上方而不是下方时(将图17中虚线所示的该后退的链接 称为反向链接),进行链接目的地的节点的索引关键字和检索关键字的比 较。能够保证在比较结果是相同时检索成功,在比较结果是不相同时检 索失败。
如上所述,在使用Patricia树的检索处理中,有以下等优点只通过 所需要的比特的检查就能进行检索,以及关键字全体的比较只要一次就
7行,然而具有以下等缺点由于必定有来自各节点的2个链接而使存储 容量增大,由于反向链接的存在而使判定处理复杂化,在通过反向链接 返回之后才与索引关键字进行比较而使得检索处理延迟以及使追加删除 等数据维护困难。
作为消除Patricia树的这些缺点的技术,例如有下述专利文献1所公 开的技术。在下述专利文献1所记载的Patricia树中,通过将下位的左右 节点存储在连续的区域内来削减指针的存储容量,并通过将表示下一链 接是否是反向链接的比特设置在各节点内来减轻反向链接的判定处理。
然而,在下述专利文献1所公开的技术中,由于l个节点必定占据 索引关键字的区域和指针的区域,以及将下位的左右节点存储在连续的 区域内而采用1个指针,因而需要将与节点相同容量的存储区域分配给 例如图17所示的Patricia树的最下段部分即左指针1740c、右指针1741h 等部分等,存储容量的削减效果不怎么好。并且,反向链接导致的检索 处理的延迟问题和追加删除等的处理困难的情况也未得到改善。
专利文献l:日本特开2001—357070号公报

发明内容
因此,本发明要解决的课题是提供一种具有如下的数据结构的比特 序列检索装置和检索方法,该数据结构是检索对象的比特序列的数据结 构,所需要的存储容量小,检索速度高,数据维护容易。
根据本发明,提供一种名叫配对节点树(coupled node tree)的具有 以下数据结构的树,在本发明的比特序列检索装置中,使用该配对节点 树来进行索引关键字的检索。
本发明的配对节点树具有具有链接目的地的数据的分支节点、以 及具有作为检索对象的索引关键字的叶节点。并且,该树结构由根节点、 以及配置在相邻的存储区域内的分支节点和叶节点或分支节点之间或叶 节点之间的节点对构成。
分支节点包含检索关键字的鉴别比特位置以及用于链接到链接目的 地的节点对中的一方即代表节点的代表节点编号,所述叶节点包含由作为检索对象的比特序列构成的索引关键字。除了树的节点仅为1个时以 外,根节点是分支节点。
检索关键字的鉴别比特位置在使用检索关键字的该位置的比特值方
面与Patricia树的检査比特位置相同,然而不同点是,在Patricia树中, 判定检査比特位置的比特值来求出链接目的地,而在本发明的配对节点 树中,将鉴别比特位置的比特值用于求出链接目的地的节点的运算。
使用检索关键字执行的检索是在包含根节点在内的各分支节点中, 通过根据该分支节点内包含的鉴别比特位置的检索关键字的比特值依次 重复进行链接到链接目的地的节点对中的一个节点的动作直到到达叶节 点来执行的。
当到达叶节点时,将叶节点保持的索引关键字和检索关键字进行比 较,如果一致则检索成功。如果不一致,则在检索对象的索引关键字内 没有与检索关键字一致的索弓I关键字。
在对本发明的配对节点树追加新的索引关键字的情况下,首先将该 索引关键字用作检索关键字来进行检索,取得所找到的叶节点的索引关 键字。并且,将搜索到叶节点为止的分支节点的编号从根节点开始依次 存储在堆栈内。
在要追加的索引关键字和通过检索而取得的索引关键字之间进行大 小比较和比特序列比较,根据作为通过比特序列比较而不同的比特值的、 开头的(最上位的)比特位置与存储在堆栈内的分支节点的鉴别比特位 置之间的相对位置关系,决定所追加的节点对的插入位置,根据大小关 系决定将包含要追加的索引关键字的叶节点作为待追加的节点对中的哪 个节点。
当从本发明的配对节点树中删除某索引关键字时,通过这样来进行, 即使用要删除的关键字进行检索,将与保持删除对象的索引关键字的 节点构成同--节点对的节点的内容写入到该节点对的链接源的分支节点 内,删除该节点对。
本发明的配对节点树使用节点对来构成树结构,可针对索引关键字 的集合使其大小紧凑化。并且,由于将节点分离为包含指针的分支节点和包含索引关键字的叶节点,因而使需要指针信息的节点具有指针信息, 不需要索引关键字用的区域,需要索引关键字的节点不需要指针用的区
域,因而不会在存储区域内产生浪费。并且,也无需Patricia树那样的反
向链接的处理。
在将配对节点树存储在数组内的情况下,指针可采用数组编号,可 进一步减少所需要的存储容量。
根据本发明,如上所述可减少存储用于检索的树结构体的存储容量, 从而可减小检索处理负担,而且分支节点配置成保持由配对节点树内包 含的索引的比特序列结构所规定的鉴别比特位置,因而处理仅是在所需 要的比特位置处的处理,分支处理的负担也小。并且,鉴别比特位置的
比特值不会用于判定处理,而用于运算处理,因而在这一点上减轻了 CPU 处理负担。
并且,配对节点树的插入处理和删除处理也简单,维护负担也轻。 如上所述,根据本发明,可提供一种能高速执行比特序列检索、数 据维护容易的比特序列检索装置。


图1是说明存储在数组中的配对节点树的结构例的图。 图2是说明配对节点树的树结构的图。 图3是说明用于实施本发明的硬件结构例的图。 图4是示出本发明的一实施方式中的检索处理的流程图。 图5是示出本发明的一实施方式中的插入处理的前段即检索处理的 处理流程的图。
图6是说明本发明的一实施方式中的插入处理中的准备要插入的节 点对用的数组要素的处理流程的图。
图7是示出求出插入节点对的位置、写入节点对的各节点的内容来 完成插入处理的处理流程的图。
图8是说明包含本发明的一实施方式中的根节点的插入处理在内的 在追加索引关键字的情况下的整个节点插入处理的处理流程图。图9是示出本发明的一实施方式中的删除处理的前段即检索处理的 处理流程的图。
图10是说明本发明的一实施方式中的删除处理的后段的处理流程 的图。
图11A是说明删除处理前的配对节点树和删除关键字"011010"的图。
图11B是说明删除处理后的配对节点树的图。
图12A是说明插入处理前的配对节点树和插入关键字"0011"的图。
图12B是说明插入处理后的配对节点树的图。
图13是说明图5所示的插入处理的前段即检索处理中的处理框的流 程的图。
图14是说明图6所示的为了要插入的节点对而准备数组要素的处理 框的流程的图。
图15是说明图7所示的处理中的前半部分,即求出要插入的节点对 在配对节点树..h的位置的处理流程的图。
图16是说明图7所示的处理中的后半部分,即在各节点设定数据来 完成插入处理的处理流程的图。
图17是示出以往的检索中使用的Patricia树的一例的图。
具体实施例方式
以下,说明用于实施本发明的最佳方式,即将配对节点树存储在数 组内的例子。作为分支节点保持的表示链接目的地的位置的数据,还能 使用存储装置的地址信息,然而通过使用由可存储分支节点或叶节点中 占有区域的存储容量大的一方的数组要素构成的数组,可使用数组编号 表示节点位置,可削减位置信息的信息量。
图1是说明存储在数组内的配对节点树的结构例的图。 参照图l,节点101配置在数组100的数组编号为10的数组要素内。 节点101由节点类别102、鉴别比特位置103以及代表节点编号104构成。 节点类别102是0,表示节点101是分支节点。在鉴别比特位置103内存储有1。在代表节点编号104内存储有链接目的地的节点对的代表节点的 数组编号20。另外,以下为了简化表述,有时把存储在代表节点编号内 的数组编号称为代表节点编号。并且,存储在代表节点编号内的数组编 号有时利用付加给该节点的符号或付加给节点对的符号来表示。
在数组编号20的数组要素内存储有节点对111的代表节点即节点112。然后在相邻的下一数组要素(数组编号20+l)内存储有与代表 节点成对的节点[1]113。在节点
112的节点类别114内存储有O,在鉴 别比特位置115内存储有3,在代表节点编号116内存储有30。并且, 在节点[1]113的节点类别17内存储有1,表示节点[1]113是叶节点。在 索引关键字118内存储有"0001"。与之前针对Patricia树描述的一样,当 然在叶节点内包含有对与索引关键字对应的记录进行存取的信息,然而 省略表述。
另外,有时代表节点利用节点[O]表示,与其成对的节点利用节点[l] 表不。
省略了由存储在数组编号30和31的数组要素内的节点122和节点 123构成的节点对121的内容。
分别赋予给存储有节点
112、节点[1]U3、节点122以及节点123 的数组要素的0或1表示在使用检索关键字进行检索的情况下链接到节 点对的哪个节点。链接到将位于前段的分支节点的鉴别比特位置上的检 索关键字的比特值O或1与代表节点编号相加所得到的数组编号的节点。
因此,通过将前段的分支节点的代表节点编号与检索关键字的鉴别 比特位置的比特值相加,可求出存储有链接目的地的节点的数组要素的 数组编号。
另外,在上述例子中代表节点编号采用配置有节点对的数组编号中 的小的一方,然而显然也能采用大的一方。
图2是概念性示出配对节点树的树结构的图。图示的6比特的索引 关键字与图17所例示的Patricia树的相同。
利用符号210a表示的是根节点。在图示的例子中,根节点210a作 为配置在数组编号220上的节点对201a的代表节点。作为树结构,在根节点210a的下方配置有节点对201b,在节点对 201b的下层配置有节点对201c和节点对201f,在节点对201f的下层配 置有节点对201h和节点对201g。在节点对201c的下方配置有节点对 201d,并在节点对201d的下方配置有节点对201e。
附在各节点的前方的符号0或1与在图1中所说明的附在数组要素 的前方的符号相同。根据检索关键字的鉴别比特位置的比特值来搜索树, 从而找到检索对象的叶节点。
在图示的例子中,根节点210a的节点类别260a是0,表示是分支节 点,鉴别比特位置230a表示0。代表节点编号是220a,该编号是存储有 节点对201b的代表节点210b的数组要素的数组编号。
节点对201b由节点210b和211b构成,它们的节点类别260b、 261b 都是0,表示是分支节点。在节点210b的鉴别比特位置230b上存储有1, 在链接目的地的代表节点编号内存储有存储了节点对201c的代表节点 210c的数组要素的数组编号220b。
由于在节点210c的节点类别260c内存储有1 ,因而该节点是叶节点, 因此包含索引关键字。在索引关键字250c内存储有"000111"。另一方面, 节点211c的节点类别261c是0,鉴别比特位置231c是2,在代表节点编 号内存储有存储了节点对201d的代表节点210d的数组要素的数组编号 221c。
节点210d的节点类别260d是0,鉴别比特位置230d是5,在代表 节点编号内存储有存储了节点对201e的代表节点210e的数组要素的数 组编号220d。与节点210d成对的节点211d的节点类别261d是l,在索 弓1关键字251 d内存储有"011010"。
节点对201e的节点210e、 211e的节点类别260e、 261e都是l,表 示双方都是叶节点,在各个索引关键字250e、 251e内存储有"OIOOIO"和 "OlOOll"作为索引关键字。
在节点对201b的另一个节点即节点211b的鉴别比特位置231b内存 储有2,在链接目的地的代表节点编号内存储有存储了节点对201f的代 表节点210f的数组要素的数组编号221b。
13节点对201f的节点210f、 211f的节点类别260f、 261f都是0,表示 双方都是分支节点。在各个鉴别比特位置230f、 231f内存储有5、 3。在 节点210f的代表节点编号内存储有存储了节点对201g的代表节点210g 的数组要素的数组编号220f,在节点211f的代表节点编号内存储有存储 了节点对201h的代表节点即节点
210h的数组要素的数组编号221f。
节点对20ig的节点210g、 211g的节点类别260g、 261g都是l,表 示双方都是叶节点,在各个索引关键字250g、 251g内存储有"100010"和 "100011"。
并且同样,节点对201h的代表节点即节点
210h和与其成对的节 点[l]211h的节点类别260h、 261h都是l,表示双方都是叶节点,在各个 索引关键字250h、 251h内存储有"101011"和"101100"。
以下,简单说明从上述的树中检索索引关键字"100010"的处理流程。 鉴别比特位置从左起为O、 1、 2、...。
首先,将比特序列"100010"用作检索关键字,从根节点210a开始处 理。由于根节点210a的鉴别比特位置230a是0,因而当查看检索关键字 "100010"的鉴别比特位置0的比特值时是1。因此,链接到在对存储有代 表节点编号的数组编号220a加上1后的数组编号的数组要素内存储的节 点211b。由于在节点211b的鉴别比特位置231b内存储有2,因而当查 看检索关键字"100010"的鉴别比特位置2的比特值时是0,因此链接到在 存储有代表节点编号的数组编号221b的数组要素内存储的节点210f。
由于在节点210f的鉴别比特位置230f内存储有5,因而当查看检索 关键字"100010"的鉴别比特位置5的比特值时是O,因此链接到在存储有 代表节点编号的数组编号220f的数组要素内存储的节点210g。
由于节点210g的节点类别260g是l,表示是叶节点,因而当读出 索引关键字250g来与检索关键字进行比较时,双方都是"100010"是一致 的。这样进行使用配对节点树的检索。
下面,参照图2说明配对节点树的结构的意义。
配对节点树的结构是根据索引关键字的集合来规定的。在图2的例 子中,根节点210a的鉴别比特位置是0,这是因为在图2所例示的索引
14关键字中有第0比特是0的索引关键字以及第0比特是1的索引关键字。第0比特是0的索引关键字的组被分类在节点210b的下方,第0比特是
1的索引关键字的组被分类在节点211b的下方。
节点211b的鉴别比特位置是2,这反映了索引关键字的集合的性质,即存储在节点211h、 210h、 211g、 210g内的第0比特是l的索引关键字的第1比特全部相同是0,从第2比特开始才有不同。
以下与第0比特的情况一样,第2比特是1的索引关键字被分类在节点211f侧,第2比特是0的索引关键字被分类在节点210f侧。
然后,由于第2比特是1的索引关键字中存在第3比特不同的索引关键字,因而在节点211f的鉴别比特位置上存储3,由于在第2比特是0的索引关键字中第3比特和第4比特均相同而第5比特不同,因而在节点210f的鉴别比特位置上存储5。
在节点211f的链接R的地中,由于第3比特是1的索引关键字和第3比特是0的索引关键字分别只有一个,因而节点210h、 211h成为叶节点,分别在索引关键字250h和251h内存储有"101011"和"101I00"。
假设在索引关键字的集合内包含有"101101"或"101110"而取代"101100",到第3比特为止也与"101100"相等,因而只是存储在节点211h内的索引关键字改变,树结构自身不会改变。然而,当除了"101100"以外还包含有"101101"时,节点211h成为分支节点,其鉴别比特位置成为5。当所追加的索引关键字是"101110"时,鉴别比特位置为4。
如以上说明那样,配对节点树的结构是根据索引关键字的集合内包含的各索引关键字的各比特位置的比特值来决定的。当使用检索关键字进行检索时,索引关键字搜索配置在配对节点树上的根上,例如当检索关键字是"101100"时,可到达节点211h。并且,从上述说明还可以想象
出,即使在将"ioiior或"ioiiio"用作检索关键字的情况下,也搜索到节
点211h,通过与索引关键字251h进行比较可知检索失败。
并且,例如在使用"100100"进行检索的情况下,在节点210a、 211b、210f的链接路径上不会使用检索关键字的第3比特和第4比特,"100100"的第5比特是0,因而与使用"100010"进行检索的情况一样到达节点210g。这样,使用与存储在配对节点树内的索引关键字的比特结构对应 的鉴别比特位置来进行分支。
另外,后面详细说明检索的详细算法和针对索引关键字的集合如何 构成配对节点树。
图3是说明用于实施本发明的硬件结构例的图。
本发明的检索装置的检索处理和数据维护是通过至少具有中央处理
装置302和高速缓存303的数据处理装置301使用数据存储装置308来 实施的。具有配置配对节点树的数组309和探索路径堆栈310的数据存 储装置308可使用主存储装置305或外部存储装置306来实现,或者还 能使用通过通信装置307连接的配置在远方的装置来实现,该探索路径 堆栈310用于保存存储有在检索中搜索的节点的数组要素的数组编号。
在图3的例示中,主存储装置305、外部存储装置306以及通信装 置307通过一根总线304与数据处理装置301连接,然而连接方法不限 于此。并且,也能使主存储装置305为数据处理装置301内的装置,也 能将探索路径堆栈310作为中央处理装置302内的硬件来实现。或者, 显然可以根据可使用的硬件环境、索引关键字集合的大小等适当选择使 数组309在外部存储装置306内、使探索路径堆栈310在主存储装置305 内等硬件结构。
并且,尽管未作特别图示,然而为了在后面的处理中使用在处理途 中所获得的各种值,当然可以使用与各个处理对应的暂时存储装置。
图4是示出本发明的一实施方式中的检索处理的流程图。适当参照 图2,说明检索处理的算法。
当开始检索处理时,取得作为检索对象的配对节点树的根节点的数 组编号(步骤S401 )。由于配对节点树可根据其根节点的数组编号来识别, 因而配对节点树的管理可使用根节点的数组编号来进行。因此,假定在 配对节点树的管理单元内登记有配对节点树的根节点的数组编号。
另外,图示的检索处理显然可使用计算机上的程序来实现,然而上 述配对节点树的管理单元例如可以为使计算机执行检索处理的程序上的 存储区域。上搭载了使用多个配对节点树的检索系统 的情况下,还可以在各个检索程序的外部具有该检索系统。
在图2的例子中,相当于取得数组编号220。另外,根节点的数组 编号的取得不限于上述方法,可以从键盘等直接输入数组编号,也可以 作为固定值预先在程序中设定。
然后在步骤S402中,将在步骤S401所取得的数组编号存储在探索 路径堆栈内。进到步骤S403,从数组中读出堆在探索路径堆栈的最上部 的数组编号的数组要素作为链接目的地的节点。在步骤S404中,从在步 骤S403所读出的节点中取出节点类别。
然后在步骤S405中进行节点类别的判定。当步骤S405的判定是分 支节点时,转到步骤S406。在步骤S406中,从节点中取出鉴别比特位置。 然后在步骤S407中,从检索关键字中取得在步骤S406所取出的鉴别比 特位置的比特值。然后进到步骤S408,从节点中取得链接目的地的节点 对的代表节点的数组编号。接下来进到步骤S409,将在步骤S408所取得 的数组编号与在步骤S407所取得的比特值相加,取得链接目的地节点的 数组编号,回到步骤S402。
在步骤S402中将在步骤S409所取得的数组编号存储在探索路径堆 栈内。
重复以上步骤S402至S409的循环处理,直到步骤S405的判定为叶 节点。
当在步骤S405判定为节点类别是叶节点时,转到步骤S410,从节 点中取出索引关键字。然后进到步骤S4U,判定检索关键字和索引关键 字是否相同。如果相同则检索成功,如果不相同则检索失败。
在上述说明中,为了识别处理中的节点的数组编号而使用了堆栈, 然而如果只是为了检索,则也能将普通的工作区域用作暂时存储。然而, 在以下说明的插入处理中,由于使用堆栈是有效的,因而优选的是在检 索处理中也使用堆栈。
下面,使用图5 图8说明配对节点树中的节点插入处理。图5 图 7是说明常规的插入处理的图,图8是说明根节点的插入处理的图。由于通过根节点的插入处理和常规的插入处理来生成配对节点树,因而节点 插入处理的说明也是配对节点树的生成处理的说明。
图5是示出插入处理的前段即检索处理的处理流程的图,相当于在 图4所示的检索处理中将插入关键字用作检索关键字的处理。由于步骤
S501 步骤S510的处理完全对应于图4的步骤S401 步骤S410,因而 省略说明。
在图5的步骤S511中将插入关键字和索引关键字进行比较,如果相 同,则插入关键字已存在于配对节点树内,因而插入失败,结束处理。 如果不相同,则进到后面的处理,即图6的步骤S512以下的处理。
图6是说明准备要插入的节点对用的数组要素的处理的处理流程图。
在歩骤S512中,根据数组求出空的节点对,取得该节点对中的应成 为代表节点的数组要素的数组编号。
进到步骤S513,将插入关键字与在步骤S510所获得的索引关键字 的大小进行比较,当插入关键字大时获得值1、当插入关键字小时获得值 0的布尔值。
进到步骤S514,获得将在步骤S512所获得的代表节点的数组编号 与在步骤S513所获得的布尔值相加后的数组编号。
进到步骤S515,获得将在步骤S512所获得的代表节点的数组编号 与在步骤S513所获得的布尔值的逻辑"非"值相加后的数组编号。
在步骤S514所获得的数组编号是存储具有插入关键字作为索引关 键字的叶节点的数组要素的数组编号,在步骤S515所获得的数组编号是 存储与该叶节点成对的分支节点的数组要素的数组编号。
即,根据在前段的检索处理中获得的叶节点内所存储的索引关键字 和插入关键字的大小,决定在插入的节点对中的哪个节点内存储保持插 入关键字的叶节点。
例如在图2的配对节点树内插入"011011"的情况下,检索结果的索 引关键字也为存储在节点211d内的"011010"。通过插入关键字"011011" 和存储在节点211d内的索引关键字"011010"的大小比较来求出布尔值,在当前的例子中由于插入关键字大,因而获得布尔值l,在将插入的节点 对的代表节点编号加上1后的数组要素内存储保持插入关键字的叶节点。 另一方面,索引关键字"011010"被存储在将通过大小比较所获得的布尔值
进行了逻辑反转后的值与代表节点编号相加所得到的数组编号的数组要 素内。
此时,由于索引关键字"oiioio"和插入关键字"oiioir,在第5比特不
同,因而节点211d成为如下的分支节点将鉴别比特位置设为5、将代
表节点编号设为所插入的节点对的代表节点的数组编号。
并且,在要将"011001"插入到图2的配对节点树内的情况下,检索 结果的索引关键字为存储在节点2Ud内的"011010"。在该情况下,由于 插入关键字小,因而获得布尔值O,在将插入的节点对的代表节点编号加 上0后的数组要素内存储保持插入关键字的叶节点。然后,由于索引关 键字"011010"和插入关键字"011001"在第4比特不同,因而节点211d成 为如下的分支节点将鉴别比特位置设为4、将代表节点编号设为所插入 的节点对的代表节点的数组编号。然后进到图7的步骤S516以下的处理。
图7是示出将节点存储在图6所准备的数组内并求出其插入位置、 变更已有节点的内容来完成插入处理的处理流程的图。
步骤S516 步骤S523的处理是求出要插入的节点对在配对节点树 上的位置的处理,步骤S524以下的处理是在各节点设定数据来完成插入 处理的处理。
在步骤S516中,通过使用例如"异或"来进行插入关键字与在步骤 S510所获得的索引关键字的比特序列比较,获得差分比特序列。
进到步骤S517,根据在步骤S516所获得的差分比特序列,获得从 上位第0比特开始观察到的第--个不一致比特的比特位置。该处理可在 例如具有优先编码器的CPU中通过向CPU输入差分比特序列,来获得 不一致的比特位置。并且,也能以软件方式进行与优先编码器同等的处 理,获得第--个不一致比特的比特位置。
然后进到步骤S518,判定探索路径堆栈的堆栈指针是否指定根节点 的数组编号。在指定根节点的数组编号时转到步骤S524,在未指定根节点的数组编号时进到步骤S519。
在步骤S519中,使探索路径堆栈的堆栈指针后退1个,取出堆栈在其内的数组编号。
进到步骤S520,从数组中读出在步骤S519所取出的数组编号的数组要素作为节点。
进到步骤S521 ,从在步骤S520所读出的节点中取出鉴别比特位置。
然后进到步骤S522,判定在步骤S521所取出的鉴别比特位置与在步骤S517所获得的比特位置相比是否为上位的位置关系。假定这里上位的位置关系是指比特序列的靠左侧的位置,即比特位置的值小的位置。
在步骤S522的判定结果是否定时,回到步骤S5IS,重复执行直到步骤S518的判定为肯定或者步骤S522的判定为肯定。当步骤S522的判定为肯定时,在步骤S523使探索路径堆栈的堆栈指针前进1个,转到步骤S524以下的处理。
在上述步骤S516 步骤S523所说明的处理是这样的处理为了决定要插入的节点对的插入位置,在要插入的索引关键字与通过检索所取得的索引关键字之间进行比特序列比较,调查作为通过比特序列比较而不同的比特值的、开头的(最上位的)比特位置与存储在探索路径堆栈内的分支节点的鉴别比特位置之间的相对位置关系,将以鉴别比特位置为上位的分支节点的下一分支节点的链接目的地设为要插入的节点对的插入位置。
例如当把"111000"插入到图2的配对节点树内时,检索结果的索引关键字为存储在节点210h内的"101011"。获得作为通过插入关键字
"iiiooo"与存储在节点2ioh内的索引关键字"ioioir,的比特序列比较而
不同的比特值的、最上位的比特位置1。当在探索路径堆栈内依次反向搜索所获得的比特位置1与在堆栈在探索路径堆栈中的数组编号的数组要素内所存储的分支节点的鉴别比特位置之间的位置关系直到鉴别比特位
置为上位时,到达根节点210a。因此,使探索路径堆栈的指针前进1个,获得节点211b的数组编号。插入关键字"111000"被插入到节点211b的链接目的地。
20并且,即使对探索路径堆栈进行反向搜索并到达根节点,与先前求出的作为通过比特序列比较而不同的比特值的、最上位的比特位置相比,根节点的鉴别比特位置也不是上位的比特位置是指以下的情况在该配对节点树的索引关键字的上位比特,与根节点的鉴别比特位置相比为上位的比特值全部相同。并且是指如下情况在要插入的索引关键字中,在最初的与根节点的鉴别比特位置相比为上位的比特值中存在不同的比特值。因此,要插入的节点对成为根节点的直接链接目的地,根节点的鉴别比特位置变为与己有的索引关键字不同的值即插入关键字的最上位比特的位置。
下面,对步骤S524以下的在各节点设定数据来完成插入处理的处理
进行说明。
在步骤S524中,从探索路径堆栈中取出堆栈指针所指定的数组编号。
在步骤S525中,向在步骤S514所获得的数组编号所指定的数组要素的节点类别内写入l (叶节点),向索引关键字内写入插入关键字。
进到步骤S526,从数组中读出在步骤S524所获得的数组编号的数组要素。
然后在步骤S527中,向在步骤S515所获得的数组编号的数组要素内写入在步骤S526所读出的内容。
最后在步骤S528中,向在步骤S524所获得的数组编号所指定的数组要素的节点类别内写入0 (分支节点),向鉴别比特位置内写入在步骤S517所获得的比特位置,向代表节点编号内写入在步骤S512所获得的数组编号,结束处理。
在向上述图2的配对节点树内插入"111000"的例子中,向所取得的空节点对的节点
内写入节点211b的内容(步骤S527),将节点[l]设为保持插入关键字"111000"的叶节点(步骤S525)。然后,在节点211b的鉴别比特位置上存储作为通过比特序列比较而不同的比特值的、最上位的比特位置1,将存储所取得的节点对的代表节点的数组要素的数组编号存储在代表节点编号内(步骤S528)。图8是说明包含本发明的一实施方式中的根节点的插入处理在内的在追加索引关键字的情况下的整个节点插入处理的处理流程图。
在步骤S551中,判定要求取得的配对节点树的根节点的数组编号是
否已登记。如果己登记,则进行使用图5 图7所说明的常规的插入处理。如果步骤S551的判定为未登记,则开始全新的配对节点树的登记、生成。
首先,在步骤S552中,根据数组求出空节点对,取得该节点对中的应成为代表节点的数组要素的数组编号。然后在步骤S553中,求出在步骤S552所获得的数组编号加上0后的数组编号(实际上,等于在步骤S552所取得的数组编号)。然后在步骤S554中,向要插入的根节点的节点类别内写入l (叶节点),并向索引关键字内写入插入关键字,在步骤S553所获得的数组编号的数组要素内登记在步骤S556、步骤S552所取得的根节点的数组编号,结束处理。
如前所述,显然,当有索引关键字的集合时,从该集合中依次取出索引关键字,通过重复进行图8和图5 图7的处理,可构建与索引关键字的集合对应的本发明的配对节点树。
下面,参照图9和图10,对从本发明的一实施方式中的配对节点树涉及的索引关键字的集合中删除特定的索引关键字的处理流程进行说明。
图9是示出删除处理的前段即检索处理的处理流程的图,相当于在图4所示的检索处理中把删除关键字作为检索关键字的处理。由于步骤S901 步骤S910的处理与图4的步骤S401 步骤S410完全对应,因而省略说明。
在图9的步骤S911中将删除关键字与索引关键字进行比较,如果不相同,则要删除的索引关键字不存在于配对节点树内,因而删除失败,结束处理。如果相同,则进到后面的处理,即图10的步骤S912以下的处理。
图IO是说明删除处理的后段的处理流程的图。
首先,在步骤S912判定在探索路径堆栈内是否存储有2个以上的数组编号。未存储有2个以上的数组编号,换句话说只存储有1个数组编号,则该数组编号是存储有根节点的数组要素的数组编号。在该情况下,
转到步骤S918,删除在步骤S901所获得的根节点的数组编号涉及的节点对。然后进到步骤S919,删除所登记的根节点的数组编号,结束处理。
当在步骤S912中判定为在探索路径堆栈内存储有2个以上的数组编号时,进到步骤S913,获得将步骤S908中获得的代表节点编号与使步骤S907中所获得的比特值反转后的值相加所得到的数组编号。该处理是求出配置有与存储了删除对象的索引关键字的叶节点成对的节点的数组编号的处理。
然后在步骤S914中,读出在步骤S913所获得的数组编号的数组要素的内容,在步骤S915中使探索路径堆栈的堆栈指针后退1个,取出数组编号°
然后进到步骤S916,将在步骤S914所读出的数组要素的内容改写为在步骤S915所获得的数组编号的数组要素。该处理是将作为链接到存储有删除对象的索引关键字的叶节点的链接源的分支节点置换为与上述叶节点成对的节点的处理。
最后在步骤S917中删除在步骤S908所获得的代表节点编号涉及的节点对,结束处理。
图UA和图UB是对从图2所例示的配对节点树中删除索引关键字"011010"的处理进行说明的图。
图11A所示的配对节点树的节点对201f以下的节点省略了记载。删除对象的索引关键字"011010"被存储在作为暂时存储区域的删除关键字270内。探索路径堆栈280的堆栈指针指定数组编号221c+l,表示检索处理完成。图中被粗框包围的节点是在检索处理中所被搜索过的节点,其数组编号从根节点210a的数组编号到叶节点211d的数组编号被堆栈在探索路径堆栈280中。
在使用删除关键字的检索处理中,首先开始取得根节点210a的数组编号220,将其存储在探索路径堆栈280内。由于根节点210a的鉴别比特位置230a是0,删除关键字的比特位置0的比特值是0,因而代表节
23点编号220a+0 = 220a被存储在探索路径堆栈280内。
于是读出节点210b,由于鉴别比特位置230b是1,删除关键字的比特位置1的比特值是1,因而代表节点编号220b+l被存储在探索路径堆栈280内。
然后读出节点211c,由于鉴别比特位置231c是2,删除关键字的比特位置2的比特值是1,因而代表节点编号221c+l被存储在探索路径堆栈280内。存储在数组编号是221c+l的数组要素内的节点211d的节点类别261d是l,表示是叶节点,因而当取出索引关键字251d时,其值是"011010",与存储在删除关键字270内的删除对象的索引关键字一致。
在图IIA所示的状态下,读出与具有删除对象的索引关键字的节点211d成对的节点210d的内容,该内容被写入到在使探索路径堆栈280的堆栈指针后退1个的位置中所存储的数组编号220b+l的数组要素(节点221c)内。之后删除节点对201d。删除了节点对的数组要素为空,可再利用。
图11B所示的配对节点树是删除处理结束后的配对节点树。在节点211c的节点类别261c、鉴别比特位置231c、代表节点编号221c内,如括弧所示,直接存储有在节点210d内存储的值。
下面,根据图12A、图12B和图13 图16,列举具体例来进一步说明插入处理。
图12A所示的是具有比特序列"0100"、 "0001"、 "0000"作为索引关键字的配对节点树以及保持了此后要插入的插入关键字"0011"的暂时存储区域1250。图示的树由节点对1201a、 1201b、 1201c构成。
节点对1201a的代表节点是根节点1210a,在鉴别比特位置保持有1。节点对1201a的下位的节点对1201b的代表节点1210b是分支节点,在鉴别比特位置保持有3,与代表节点1210b成对的节点1211b是叶节点,保持有索引关键字"0100"。作为分支节点的节点1210b链接到节点对1201c。
构成节点对1201c的节点1210c、 1211c都是叶节点,分别保持了索引关键字"OOOO"、 "0001"。图12B是示出插入了插入关键字"0011"的配对节点树。新的节点对
1201d被插入在节点对1201b与节点对1201c之间。
将图12A和图12B进行比较,所插入的节点1210d的内容是插入前的节点1210b的内容,插入后的节点1210b的鉴别比特位置从3变化为2。
以下,适当参照图5 图7,根据图13 图16对图12A和图12B所例示的插入处理进行说明。在图13 图16中粗线所示的处理流程是依照图12A和图12B的例示的处理流程。并且,S501等的符号表示该部分的处理对应于图5 图7记载的步骤S501等中的处理。
图13是说明图5所示的插入处理的前段即检索处理中的处理块的流程的图。
如图13所示,在最初的处理块中进行根节点设定。通过取得根节点的数组编号来设定根节点的位置。将所取得的数组编号1210a存储在探索路径堆栈内。另外,这里,表示数组编号的符号兼用作表示节点的符号。
然后,在由步骤S503、步骤S504和步骤S505构成的节点读出/判定块中判定节点1210a是分支节点,进行分支处理。
在分支处理中,将插入关键字"0011"的第1比特的"O"与存储在节点1210a的代表节点编号内的数组编号1201b相加来计算链接目的地的节点位置。另外,这里,利用链接目的地的节点对的符号来表示存储在代表节点编号内的数组编号。计算出的节点位置1210b被存储在探索路径堆桟内。
根据在分支处理中计算出的节点位置再次进行节点读出/判定处理,读出节点1210b,判定为是分支节点。
因此再次进行分支处理,将插入关键字"ooir'的第3比特的"r与存
储在节点1210b的代表节点编号内的数组编号1201c相加来计算链接目的地的节点位置。计算出的节点位置1211c被存储在探索路径堆栈内。在后面的节点读出/判定处理中读出节点1211c,判定为是叶节点。
因此处理分支到叶处理,进行节点121lc的索引关键字"ooor和插
入关键字"0011"的比特序列比较,如果一致则插入失败,如果不一致则进到后面的处理。
另外,虚线箭头指向处所记载的符号D513等的出口标记表示与虚线
的一方连接的数据值在相同符号的入口点中被使用。D513中的513表示 在步骤S513中被使用。以上,在图14 图16中也是一样。
图14是对准备图6所示的要插入的节点对用的数组要素的处理块的 流程进行说明的图。
在空节点对取得块中,从数组中取得连续区域的2个空数组要素的 数组编号涉及的代表节点编号1201d。
然后在节点存储位置计算块中,进行插入关键字"0011"和在步骤 S510所获得的索引关键字"0001"的大小比较,决定在空节点对取得块中 所取得的2个数组要素中的哪个数组要素内存储保持插入关键字的叶节 点。由于比较结果是插入关键字大,因而在代表节点编号1201d加上1 后的数组编号的数组要素内存储保持插入关键字的叶节点作为节点 1211d。
图15是说明图7所示的处理中的前半部分,即求出要插入的节点对 在配对节点树上的位置的处理流程的图。
在差分比特位置检测块中,运算插入关键字"ooir和在步骤S5io所
获得的索引关键字"0001"的各比特的"异或"值"0010",求出差分比特位置 是第2比特。
在插入节点位置检索块中, 一边将存储在探索路径堆栈的指针所指 定的数组编号的数组要素内的节点的鉴别比特位置和差分比特位置进行 比较, 一边使指针依次后退直到鉴别比特位置成为上位。在途中指针指 定了根节点的数组编号的情况下,插入位置为根节点的紧下方。
在开始插入节点位置的探索之前的阶段中,由于探索路径堆栈的指 针指定数组编号121 lc,因而使指针后退1个幵始插入节点位置的探索处 理,取出节点1210b的存储位置,读出节点1210b。由于节点1210b的鉴 别比特位置是3,与差分比特位置2相比为下位,节点1210b不是根节点, 因而再继续探索插入节点位置。
当再使指针后退1个时,取出节点1210a的存储位置,读出节点
261210a。由于节点1210a的鉴别比特位置是l,与差分比特位置2相比为 上位,因而使指针的位置前进1个来进行插入节点位置读出块的处理。
当进行插入位置读出时,探索路径堆栈的指针指定数组编号1210b, 因而作为插入节点的插入位置,读出数组编号1210b。
图16是说明图7所示的处理中的后半部分,即在各节点设定数据来 完成插入处理的处理流程的图。
在叶节点装配/写入块中,装配在节点类别内存储1、在索引关键字 内存储插入关键字"00U"的叶节点,将其存储在图14所示的节点存储位 置计算块中计算出的数组编号1211d的数组要素内。
然后,在插入位置的节点读出/写入块中,读出在图15所示的插入 节点位置读出块中所读出的数组编号的节点1210b,将其内容存储在图 14所示的节点存储位置计算块中计算出的数组编号1210d的数组要素内。
然后,在分支节点装配/写入框中,装配进如下的分支节点在节点 类别内存储0,在鉴别比特位置内存储在图15所示的差分比特位置检测 块中检测出的差分比特位置2,在代表节点编号内存储在图14所示的空 节点对取得块中所取得的代表节点编号1201d。然后,将所装配的分支节 点写入到在图15所示的插入节点位置读出块中所读出的数组编号1210b 的数组要素内。
通过上述处理,在图12A所示的配对节点树内插入了插入关键字 "0011",完成图12A所示的配对节点树。
以上详细说明了用于实施本发明的最佳方式,然而对本领域技术人 员来说,本发明的实施方式显然不限于此而能进行各种变形。
并且,显然,本发明的比特序列检索装置可利用存储配对节点树的 存储单元和使计算机执行图4所示的处理的程序来构建在计算机上。
而且,显然,能利用使计算机执行图8和图5 图7所示的索引插 入处理及其等同物的程序来实现本发明的索引插入方法,并能利用使计 算机执行图9和图10所示的删除处理及其等同物的程序来实现本发明的 索引插入方法。然后,利用这些程序在计算机上^现分支节点和叶节点 的识别单元、根据分支节点的鉴别比特位置链接到链接目的地的节点对
27的哪个节点的单元等。
因此,上述程序以及存储有程序的计算机可读取的存储介质包含在 本发明的实施方式内。而且,本发明的配对节点树的数据结构也包含在 本发明的实施方式内。
通过使用以上详细说明的本发明提供的全新的数据结构即配对节点 树,可进行更高速的比特序列数据的检索,而且也能容易地执行比特序 列数据的追加删除。
权利要求
1. 一种比特序列检索装置,其特征在于,该比特序列检索装置具有配对节点树,该配对节点树是用于比特序列检索的树,该树由根节点、以及配置在相邻的存储区域内的分支节点和叶节点或分支节点之间或叶节点之间的节点对构成,所述根节点是表示所述树的起点的节点,当该树的节点为1个时所述根节点是所述叶节点,当该树的节点为2个以上时所述根节点是所述分支节点,所述分支节点包含表示进行比特序列检索的检索关键字的鉴别比特位置和链接目的地的节点对中的一个节点的位置的信息,所述叶节点包含由检索对象的比特序列构成的索引关键字,在包含所述根节点的所述分支节点中,根据该分支节点内包含的鉴别比特位置的检索关键字的比特值依次重复进行链接到链接目的地的节点对中的任一个节点的动作直到到达所述叶节点,由此来执行基于所述检索关键字的检索。
2. 根据权利要求1所述的比特序列检索装置,其特征在于,所述配 对节点树被存储在数组内,表示所述链接目的地的节点对中的一个节点 的位置的信息是存储有该节点的所述数组的数组要素的数组编号。
3. 根据权利要求2所述的比特序列检索装置,其特征在于,通过所 述数组编号和所述检索关键字的鉴别比特位置的比特值的运算来求出存 储有链接目的地的节点的数组要素的数组编号。
4. 根据权利要求l所述的比特序列检索装置,其特征在于,所述分 支节点和叶节点包含表示各个节点的类别的数据。
5. 根据权利要求1 4所述的比特序列检索装置,其特征在于,将 所述叶节点内包含的索引关键字和所述检索关键字进行比较,如果一致 则检索成功,如果不一致则检索失败。
6. —种索引关键字插入方法,该方法在权利要求2所述的比特序列检索装置的所述配对节点树内插入包含由期望的比特序列构成的索引关 键字的叶节点,其特征在于,在该索引关键字插入方法中,将所述索引关键字作为所述检索关键字,从所述配对节点树中检索 相应的叶节点,并将存储有搜索到该叶节点为止的链接路径的分支节点 和该叶节点的数组要素的数组编号依次存储在堆栈内,在所述检索关键字和所述相应的叶节点内包含的索引关键字之间进 行大小比较和比特序列比较,根据作为通过比特序列比较而不同的比特值的、开头的比特位置与 存储在所述堆栈内的分支节点的鉴别比特位置之间的相对位置关系,决 定由包含被插入的索引关键字的叶节点和另一个节点构成的节点对的插 入位置,根据所述大小关系决定将包含待插入的索引关键字的叶节点作为所 述被插入的节点对中的哪个节点。
7. —种索引关键字删除方法,该方法从权利要求2所述的比特序列 检索装置的所述配对节点树中删除包含任意的索引关键字的叶节点,其 特征在于,在该索引关键字删除方法中,将所述索引关键字作为所述检索关键字,从所述配对节点树中检索 相应的叶节点,将与保持删除对象的索引关键字的所述叶节点构成同--节点对的节 点的内容写入到该节点对的链接源的分支节点内, 删除该节点对。
8. —种比特序列检索方法,该方法是使用配对节点树的比特序列检 索方法,该配对节点树是用于比特序列检索的树,该树由根节点、以及配置 在相邻的存储区域内的分支节点和叶节点或分支节点之间或叶节点之间 的节点对构成,所述根节点是表示树的起点的节点,当该树的节点为1个时所述根节点是所述叶节点,当该树的节点为2个以上时所述根节点是所述分支 节点,所述分支节点包含表示进行比特序列检索的检索关键字的鉴别比特 位置和链接目的地的节点对中的一个节点的位置的信息,所述叶节点包 含由检索对象的比特序列构成的索引关键字,其特征在于,在该比特序列检索方法中,在包含所述根节点的所述分支节点中,根据该分支节点内包含的鉴 别比特位置的检索关键字的比特值依次重复进行链接到链接目的地的节 点对中的任一节点的动作直到到达所述叶节点,由此来执行基于所述检 索关键字的检索。
9. 根据权利要求8所述的比特序列检索方法,其特征在于,所述配 对节点树被存储在数组内,表示所述链接目的地的节点对中的一个节点 的位置的信息是存储有该节点的所述数组的数组要素的数组编号。
10. 根据权利要求9所述的比特序列检索方法,其特征在于,通过所述数组编号和所述检索关键字的鉴别比特位置的比特值的运算来求出 存储有链接目的地的节点的数组要素的数组编号。
11. 根据权利要求8 10所述的比特序列检索方法,其特征在于,将所述叶节点内包含的索引关键字和检索关键字进行比较,如果一致则 检索成功,如果不一致则检索失败。
12. —种程序,该程序用于使计算机执行权利要求8 11所述的比 特序列检索方法。
13. —种程序,该程序用于使计算机执行权利要求6所述的索引关 键字插入方法。
14. 一种程序,该程序用于使计算机执行权利要求7所述的索引关 键字删除方法。
15. —种数据结构,该数据结构是用于比特序列检索的树状的数据 结构,其特征在于,该数据结构由根节点、以及配置在相邻的存储区域内的分支节点和 叶节点或分支节点之间或叶节点之间的节点对构成,所述根节点是表示所述树的起点的节点,当该树的节点为1个时所 述根节点是所述叶节点,当该树的节点为2个以上时所述根节点是所述分支节点,所述分支节点包含表示进行比特序列检索的检索关键字的鉴别比特位置和链接目的地的节点对中的一个节点的位置的信息,所述叶节点包含由检索对象的比特序列构成的索引关键字,在包含所述根节点的所述分支节点中,根据该分支节点内包含的鉴别比特位置的检索关键字的比特值依次重复进行链接到链接目的地的节点对中的任一节点的动作直到到达所述叶节点,从而可执行基于所述检索关键字的检索。
16.根据权利要求15所述的数据结构,其特征在于,所述数据结构被存储在数组内,表示所述链接目的地的节点对中的一个节点的位置的信息是存储有该节点的所述数组的数组要素的数组编号。
全文摘要
本发明提供一种具有如下的数据结构的比特序列检索方法,该数据结构是检索对象的比特序列的数据结构,所需要的存储容量小,检索速度高,数据维护容易,该比特序列检索方法具有配对节点树,该树由根节点、以及配置在相邻的存储区域内的分支节点和叶节点或分支节点之间或叶节点之间的节点对构成,分支节点包含表示检索关键字的鉴别比特位置和链接目的地的节点对中的一个节点的位置的信息,叶节点包含由检索对象的比特序列构成的索引关键字,在从根节点到分支节点中,根据分支节点内包含的鉴别比特位置的检索关键字的比特值依次重复进行链接到链接目的地的节点对中的任一节点的动作直到到达叶节点,来执行基于检索关键字的索引关键字的检索。
文档编号G06F17/30GK101484895SQ20078002556
公开日2009年7月15日 申请日期2007年6月15日 优先权日2006年7月7日
发明者新庄敏男 申请人:新叶股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1