比特序列检索方法以及程序转让专利

申请号 : CN200880022892.8

文献号 : CN101689204A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 新庄敏男国分光裕

申请人 : 新叶股份有限公司

摘要 :

本发明提供适于处理无关比特的检索方法。配对节点树由根节点、以及配置在相邻存储区域中的分支节点和叶节点、或者分支节点之间或叶节点之间的节点对构成。分支节点包含被编码为识别无关比特和有效比特的、用于进行比特序列检索的检索关键字的鉴别比特位置、和表示作为链接目的地节点对中的一个节点的代表节点的位置的位置信息。叶节点包含由已编码/未编码状态的比特序列构成的索引关键字。依次反复在分支节点中根据鉴别比特位置的检索关键字的比特值,来链接到链接目的地节点对中的任意一个节点,直至到达叶节点为止,并根据需要对到达叶节点的路径进行追溯,由此来进行考虑了无关比特的检索。

权利要求 :

1.一种比特序列检索方法,该方法采用了配对节点树,该配对节点 树是用于比特序列检索的树,由根节点、以及配置在相邻存储区域中的 分支节点和叶节点、或者分支节点之间或叶节点之间的节点对构成,上述根节点是表示树的起点的节点,当该树的节点为一个时上述根 节点是上述叶节点,当树的节点为两个以上时上述根节点是上述分支节 点,上述分支节点包含用于进行比特序列检索的检索关键字的鉴别比特 位置、和表示作为链接目的地节点对中的一个节点的代表节点的位置的 位置信息,上述叶节点包含由检索对象比特序列构成的索引关键字,

该比特序列检索方法的特征在于,

上述索引关键字由对前方有效比特序列进行编码后的编码比特序列 构成,所述前方有效比特序列是以下比特序列中的任意一种:仅由有效 比特构成的比特序列、仅由与比特值无关的无关比特构成的比特序列、 或者在1比特以上的有效比特上连接了1比特以上的无关比特的比特序 列,上述检索关键字由对前方有效比特序列进行编码后的编码比特序列 构成,上述编码比特序列是由识别比特和数据比特的比特对构成的比特序 列,该比特对是与构成上述前方有效比特序列的各比特对应的比特对, 该识别比特表示该比特是无关比特还是有效比特,该数据比特在该比特 是无关比特时为预定值,在该比特是有效比特时表示该比特的值,上述比特序列检索方法具有以下步骤:

初始检索步骤,将上述配对节点树的任意部分树的根节点作为检索 开始节点,一边依次反复下述动作:在上述分支节点中根据该分支节点 所包含的鉴别比特位置的上述检索关键字的比特值,来链接到链接目的 地节点对的代表节点或与该代表节点成对的非代表节点,一边通过至少 存储上述鉴别比特位置相当于在上述编码比特序列中识别比特所在的位 置的分支节点的地址信息,来存储链接搜索的路径,直至到达上述叶节 点为止;

索引关键字取得步骤,从利用上述初始检索步骤到达的上述叶节点 中取得索引关键字;

差分比特位置取得步骤,在上述取得的上述索引关键字与上述检索 关键字之间,在从比特序列开头到下述两种位置中任意一个更接近上述 编码比特序列开头的比特位置的范围内,进行比特序列比较,取得成为 不同比特值的开头比特位置作为差分比特位置,该两种位置是:上述取 得的上述索引关键字中对末尾有效比特进行编码后的比特对的位置、和 上述检索关键字中对开头无关比特进行编码后的比特对的位置;

第1最长一致关键字取得步骤,如果上述取得的上述索引关键字与 上述检索关键字在上述范围内一致,则取得上述取得的上述索引关键字 作为最长一致关键字;

分支节点选择步骤,作为上述比较结果,如果上述取得的上述索引 关键字与上述检索关键字不一致,则针对上述路径上满足下述条件的分 支节点中,选择上述鉴别比特位置为最接近上述编码比特序列末尾的比 特位置的分支节点,上述条件是:鉴别比特位置相当于在上述编码比特 序列中识别比特所在的位置、并且该鉴别比特位置是比上述差分比特位 置更接近上述编码比特序列开头的比特位置;以及第2最长一致关键字取得步骤,针对从上述选择的上述分支节点链 接到的节点对中,取得终端侧节点中包含的索引关键字作为最长一致关 键字,其中所述终端侧节点是对应于表示上述无关比特的上述识别比特 值而链接的叶节点。

2.根据权利要求1所述的比特序列检索方法,其特征在于,

上述叶节点的上述索引关键字不是由上述编码比特序列而是由编码 前的上述前方有效比特序列构成,在上述差分比特位置取得步骤以及上述第1最长一致关键字取得步 骤中,取代上述取得的上述索引关键字,而是将对上述取得的上述索引 关键字进行编码后的编码比特序列与上述检索关键字进行比较。

3.根据权利要求1所述的比特序列检索方法,其特征在于,

在上述初始检索步骤中存储上述路径时,除了存储上述分支节点的 上述位置信息之外,还存储表示从该分支节点链接到的节点对中的非终 端侧节点的位置的位置信息,该非终端侧节点是对应于表示上述有效比 特的上述识别比特的值而链接到的节点。

4.根据权利要求3所述的比特序列检索方法,其特征在于,

在上述第2最长一致关键字取得步骤中,根据所存储的上述非终端 侧节点的上述位置信息,来求出与该非终端侧节点构成节点对的上述终 端侧节点的位置信息。

5.根据权利要求1所述的比特序列检索方法,其特征在于,

上述路径存储在堆栈中。

6.根据权利要求1所述的比特序列检索方法,其特征在于,上述配 对节点树存储在数组中,上述分支节点所包含的上述位置信息是上述数 组的存储有与该位置信息对应的上述代表节点的数组元素的数组编号。

7.一种插入方法,该方法在配对节点树中插入包含由希望比特序列 构成的索引关键字的叶节点,该配对节点树是用于比特序列检索的树, 由根节点、以及配置在相邻存储区域中的分支节点和叶节点、或者分支 节点之间或叶节点之间的节点对构成,上述根节点是表示树的起点的节点,当该树的节点为一个时上述根 节点是上述叶节点,当树的节点为两个以上时上述根节点是上述分支节 点,上述分支节点包含用于进行比特序列检索的检索关键字的鉴别比特 位置、和表示作为链接目的地节点对中的一个节点的代表节点的位置的 位置信息,上述叶节点包含由检索对象比特序列构成的索引关键字,

该插入方法的特征在于,

上述索引关键字由对前方有效比特序列进行编码后的编码比特序列 构成,所述前方有效比特序列是以下比特序列中的任意一种:仅由有效 比特构成的比特序列、仅由与比特值无关的无关比特构成的比特序列、 或者在1比特以上的有效比特上连接了1比特以上的无关比特的比特序 列,上述检索关键字由对前方有效比特序列进行编码后的编码比特序列 构成,上述编码比特序列是由识别比特和数据比特的比特对构成的比特序 列,该比特对是与构成上述前方有效比特序列的各比特对应的比特对, 该识别比特表示该比特是无关比特还是有效比特,该数据比特在该比特 是无关比特时为预定值,在该比特是有效比特时表示该比特的值,以编码比特序列或编码前的前方有效比特序列的形式指定作为编码 比特序列的上述希望比特序列,上述插入方法包含以下步骤:

在利用上述编码比特序列指定了上述希望比特序列的情况下,将指 定的该编码比特序列作为检索关键字;

在利用上述前方有效比特序列指定了上述希望比特序列的情况下, 对指定的上述前方有效比特序列进行编码而取得编码比特序列,并将取 得的该编码比特序列作为检索关键字;

从上述根节点开始依次一边存储路径一边反复下述动作:在上述分 支节点中根据该分支节点所包含的鉴别比特位置的上述检索关键字的比 特值,来链接到链接目的地节点对的代表节点或与该代表节点成对的非 代表节点,直至到达上述叶节点为止;

在上述叶节点的索引关键字与上述检索关键字之间进行大小比较和 比特序列比较;

利用作为在上述比特序列比较中成为不同比特值的开头比特位置的 差分比特位置与上述路径上的分支节点的鉴别比特位置之间的相对位置 关系,来确定由待插入的上述叶节点和另一个节点构成的节点对的插入 位置;以及根据上述大小关系来确定将包含由上述希望比特序列构成的索引关 键字的上述叶节点作为待插入的上述节点对中的哪个节点。

8.根据权利要求7所述的插入方法,其特征在于,

上述叶节点的上述索引关键字不是由上述编码比特序列而是由上述 前方有效比特序列构成,在上述大小比较和上述比特序列比较之前对上述索引关键字进行编 码而取得编码比特序列,取代在上述叶节点的索引关键字与上述检索关 键字之间进行上述大小比较和上述比特序列比较,而在所取得的上述编 码比特序列与上述检索关键字之间进行上述大小比较和上述比特序列比 较。

9.根据权利要求7所述的插入方法,其特征在于,

上述配对节点树存储在数组中,上述分支节点所包含的上述位置信 息是上述数组的存储有与该位置信息对应的上述代表节点的数组元素的 数组编号。

10.一种删除方法,该方法从配对节点树中删除包含由希望比特序 列构成的索引关键字的叶节点,该配对节点树是用于比特序列检索的树, 由根节点、以及配置在相邻存储区域中的分支节点和叶节点、或者分支 节点之间或叶节点之间的节点对构成,上述根节点是表示树的起点的节点,当该树的节点为一个时上述根 节点是上述叶节点,当树的节点为两个以上时上述根节点是上述分支节 点,上述分支节点包含用于进行比特序列检索的检索关键字的鉴别比特 位置、和表示作为链接目的地节点对中的一个节点的代表节点的位置的 位置信息,上述叶节点包含由检索对象比特序列构成的索引关键字,

该删除方法的特征在于,

上述索引关键字由对前方有效比特序列进行编码后的编码比特序列 构成,所述前方有效比特序列是以下比特序列中的任意一种:仅由有效 比特构成的比特序列、仅由与比特值无关的无关比特构成的比特序列、 或者在1比特以上的有效比特上连接了1比特以上的无关比特的比特序 列,上述检索关键字由对前方有效比特序列进行编码后的编码比特序列 构成,上述编码比特序列是由识别比特和数据比特的比特对构成的比特序 列,该比特对是与构成上述前方有效比特序列的各比特对应的比特对, 该识别比特表示该比特是无关比特还是有效比特,该数据比特在该比特 是无关比特时为预定值,在该比特是有效比特时表示该比特的值,以编码比特序列或编码前的前方有效比特序列的形式指定作为编码 比特序列的上述希望比特序列,上述删除方法包含以下步骤:

在利用上述编码比特序列指定了上述希望比特序列的情况下,将指 定的该编码比特序列作为检索关键字;

在利用上述前方有效比特序列指定了上述希望比特序列的情况下, 对指定的上述前方有效比特序列进行编码而取得编码比特序列,并将取 得的该编码比特序列作为检索关键字;

从上述根节点开始依次反复下述动作:在上述分支节点中根据该分 支节点所包含的鉴别比特位置的上述检索关键字的比特值,来链接到链 接目的地节点对的代表节点或与该代表节点成对的非代表节点,直至到 达上述叶节点为止;

将与上述叶节点构成节点对的节点的内容存储在该节点对的链接源 分支节点中;以及删除该节点对。

11.根据权利要求10所述的删除方法,其特征在于,

上述叶节点的上述索引关键字不是由上述编码比特序列而是由上述 前方有效比特序列构成。

12.根据权利要求10所述的删除方法,其特征在于,

上述配对节点树存储在数组中,上述分支节点所包含的上述位置信 息是上述数组的存储有与该位置信息对应的上述代表节点的数组元素的 数组编号。

13.一种程序,其特征在于,用于使计算机执行权利要求1~6中任 一项所述的比特序列检索方法。

14.一种程序,其特征在于,用于使计算机执行权利要求7~9中任 一项所述的插入方法。

15.一种程序,其特征在于,用于使计算机执行权利要求10~12中 任一项所述的删除方法。

16.一种树状的数据结构,该数据结构用于比特序列检索,其特征 在于,该树由根节点、以及配置在相邻存储区域中的分支节点和叶节点、 或者分支节点之间或叶节点之间的节点对构成,上述根节点是表示树的起点的节点,当该树的节点为一个时上述根 节点是上述叶节点,当树的节点为两个以上时上述根节点是上述分支节 点,上述分支节点包含用于进行比特序列检索的检索关键字的鉴别比特 位置、和表示作为链接目的地节点对中的一个节点的代表节点的位置的 位置信息,上述叶节点包含由检索对象比特序列构成的索引关键字,

上述索引关键字由前方有效比特序列或者对前方有效比特序列进行 编码后的编码比特序列构成,所述前方有效比特序列是以下比特序列中 的任意一种:仅由有效比特构成的比特序列、仅由与比特值无关的无关 比特构成的比特序列、或者在1比特以上的有效比特上连接了1比特以 上的无关比特的比特序列,上述检索关键字由对前方有效比特序列进行编码后的编码比特序列 构成,上述编码比特序列是由识别比特和数据比特的比特对构成的比特序 列,该比特对是与构成上述前方有效比特序列的各比特对应的比特对, 该识别比特表示该比特是无关比特还是有效比特,该数据比特在该比特 是无关比特时为预定值,在该比特是有效比特时表示该比特的值,该数据结构使得能够进行如下的检索:将任意的节点作为检索开始 节点,并依次反复下述动作:在上述分支节点中根据该分支节点所包含 的鉴别比特位置的上述检索关键字的比特值,来链接到链接目的地节点 对的代表节点或与该代表节点成对的非代表节点,直至到达上述叶节点 为止,由此执行基于上述检索关键字的检索。

17.根据权利要求16所述的数据结构,其特征在于,

上述数据结构存储在数组中,上述分支节点所包含的上述位置信息 是上述数组的存储有与该位置信息对应的上述代表节点的数组元素的数 组编号。

说明书 :

技术领域

本发明涉及采用存储比特序列的树状数据结构从比特序列集合中检 索希望的比特序列的技术。

背景技术

近年,社会的信息化不断发展,大规模的数据库在各处被利用起来。 为了从这种大规模的数据库中检索记录,通常是将与存储有各记录的地 址相对应的记录内的项目作为索引关键字来进行检索,检索出期望的记 录。并且,全文检索中的字符串也可视为文档的索引关键字。
而且,由于这些索引关键字利用比特序列来表达,因而数据库的检 索可归结于比特序列的检索。
为了高速进行上述比特序列的检索,一直以来对存储比特序列的数 据结构进行了各种研究。作为这种研究之一,公知的是Patricia树这样的 树结构。
图1示出在上述现有的检索处理中使用的Patricia树的一例。Patricia 树的节点构成为包含索引关键字、检索关键字的检查比特位置、以及左 右的链接指针。虽未作明示,当然在节点内包含有用于对与索引关键字 对应的记录进行访问的信息。
在图1的例子中,保持索引关键字“100010”的节点1750a是根节点, 其检查比特位置1730a是0。节点1750a的左链接1740a与节点1750b连 接,右链接1741a与节点1750f连接。
节点1750b保持的索引关键字是“010011”,检查比特位置1730b是1。 节点1750b的左链接1740b与节点1750c连接,右链接1741b与节点1750d 连接。节点1750c保持的索引关键字是“000111”,检查比特位置1730c是 3。节点1750d保持的索引关键字是“011010”,检查比特位置1730d是2。
从节点1750c用实线连接的部分表示节点1750c的左右链接指针, 未进行虚线连接的左指针1740c表示该栏是空栏。进行了虚线连接的右 指针1741c的虚线的链接目的地表示指针所指向的地址,在这里表示右 指针1741c指向节点1750c。
节点1750d的右指针1741d指向节点1750d自身,左链接1740d与 节点1750e连接。节点1750e保持的索引关键字是“010010”,检查比特位 置1730e是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。
在图1的例子中,形成这样的结构:随着从根节点1750a开始对树 进行向下遍历,各节点的检查比特位置增大。
当使用某检索关键字进行检索时,从根节点依次检查由各节点所保 持的检索关键字的检查比特位置,判定检查比特位置的比特值是1还是0, 是1时搜索右链接,是0时搜索左链接。然后,当链接目的地节点的检 查比特位置不大于链接源节点的检查比特位置时,即,链接目的地不是 下方而是回到上方时(将图1中虚线所示的该后退的链接称为反向链接), 对链接目的地节点的索引关键字与检索关键字进行比较。能够保证在比 较结果是相同时检索成功,在比较结果是不相同时检索失败。
如上所述,在使用Patricia树的检索处理中,有以下等优点:只通过 必要比特的检查即可进行检索,以及关键字全体的比较只需一次,然而 具有以下等缺点:由于必定有从各节点起的2个链接而使存储容量增大, 由于反向链接的存在而使判定处理复杂化,由于反向链接而返回、从头 开始与索引关键字进行比较而造成的检索处理延迟以及追加删除等数据 维护困难。
作为解决Patricia树的这些缺点的技术,例如有下述专利文献1所公 开的技术。在下述专利文献1所记载的Patricia树中,通过在连续的区域 中存储下位的左右节点来削减指针的存储容量,并通过在各节点中设置 表示下一链接是否是反向链接的比特来减轻反向链接的判定处理。
然而,在下述专利文献1所公开的技术中,由于1个节点必定占据 索引关键字的区域和指针的区域,将下位的左右节点存储在连续的区域 中而采用1个指针,因而对于例如图1所示的Patricia树的最下段部分即 左指针1740c、右指针1741h等部分,也必须分配与节点相同容量的存储 区域,存储容量的削减效果不怎么好。并且,也没有改善反向链接引起 的检索处理的延迟问题,并且很难进行追加删除等处理。
作为解决上述现有检索方法中的问题点的方案,本申请人在日本专 利申请特愿2006-187827中提出了使用配对节点树的比特序列检索,该 配对节点树是由根节点、和在相邻的存储区域中配置的分支节点和叶节 点或者分支节点之间或叶节点之间的节点对构成的比特序列检索用的 树,根节点是表示树的起点的节点,在该树的节点为一个时,根节点为 叶节点,在树的节点为两个以上时,根节点为上述分支节点,上述分支 节点包含进行比特序列检索的检索关键字的鉴别比特位置和表示作为链 接目的地节点对中的一个节点的代表节点的位置的位置信息,上述叶节 点包含由检索对象比特序列构成的索引关键字。
在上述申请中,示出了根据给定的索引关键字的集合来生成配对节 点树的方法、以及从配对节点树检索单个索引关键字的方法等使用配对 节点树的基本检索方法。另外,还说明了利用索引关键字的集合来唯一 地规定配对节点树的结构、和在配对节点树上对索引关键字进行排序配 置。
并且,在比特序列的检索中,存在求出最小值、最大值或求出某个 范围的值等各种检索要求。因此,本申请人在日本专利申请特愿 2006-293619中提出了求出配对节点树的任意部分树中包含的索引关键 字的最大值/最小值的方法、以及以升序或降序的方式取出存储在配对节 点树中的索引关键字的方法等。
此外,还有如下的检索需要:即使不存在与作为检索关键字给定的 比特序列完全一致的索引关键字,如果存在与检索关键字部分一致的索 引关键字,也希望取得该索引关键字作为检索结果。因此,本申请人在 日本专利申请特愿2007-132289中提出了采用配对节点树的最长一致检 索和最短一致检索的方法。
另外,在上述各申请中还公开了如下的处理:将配对节点树配置在 数组中;以及在搜索路径堆栈依次保存在上述提出的各检索处理中从检 索开始节点起的树上的搜索路径的节点的数组编号,并使用搜索路径堆 栈中保存的数组编号。
另一方面,由于使用比特序列的处理不同,有时希望将一部分比特 不当作有效比特而当作无关比特。例如,在路由器的路由表检索中,对 于表示IP(Internet Protocol:互联网协议)地址的比特序列,希望将网络地 址部分当作有效比特,将主机地址部分当作无关比特。
在专利文献2中记载了使采用了Patricia树的最长一致检索高速化的 最长一致检索电路,并图示了Patricia树的节点与包含无关比特的比特序 列之间的对应关系。另外,在专利文献2中还记载了该最长一致检索电 路应用于路由表检索系统的情况。
另一方面,不仅IP地址,在各种分类代码等中,也存在比特序列的 值与比特序列所表示的内容的层级分类对应、更上位的比特表示更上位 的分类的情况。在使用这种比特序列的检索中,存在希望将下位的一部 分比特是无关比特的比特序列作为检索关键字进行检索的情况。
这是因为有时希望了解如下的情况:是否存在相当于被指定为检索 关键字的比特序列的分类作为索引关键字,在不存在的情况下,与检索 关键字所表示的分类最接近的分类(即,在包含相当于被指定为检索关 键字的比特序列的分类的上位分类中最下位的分类)是什么。
这样,希望在考虑无关比特的同时进行最长一致检索。另外,即使 在一般的字符串检索等中,也需要通过允许用作检索关键字的比特序列 和作为检索对象的索引关键字双方都包含无关比特的检索来实现更灵活 的检索。
另一方面,用于高速进行最长一致检索的现有方法需要复杂的前处 理,数据维护的成本较大。尚未公知满足能进行考虑了无关比特的最长 一致检索、检索高速且维护成本低这些全部条件的方法。
例如,在专利文献3所记载的IP地址检索表作成方法中,在第1条 目的IP地址范围包含第2条目的IP地址范围的情况下,将第1条目分解 成第1条目所包含的第3条目和第4条目,并删除第1条目。然后,将 第3条目和第4条目分别与第2条目进行比较,删除一致的分解条目。
一边利用子网掩码将值为″1″的范围逐次增加1比特,一边反复进行 分解,直到分解条目与第2条目一致为止。通过分解消除了两个条目间 的包含关系,因此在基于硬件的高速检索装置中,能够始终正确地执行 最长一致检索。但是,每当进行条目的追加或删除时包含关系发生变动, 因此数据维护的成本较高。
另外,在专利文献4中记载了使自然语言处理中单词词典等的最长 一致检索高速化的方法。在此方法中,首先按照关键字项目(登记在词典 中的单词)以升序的方式对记录群进行排序。然后,针对各记录在该记录 之前的记录中,将具有与该记录的关键字条目最长一致的关键字条目的 记录的编号设定为“下一指针”。
这样当使用设定有下一指针的词典时,使用检索关键字进行二进制 搜索,将其检索结果的记录中的关键字项目与检索关键字进行比较,如 果不一致则依次搜索下一指针,由此可进行最长一致检索。这样既能发 挥二进制搜索的高速性又能进行最长一致检索。但是,每当进行记录的 追加或删除时,都需要重新设定记录编号及下一指针。
专利文献1:日本特开2001-357070号公报
专利文献2:日本特开2003-224581号公报
专利文献3:日本特开平11-103318号公报
专利文献4:日本特开平10-177582号公报

发明内容

因此,本发明的目的在于,能够发挥配对节点树的能高速检索且数 据维护成本较低的优点,并且以在比有效比特上位的位置上不存在无关 比特为前提,使用包含无关比特的比特序列来检索包含索引关键字的配 对节点树,该索引关键字表示包含无关比特的比特序列。
根据本发明提供了具有以下数据结构的配对节点树,采用该配对节 点树进行检索。另外,根据本发明提供了对该配对节点树进行与所指定 的比特序列对应的叶节点的插入和删除的方法。
本发明的配对节点树是用于比特序列检索的树,由根节点、以及配 置在相邻存储区域中的分支节点和叶节点、或者分支节点之间或叶节点 之间的节点对构成。
上述根节点是表示树的起点的节点,当该树的节点为一个时上述根 节点是上述叶节点,当树的节点为两个以上时上述根节点是上述分支节 点。
上述分支节点包含用于进行比特序列检索的检索关键字的鉴别比特 位置、和表示作为链接目的地节点对中的一个节点的代表节点的位置的 位置信息,上述叶节点包含由检索对象比特序列构成的索引关键字。
上述索引关键字由对前方有效比特序列进行编码后的编码比特序列 构成,该前方有效比特序列是仅由有效比特构成的比特序列、仅由与比 特值无关的无关比特构成的比特序列、或者在1比特以上的有效比特上 连接了1比特以上的无关比特的比特序列中的任意一种。
上述检索关键字由对前方有效比特序列进行编码后的编码比特序列 构成。
上述编码比特序列是由识别比特和数据比特的比特对构成的比特序 列,该比特对是与构成上述前方有效比特序列的各比特对应的比特对, 该识别比特表示该比特是无关比特还是有效比特,该数据比特在该比特 是无关比特时为预定值,在该比特是有效比特时表示该比特的值。
有时将编码前的前方有效比特序列称为源比特序列,有时也将与作 为编码比特序列的索引关键字和检索关键字对应的编码前的前方有效比 特序列分别称为源索引关键字和源检索关键字。
这样的配对节点树的检索可如下地进行。
首先,在初始检索步骤中,将上述配对节点树的任意部分树的根节 点作为检索开始节点,一边依次反复下述动作:在上述分支节点中根据 该分支节点所包含的鉴别比特位置的上述检索关键字的比特值,来链接 到链接目的地节点对的代表节点或与该代表节点成对的非代表节点,一 边通过至少存储上述鉴别比特位置相当于在上述编码比特序列中识别比 特所存在的位置的分支节点的地址信息,来存储链接搜索的路径,直至 到达上述叶节点为止;
然后在索引关键字取得步骤中,从利用上述初始检索步骤到达的上 述叶节点中取得索引关键字。
接着在差分比特位置取得步骤中,在上述取得的上述索引关键字与 上述检索关键字之间,在从比特序列开头到下述两种位置中任一个更接 近上述编码比特序列开头的比特位置的范围内,进行比特序列比较,取 得成为不同比特值的开头比特位置作为差分比特位置,该两种位置是: 上述取得的上述索引关键字中对末尾有效比特进行编码后的比特对的位 置、和上述检索关键字中对开头无关比特进行编码后的比特对的位置。
然后,在第1最长一致关键字取得步骤中,如果上述取得的上述索 引关键字与上述检索关键字在上述范围内一致,则取得上述取得的上述 索引关键字作为最长一致关键字。
作为上述比较结果,如果上述取得的上述索引关键字与上述检索关 键字不一致,则在分支节点选择步骤中,针对上述路径上满足下述条件 的分支节点中,选择上述鉴别比特位置为最接近上述编码比特序列末尾 的比特位置的分支节点,上述条件是:鉴别比特位置相当于在上述编码 比特序列中识别比特所在的位置、并且该鉴别比特位置是比上述差分比 特位置更接近上述编码比特序列开头的比特位置。然后在第2最长一致 关键字取得步骤中,针对从上述选择的上述分支节点链接出的节点对中, 取得终端侧节点中包含的索引关键字作为最长一致关键字,其中终端侧 节点是对应于表示上述无关比特的上述识别比特值而链接的叶节点。
此外,上述叶节点的上述索引关键字可以不是由上述编码比特序列 而是由编码前的上述前方有效比特序列构成。
在该情况下,在上述差分比特位置取得步骤以及上述第1最长一致 关键字取得步骤中,取代上述取得的上述索引关键字,而是将对上述取 得的上述索引关键字进行编码后的编码比特序列与上述检索关键字进行 比较。
另外,为了在上述配对节点树中插入包含由作为编码比特序列的希 望比特序列构成的索引关键字的叶节点,而进行以下处理,该希望比特 序列利用编码比特序列或编码前的前方有效比特序列的形式来指定。
首先,在利用上述编码比特序列指定了上述希望比特序列的情况下, 将指定的该编码比特序列作为检索关键字,在利用上述前方有效比特序 列指定了上述希望比特序列的情况下,对所指定的上述前方有效比特序 列进行编码而取得编码比特序列,并将取得的该编码比特序列作为检索 关键字。
然后,从上述根节点开始依次一边存储路径,一边反复下述动作: 在上述分支节点中根据该分支节点所包含的鉴别比特位置的检索关键字 的比特值,来链接到链接目的地节点对的代表节点或与该代表节点成对 的非代表节点,直至到达上述叶节点为止。
接着,在上述叶节点的索引关键字和上述检索关键字之间进行大小 比较和比特序列比较。
此外,利用作为在上述比特序列比较中成为不同比特值的开头比特 位置的差分比特位置与上述路径上的分支节点的鉴别比特位置之间的相 对位置关系,来确定由待插入的上述叶节点和另一个节点构成的节点对 的插入位置。
然后,通过上述大小关系来确定将包含由上述希望比特序列构成的 索引关键字的上述叶节点作为待插入的上述节点对中的哪个节点。
此外,上述叶节点的上述索引关键字可以不是由上述编码比特序列 而是由上述前方有效比特序列构成。
在该情况下,在上述大小比较和上述比特序列比较之前对上述索引 关键字进行编码而取得编码比特序列,取代在上述叶节点的索引关键字 与上述检索关键字之间进行上述大小比较和上述比特序列比较,而在所 取得的上述编码比特序列与上述检索关键字之间进行上述大小比较和上 述比特序列比较。
另外,为了从上述配对节点树中删除包含表示作为编码比特序列的 希望比特序列的索引关键字的叶节点,执行以下处理,该希望比特序列 利用编码比特序列或编码前的前方有效比特序列的形式来指定。
首先,在利用上述编码比特序列指定了上述希望比特序列的情况下, 将指定的该编码比特序列作为检索关键字,在利用上述前方有效比特序 列指定了上述希望比特序列的情况下,对指定的上述前方有效比特序列 进行编码而取得编码比特序列,并将取得的该编码比特序列作为检索关 键字。
然后,从上述根节点开始依次反复下述动作:在上述分支节点中根 据该分支节点所包含的鉴别比特位置的检索关键字的比特值,来链接到 链接目的地节点对的代表节点或与该代表节点成对的非代表节点,直至 到达上述叶节点为止。
接着,将与上述叶节点构成节点对的节点的内容存储在该节点对的 链接源分支节点中。然后,删除该节点对。
另外,根据本发明还提供使计算机执行上述检索方法、插入方法以 及删除方法的程序。
无关比特的值不唯一地确定,无法根据不唯一确定值的比特通过分 支节点来唯一地确定链接目的地。因此在本发明中,如上所述利用编码 后的检索关键字。
根据本发明,对于编码前的前方有效比特序列中的无关比特,在作 为编码比特序列的检索关键字中也被编码成具有唯一值的比特。另外, 不管叶节点所包含的索引关键字是编码比特序列还是编码前的前方有效 比特序列,在本发明中,分支节点的鉴别比特位置都表示处于已编码状 态的比特的位置。
由此,即使作为检索关键字的源的编码前的前方有效比特序列包含 无关比特,根据本发明,也能够在分支节点中唯一地确定链接目的地并 进行检索。
另外,利用本发明的检索方法,作为最长一致关键字取得的索引关 键字表示下述比特序列的集合,即,无论作为检索关键字的源的编码前 的前方有效比特序列的无关比特具体取什么值,都始终包含对无关比特 设定了值的该比特序列。
由此,本发明的配对节点树适合于使用包含无关比特的比特序列的 检索。
另外,可利用上述插入方法来生成本发明的配对节点树,可利用上 述插入方法和删除方法来维护本发明的配对节点树。
此外,在由节点对构成、分支节点包含鉴别比特位置和位置信息、 叶节点包含索引关键字的方面,本发明的配对节点树与在先申请的配对 节点树的结构类似。这些与在先申请的配对节点树类似的结构也是能高 速检索并低成本地进行插入和删除等的、配对节点树特征的因素。
因此,根据本发明能够提供一种既具有检索高速、节点插入和删除 所需的计算成本较低这样的优点,又适于使用包含无关比特的比特序列 的检索的配对节点树。

附图说明

图1是示出在现有检索中采用的Patricia树的一例的图。
图2A是说明存储在数组中的配对节点树的结构例的图。
图2B是概念性地示出配对节点树的树结构的图。
图3是说明用于实施本发明的硬件结构例的图。
图4是示出一实施方式的检索处理的流程图。
图5是概念性地示出利用了编码比特序列的配对节点树的树结构的 图。
图6是示出一实施方式的检索处理的流程图。
图7是示出一实施方式的编码处理的流程图。
图8是检索处理的初始检索的流程图。
图9是求出差分比特位置的处理的流程图。
图10是示出差分比特位置的例子的图。
图11是在检索处理中求出最长一致关键字的处理的流程图。
图12是示出一实施方式的插入处理的流程图。
图13A是作为插入处理前级的检索处理的流程图。
图13B是说明准备用于待插入节点对的数组元素的处理的流程图。
图13C是求出插入节点对的位置、写入节点对的各节点的内容来完 成插入处理的流程图。
图14是示出一实施方式的删除处理的流程图。
图15A是作为删除处理前级的检索处理的流程图。
图15B是示出删除处理后级的流程图。

具体实施方式

首先,关于本申请人在之前的上述申请中提出的作为本发明前提的 配对节点树,说明将配对节点树存储在数组中的例子。作为分支节点所 保持的表示链接目的地位置的数据,也可以是存储装置的地址信息,不 过使用由可存储分支节点或叶节点中所占区域的存储容量较大一方的数 组元素构成的数组,可以利用数组编号来表示节点位置,可以削减位置 信息的信息量。
图2A是说明存储在数组中的配对节点树的结构例的图。
参照图2A,节点101配置在数组100的数组编号为10的数组元素 中。节点101由节点类别102、鉴别比特位置103以及代表节点编号104 构成。节点类别102是0,表示节点101是分支节点。在鉴别比特位置 103中存储有1。在代表节点编号104中存储有链接目的地节点对的代表 节点的数组编号20。另外,以下为了简化说明,有时把存储在代表节点 编号中的数组编号称为代表节点编号。并且,有时利用赋予给该节点的 标号或赋予给节点对的标号来表示存储在代表节点编号中的数组编号。
在数组编号20的数组元素中存储有节点对111的代表节点即节点 [0]112。然后在相邻的下一数组元素(数组编号20+1)中存储有与代表 节点成对的节点[1]113。在节点[0]112的节点类别114中存储有0,在鉴 别比特位置115中存储有3,在代表节点编号116中存储有30。并且, 在节点[1]113的节点类别117中存储有1,表示节点[1]113是叶节点。在 索引关键字118中存储有“0001”。与之前针对Patricia树描述的一样,当 然在叶节点内包含有对与索引关键字对应的记录进行访问的信息,然而 省略说明。
另外,有时用节点[0]表示代表节点,用节点[1]表示与其成对的节点。 此外,有时将存储在某个数组编号的数组元素中的节点称为该数组编号 的节点,将存储有节点的数组元素的数组编号称为节点的数组编号。
省略了由存储在数组编号30和31的数组元素中的节点122和节点 123构成的节点对121的内容。
分别赋予给存储有节点[0]112、节点[1]113、节点122以及节点123 的数组元素的0或1表示在使用检索关键字进行检索的情况下链接到节 点对中的哪个节点。链接到位于前级分支节点的鉴别比特位置处的检索 关键字的比特值0或1与代表节点编号相加所得到的数组编号的节点上。
因此,通过将前级分支节点的代表节点编号与检索关键字的鉴别比 特位置的比特值相加,可求出存储有链接目的地节点的数组元素的数组 编号。
另外,在上述例子中代表节点编号采用配置有节点对的数组编号中 的小的一方,然而显然也可采用大的一方。
图2B是概念性地示出配对节点树的树结构的图。图示的6比特的索 引关键字与图1所例示的Patricia树的索引关键字相同。
标号210a所示的是根节点。在图示的例子中,根节点210a成为配 置在数组编号220上的节点对201a的代表节点。
作为树结构,在根节点210a之下配置有节点对201b,在节点对201b 的下层配置有节点对201c和节点对201f,在节点对201f的下层配置有节 点对201h和节点对201g。在节点对201c之下配置有节点对201d,并在 节点对201d之下配置有节点对201e。
附在各节点前面的标号0或1与在图2A中说明的附在数组元素前面 的标号相同。根据检索关键字的鉴别比特位置的比特值来搜索树,从而 找到检索对象叶节点。
在图示的例子中,根节点210a的节点类别260a是0,表示是分支节 点,鉴别比特位置230a示为0。代表节点编号是220a,该编号是存储了 节点对201b的代表节点210b的数组元素的数组编号。
节点对201b由节点210b和211b构成,它们的节点类别260b、261b 都是0,表示是分支节点。在节点210b的鉴别比特位置230b上存储有1, 在链接目的地的代表节点编号中存储有存储了节点对201c的代表节点 210c的数组元素的数组编号220b。
由于在节点210c的节点类别260c中存储有1,因而该节点是叶节点, 因此包含索引关键字250c。在索引关键字250c中存储有“000111”。另一 方面,节点211c的节点类别261c是0,鉴别比特位置231c是2,在代表 节点编号中存储有存储了节点对201d的代表节点210d的数组元素的数 组编号221c。
节点210d的节点类别260d是0,鉴别比特位置230d是5,在代表 节点编号中存储有存储了节点对201e的代表节点210e的数组元素的数 组编号220d。与节点210d成对的节点211d的节点类别261d是1,在索 引关键字251d中存储有“011010”。
节点对201e的节点210e、211e的节点类别260e、261e都是1,表 示双方都是叶节点,在各自的索引关键字250e、251e中存储有“010010” 和“010011”作为索引关键字。
在节点对201b的另一个节点即节点211b的鉴别比特位置231b中存 储有2,在链接目的地的代表节点编号中存储有存储了节点对201f的代 表节点210f的数组元素的数组编号221b。
节点对201f的节点210f、211f的节点类别260f、261f都是0,双方 都是分支节点。在各自的鉴别比特位置230f、231f中存储有5、3。在节 点210f的代表节点编号中存储有存储了节点对201g的代表节点210g的 数组元素的数组编号220f,在节点211f的代表节点编号中存储有存储了 节点对201h的代表节点即节点[0]210h的数组元素的数组编号221f。
节点对201g的节点210g、211g的节点类别260g、261g都是1,表 示双方都是叶节点,在各自的索引关键字250g、251g中存储有“100010” 和“100011”。
并且同样,节点对201h的代表节点即节点[0]210h和与其成对的节 点[1]211h的节点类别260h、261h都是1,表示双方都是叶节点,在各自 的索引关键字250h、251h中存储有“101011”和“101100”。
以下,简单说明从上述的树中检索索引关键字“100010”的处理流程。 鉴别比特位置从左起为0、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的比特值时是0,因此链接到在存储有 代表节点编号的数组编号220f的数组元素中存储的节点210g。
由于节点210g的节点类别260g是1,表示是叶节点,因而当读出索 引关键字250g并与检索关键字进行比较时,双方都是“100010”,是一致 的。这样进行使用配对节点树的检索。
下面,参照图2B说明配对节点树的结构的意义。
配对节点树的结构是由索引关键字的集合规定的。在图2B的例子 中,根节点210a的鉴别比特位置是0,这是因为在图2B所例示的索引关 键字中有第0比特是0的索引关键字以及第0比特是1的索引关键字。 第0比特是0的索引关键字的组被分类在节点210b之下,第0比特是1 的索引关键字的组被分类在节点211b之下。
节点211b的鉴别比特位置是2,这反映了索引关键字集合的性质, 即:存储在节点211h、210h、211g、210g中的第0比特是1的索引关键 字的第1比特全都是0,从第2比特开始才有不同。
以下与第0比特的情况一样,第2比特是1的索引关键字被分类在 节点211f侧,第2比特是0的索引关键字被分类在节点210f侧。
然后,由于第2比特是1的索引关键字中存在第3比特不同的索引 关键字,因而在节点211f的鉴别比特位置上存储3,由于在第2比特是0 的索引关键字中第3比特和第4比特均相同而第5比特不同,因而在节 点210f的鉴别比特位置中存储5。
在节点211f的链接目的地中,由于第3比特是1的索引关键字和第 3比特是0的索引关键字分别只有一个,因而节点210h、211h成为叶节 点,分别在索引关键字250h和251h中存储有“101011”和“101100”。
假设在索引关键字的集合内包含有“101101”或“101110”来取代 “101100”,但是到第3比特为止与“101100”相等,因而只是存储在节点 211h内的索引关键字改变,树结构自身不会改变。然而,当除了“101100” 以外还包含有“101101”时,节点211h成为分支节点,其鉴别比特位置成 为5。当所追加的索引关键字是“101110”时,鉴别比特位置为4。
如以上说明的那样,配对节点树的结构是由索引关键字集合中包含 的各索引关键字的各比特位置的比特值确定的。
进而也可以说,对于成为不同比特值的每个比特位置,分支为比特 值是“1”的节点和比特值是″0″的节点,所以当使节点“1”侧和树的深度方 向优先来搜索叶节点时,在它们中存储的索引关键字成为节点211h的索 引关键字251h的“101100”、节点210h的索引关键字250h的“101011”、...、 节点210c的索引关键字250c的“000111”,并以降序的方式排序。
即,在配对节点树中,对索引关键字进行排序而将其配置在树上。
当利用检索关键字进行检索时,搜索在配对节点树上配置了索引关 键字的根,例如,如果检索关键字是“101100”,则可到达节点211h。并 且,根据上述说明还可以想到,即使在将“101101”或“101110”作为检索关 键字的情况下,也可以搜索到节点211h,作为检索结果的索引关键字而 取得“101100”。
并且,例如在利用“100100”进行检索的情况下,在节点210a、211b、 210f的链接路径上不使用检索关键字的第3比特和第4比特、并且由于 “100100”的第5比特是0,所以与利用“100010”进行检索的情况同样,到 达节点210g。这样,使用与存储在配对节点树中的索引关键字的比特结 构对应的鉴别比特位置来进行分支。
图3是说明用于实施本发明的硬件结构例的图。
本发明的检索装置的检索处理和数据维护是通过至少具有中央处理 装置302和高速缓冲存储器303的数据处理装置301、使用数据存储装置 308来实施的。具有配置有配对节点树的数组309和搜索路径堆栈310的 数据存储装置308可使用主存储装置305或外部存储装置306来实现, 或者还可使用通过通信装置307连接的配置在远方的装置来实现,该搜 索路径堆栈310用于保存存储有在检索中搜索到的节点的数组元素的数 组编号。图1的数组100是数组309的一例。
在图3的例示中,主存储装置305、外部存储装置306以及通信装置 307通过一根总线304与数据处理装置301连接,不过连接方法不仅限于 此。另外,还可以使主存储装置305位于数据处理装置301内,或可以 将搜索路径堆栈310实现为中央处理装置302内的硬件。或者,显然可 以根据可使用的硬件环境、索引关键字集合的大小等,选择适当的硬件 结构,例如,使数组309位于外部存储装置306内、使搜索路径堆栈310 位于主存储装置305内等。
并且,尽管未作特别图示,但为了能在后面的处理中使用处理中途 所获得的各种值,当然可以使用与各个处理对应的临时存储装置。
接着,在为了理解本发明所需的范围内,介绍在上述申请中由本申 请人提出的采用了配对节点树的基本检索处理。
图4是示出在作为本申请人的申请的上述日本特愿2006-293619中 提出的比特序列检索的基本动作的流程图。
首先,在步骤S401中,取得检索开始节点的数组编号。与所取得的 数组编号对应的数组元素存储了构成配对节点树的任意节点。在后面说 明的各种应用检索中进行检索开始节点的指定。
接着,在步骤S402中,在搜索路径堆栈310中存储所取得的数组编 号,在步骤S403中,读出与该数组编号对应的数组元素作为应参照节点。 然后,在步骤S404中,从所读出的节点中取出节点类别,在步骤S405 中,判断节点类别是否是分支节点。
在步骤S405的判断中,在所读出的节点是分支节点的情况下进到步 骤S406,从节点中取出关于鉴别比特位置的信息,进而在步骤S407中, 从检索关键字中取出与所取出的鉴别比特位置对应的比特值。然后,在 步骤S408中,从节点中取出代表节点编号,在步骤S409中,将从检索 关键字中取出的比特值与代表节点编号相加,作为新的数组编号,返回 步骤S402。
然后,反复进行步骤S402~步骤S409的处理,直到在步骤S405的 判断中判定为叶节点而进到步骤S410。在步骤S410中,从叶节点中取出 索引关键字,结束处理。
此外,可通过反复进行插入叶节点的处理来生成配对节点树。根据 上述特愿2006-187827,在该插入处理中首先将所指定的插入关键字作 为检索关键字而从配对节点树中检索相应的叶节点。此时,在堆栈中依 次存储存储有到达该叶节点为止所搜索的路径上的分支节点以及该叶节 点的数组元素的数组编号。然后,在检索关键字与叶节点所包含的索引 关键字之间进行大小比较和比特序列比较。接着,根据在比特序列比较 中成为不同比特值的开头比特位置、与存储在堆栈中的分支节点的鉴别 比特位置之间的相对位置关系,来确定由包含插入关键字的叶节点和另 一个节点构成的新节点对的插入位置。然后,根据大小关系来确定将包 含插入关键字的叶节点设为所插入节点对中的哪个节点,并插入节点对。
另外,在上述日本特愿2006-187827中还记载了从配对节点树中删 除包含所指定的索引关键字的叶节点的方法。由此,将删除关键字作为 检索关键字,从配对节点树中检索相应的叶节点,将与该叶节点构成节 点对的节点的内容写入该节点对的链接源分支节点中,删除该节点对, 从而可以删除包含所指定的索引关键字的叶节点。
另外,在日本特愿2006-293619中还记载了前方一致检索方法,该 方法针对指定了第0~第n(n≥0)比特的值的前方一致关键字,取出所有第 0~第n比特完全与其一致的索引关键字。例如,在指定“10****”作为前 方一致关键字的情况下,n=1,取出所有第0~第1比特与前方一致关键字 一致的索引关键字。
其具体方法如下所述。首先,取得用“0”置换前方一致关键字的所有 “*”的下限关键字、和用“1”置换前方一致关键字的所有“*”的上限关键字。 并且,以升序的方式从配对节点树中取出用下限关键字和上限关键字指 定的检索范围的索引关键字。
如下地进行以升序的方式从配对节点树中取出所指定的检索范围的 索引关键字的处理。首先,根据下限关键字取得下限关键字以上的索引 关键字的最小值即下限值,根据上限关键字取得上限关键字以下的索引 关键字的最大值即上限值。
下限值的取得是通过下述方式来进行的,即,按照使节点[0]侧以及 深度方向优先的深度优先搜索顺序来搜索配对节点树的叶节点,并且将 叶节点的索引关键字与下限关键字进行比较。上限值的取得方法除了将 搜索顺序设为使节点[1]侧以及深度方向优先的深度优先搜索顺序之外, 与下限值的取得方法相同。
然后,在从存储有下限值的索引关键字的叶节点开始、到找到上限 值的索引关键字的期间,以使节点[0]侧以及深度方向优先的深度优先搜 索顺序来搜索配对节点树的叶节点,依次从叶节点中取出索引关键字。
通过以上的处理,可以取出所有的第0~第n比特与前方一致关键字 完全一致的索引关键字。
另外,在日本特愿2007-132289中记载了最长一致检索方法,该方 法检索出与所指定的最长一致检索关键字部分一致的索引关键字中、差 分比特位置为最下位的索引关键字。此外,这里所谓的差分比特位置是 指在比较两个比特序列时比特值不一致的不一致比特中最上位的位置。
该具体方法如下所述。首先,将最长一致检索关键字作为检索关键 字,将根节点作为检索开始节点进行图4的检索,将其结果所获得的索 引关键字与最长一致检索关键字进行比较,求出差分比特位置。
然后,追溯在图4的检索中已存储的搜索路径堆栈,取得鉴别比特 位置比差分比特位置更上位的分支节点中、鉴别比特位置为最下位的分 支节点的下一个存储在搜索路径堆栈中的分支节点,取得作为最长一致 节点。
根据配对节点树的结构,以如上取得的最长一致节点作为根节点的 部分树中所包含的全部索引关键字满足上述的条件:与最长一致检索关 键字部分一致的索引关键字中的差分比特位置为最下位。由此,可根据 需要从该部分树中取出适当的索引关键字。
以上,说明了作为本发明前提的技术,可根据需要参照上述日本专 利申请的说明书以及附图的记载。
此外,如下所述来说明上述日本特愿2006-293619的前方一致检索 和日本特愿2007-132289的最长一致检索与本发明的检索之间的关联 性。
上述前方一致检索中的前方一致关键字包含无关比特。另外,上述 最长一致检索有时结果仅得到与最长一致检索关键字部分一致的索引关 键字,在这一点上可视为将不一致的范围当作无关比特。
但是,上述的前方一致检索和最长一致检索都不是取得唯一确定的 一个索引关键字的处理。
即,有时利用上述前方一致检索取出的索引关键字的数量是2以上。 另外,在上述最长一致检索中,以最长一致节点作为根节点的部分树有 时具有多个叶节点,从该部分树中取出哪个索引关键字是任意的。
即,在上述前方一致检索和最长一致检索中,在满足检索条件这一 点上有时存在相互对等的多个索引关键字。由此,出于检索目的的不同, 需要根据某些标准从这些多个索引关键字中选择一个。
另一方面,在路由器的路由表检索等需要非常高速处理的领域中, 不希望是上述的检索和选择的两阶段处理。因此,即使在前方一致检索 及最长一致检索这样的基于部分一致的检索的情况下,也希望唯一地确 定最优的一个索引关键字、取得该唯一的索引关键字而无需第二阶段的 选择处理的方法。
如以下说明的那样,本发明的考虑了无关比特的检索满足这种希望。 应根据检索目的来区分使用上述的前方一致检索、最长一致检索以及下 述的考虑了无关比特的检索。
接着,对本发明的实施方式进行详细说明。以下,在说明了比特序 列编码方法的例子和配对节点树的例子之后,说明检索、插入、删除的 各处理。
在以下的说明中,将编码前后的比特序列分别称为“源比特序列”、“编 码比特序列”。“索引关键字”和“检索关键字”这样的用语只要没有特别说 明就表示编码比特序列的状态,在表示源比特序列状态的情况下表述为 “源索引关键字”和“源检索关键字”。
另外,可将值确定为“0”或“1”的比特称为“有效比特”,将值可以是“0” 和“1”中任意一个、不唯一确定的比特称为“无关比特”。此外,区别于用“0” 或“1”表示的有效比特,无关比特用符号“*”来表述。
另外,在下文中假设前提是无关比特不存在于有效比特之前。即, 源比特序列是仅由无关比特构成、仅由有效比特构成、或者在1比特以 上的有效比特后接有1比特以上的无关比特的任意一种情况。
这样为了对有可能包含无关比特的源比特序列进行编码,采用将各 比特编码成2位的编码方法。
编码比特序列以由2比特构成的比特对为单位。各比特对的第0比 特是识别比特,该识别比特表示是无关比特还是有效比特。各比特对的 第1比特称为数据比特。
识别比特的值为“0”时表示无关比特,值为“1”时表示有效比特。
在识别比特值为“0”时,成对的数据比特值必定是预先确定的值,在 以下的实施方式中,采用“0”作为该预先确定的值。在识别比特值为″1″ 时,数据比特表示源比特序列的比特值。
即,在源比特序列的各比特是值为“0”的有效比特时编码成“10”的比 特对,是值为“1”的有效比特时编码成“11”的比特对,是无关比特时编码 成“00”的比特对。
根据该编码方法,可根据编码比特序列来简单地判断在源比特序列 中是否有后续的有效比特。这是因为,针对编码比特序列中的任意比特, 可根据该比特位置是偶数还是奇数来简单地区别该比特是识别比特还是 数据比特,并且依据上述前提,无关比特不存在于有效比特之前。
接着,参照图5来说明利用了编码比特序列的配对节点树的例子。 图5(a)示出了与6个没有编码的源索引关键字“*****”、“1****”、“101**”、 “1011*”、“1100*”、“111**”的集合对应的配对节点树的概略结构。
此外,图5还包含与用于后述检索处理的说明相关的部分(b)和(c), 但这里先仅对配对节点树的结构进行说明。
图5(a)的配对节点树的各叶节点存储有对上述6个源索引关键字分 别进行编码后的编码比特序列,作为索引关键字。在图5中为了便于理 解,在各索引关键字附近的括弧内示出源索引关键字的值。
除了存储在索引关键字中的是编码比特序列这一点之外,图5与图 2B相同,所以在图5中也采用与图2B相同的符号。
即,根节点210a配置在数组编号220中,是节点对201a的代表节 点。作为树结构,在根节点210a下配置有节点对201b,在该节点对201b 的下层配置有节点对201c,并且在该节点对201c的下层配置有节点对 201d。而且,在节点对201d的下层配置有节点对201e和节点对201f。
根节点210a的节点类别260a是0,表示是分支节点,鉴别比特位置 230a是0,在代表节点编号中存储有数组元素的数组编号220a,该数组 编号220a的数组元素中存储有节点对201b的代表节点即节点210b。
节点对201b由节点类别260b为1是叶节点的节点210b、和节点类 别261b为0是分支节点的节点211b构成。
在节点210b的索引关键字250b中存储有对源索引关键字“*****”进 行编码后的“0000000000”。
另一方面,在节点211b的鉴别比特位置231b中存储有2,在代表节 点编号中存储有数组元素的数组编号221b,该数组编号221b的数组元素 中存储有节点对201c的代表节点210c。
节点对201c由节点类别260c为1是叶节点的节点210c、和节点类 别261c为0是分支节点的节点211c构成。
在节点210c的索引关键字250c中存储有对源索引关键字“1****”进 行编码后的“1100000000”。
另一方面,在节点211c的鉴别比特位置231c中有存储3,在代表节 点编号中存储有数组元素的数组编号221c,该数组编号221c的数组元素 中存储有节点对201d的代表节点210d。
节点对201d由节点210d和211d构成,各自的节点类别260d和261d 是表示分支节点的0。
在节点210d的鉴别比特位置230d中存储有6,在代表节点编号中存 储有数组元素的数组编号220d,该数组编号220d的数组元素中存储有节 点对201e的代表节点210e。
另一方面,在节点211d的鉴别比特位置231d中存储有5,在代表节 点编号中存储有数组元素的数组编号221d,该数组编号221d的数组元素 中存储有节点对201f的代表节点210f。
节点对201e由节点210e和211e构成,各自的节点类别260e和261e 是表示叶节点的1。
在节点210e的索引关键字250e中存储有对源索引关键字“101**”进 行编码后的″1110110000″。
另一方面,在节点211e的索引关键字251e中存储有对源索引关键字 “1011*”进行编码后的“1110111100”。
节点对201f由节点210f和211f构成,各自的节点类别260f和261f 是表示叶节点的1。
在节点210f的索引关键字250f中存储有对源索引关键字“1100*”进 行编码后的“1111101000”。
另一方面,在节点211f的索引关键字251f中存储有对源索引关键字 “111**”进行编码后的“1111110000”。
在用作检索关键字的编码比特序列与配对节点树所包含的索引关键 字中的一个完全一致的情况下,通过与图4相同的处理,获得与检索关 键字相等的索引关键字作为检索结果。
但是还存在下述情况,即,考虑到无关比特,应该获得与检索关键 字部分一致的索引关键字作为检索结果。参照图6~图11在后文中详细叙 述基于这种部分一致的检索。
接着,说明图5(a)的配对节点树的结构的意义。如图5(a)所示,即使 在采用编码比特序列的情况下,与图2B同样,也利用索引关键字的集合 来规定配对节点树的结构。
在图5(a)的例子中,根节点210a的鉴别比特位置为0是因为在图5 中的索引关键字中存在第0比特是0的索引关键字和是1的索引关键字。 第0比特是0的索引关键字仅存在一个,所以被分类在节点210b中,第 0比特是1的索引关键字被分类在节点211b的下层。
节点211b的鉴别比特位置231b是2,这反映了如下的索引关键字集 合的性质,即,存储在节点211b下层的各节点中的第0比特为1的索引 关键字的第1比特全部等于1,而从第2比特开始不同。
以下同样,在第0~第1比特为“11”的索引关键字中,第2比特为0 的索引关键字仅存在一个,因此分类到节点210c,第2比特为1的索引 关键字分类到节点211c的下层。节点211c的鉴别比特位置231是3,这 反映了下述情况,即在存储于节点211c下层的各节点中的索引关键字中, 存在第3比特是0的索引关键字和是1的索引关键字。
节点210d的鉴别比特位置230d是6的原因是反映了下述索引关键 字性质,即,对于存储在节点210d下层的各节点中的、第0~第3比特是 “1110”的索引关键字,其第4~第5比特都等于“11”,而从第6比特开始 不同。
在节点210d的链接目的地中,第6比特为0的索引关键字和为1的 索引关键字分别仅存在一个。由此,节点210e和211e是叶节点,在节点 210e和211e的索引关键字250e和251e中,分别存储有作为“101**”的编 码比特序列的“1110110000”、和作为“1011*”的编码比特序列的 “1110111100”。
另一方面,节点211d的鉴别比特位置231d是5的原因是反映了下 述索引关键字性质,即,对于存储在节点211d下层的各节点中的、第0~ 第3比特为“1111”的索引关键字,其第4比特均等于1,而从第5比特开 始不同。
在节点211d的链接目的地中,第5比特为0的索引关键字和为1的 索引关键字分别仅存在1个。由此,节点210f和211f是叶节点,在节点 210f和211f的索引关键字250f和251f中,分别存储有作为“1100*”的编 码比特序列的“1111101000”和作为“111**”的编码比特序列的 “1111110000”。
这样,在图5(a)中作为编码比特序列的索引关键字的集合与配对节点 树的树结构相对应。
另外,在本实施方式的编码方法中,两个源比特序列的第0~第m (0≤m)比特一致的情况等价于对该两个源比特序列进行编码后的两个编 码比特序列的第0~第(2m+1)比特一致的情况。因此,配对节点树的树结 构也可以通过编码前的源索引关键字的集合来规定,树结构与源索引关 键字集合之间存在对应关系。
即,在源索引关键字中,第0比特是无关比特的源索引关键字仅为 “*****”,所以将“*****”分类在紧接根节点210a之下的节点210b中,第 0比特是有效比特的源索引关键字分类到与节点210b成对的节点211b的 下层。
分类到节点211b下层的源索引关键字的第0比特全部等于“1”。由此, 不需要第0比特是“0”和“1”的哪一个这样的分类。
另一方面,在这些源索引关键字中,第1比特是无关比特的仅是 “1****”这样的源索引关键字,所以将其分类到节点210c,第1比特为有 效比特的源索引关键字分类在与节点210c成对的节点211c的下层。
在分类到节点211c下层的、至少第0~第1比特是有效比特的源索引 关键字中,存在第1比特为“0”的源索引关键字和为“1”的源索引关键字。 因此,第0~第1比特为“10”的源索引关键字分类在节点210d的下层,第 0~第1比特为“11”的源索引关键字分类在节点211d的下层。
分类在节点210d下层的源索引关键字是“101**”和“1011*”这两个。 这两个源索引关键字的第0~第2比特完全一致,但第3比特或是无关比 特或是有效比特而不同。
在本实施方式中将无关比特“*”编码成“00”。由此,对于这样第n比 特(n≥1)以后为无关比特的源索引关键字与第n比特为有效比特的源索引 关键字,在第0~第(n-1)比特的范围内完全一致的情况下,前者分类在 节点[0]侧。
因此,源索引关键字“101**”分类到节点210e,“1011*”分类到211e。
另一方面,分类在节点211d下层的源索引关键字是“1100*”和“111**” 这两个。这两个源索引关键字的第0~第1比特完全一致,但第2比特的 值不同。
这样,从开头的第0比特起依次进行比较,在尚未到达任一源索引 关键字的无关比特的期间找到值不同的有效比特的情况下,将该有效比 特值是“0”的源索引关键字分类在节点[0]侧,将该有效比特值是“1”的源 索引关键字分类在节点[1]侧。
因此,源索引关键字“1100*”分类到节点210f,源索引关键字“111**” 分类到节点211f。
如以上所述,对编码比特序列进行分类而得到的层级结构与对源比 特序列进行分类而得到的层级结构是等价的。
另外,由于无关比特值是不确定的,因此原本不确定无关比特与有 效比特的值哪个更大。但是为了方便,如果将无关比特“*”定义成小于值 为“0”的有效比特,则可以说配对节点树的结构反映了源索引关键字的顺 序性。
即,与图2B相同,即使在图5的配对节点树中,当以节点[1]侧优先 的深度优先搜索顺序来搜索叶节点时,存储在这些叶节点中的索引关键 字所表示的源索引关键字以降序的方式排序。换言之,与按降序对源索 引关键字进行排序的顺序相应地,各索引关键字配置在配对节点树上。
此外,在本实施方式中,将表示无关比特的识别比特的值设为“0”是 为了符合“*”小于“0”这一上述定义。
接下来,针对本发明一实施方式的检索处理,参照图6的流程图来 进行说明。在图6的检索处理中,将作为未编码的源比特序列的源检索 关键字指定为输入,例如图5所示,对采用了编码比特序列的配对节点 树进行检索。
图6的检索处理是这样的处理,即,如果在配对节点树内存在满足 以下描述的“最长一致关键字”条件的索引关键字,则取得该最长一致关 键字。如果在配对节点树内不包含满足最长一致关键字条件的索引关键 字,则检索失败而结束。
在本实施方式中,最长一致关键字表示相当于下述(a)和(b)的任意一 个的索引关键字。
(a)与对源检索关键字进行编码后的编码比特序列完全相同的索引关 键字。
(b)在不存在有效比特或者存在数量比源检索关键字少的有效比特、 但所有的有效比特的值与源检索关键字的有效比特的值一致的源索引关 键字中,对有效比特数最大的源索引关键字进行编码后的索引关键字。
此外,上述(a)的优先级比(b)高。即,如果存在与(a)相应的索引关键 字,则该索引关键字是最长一致关键字,此时,例如即使存在与(b)相应 的索引关键字也不是最长一致关键字。
在开始图6的具体说明之前,举几个例子对上述(a)和(b)的定义进行 说明。
在图5(a)的配对节点树中,上述(a)的例子是当源检索关键字为 “1100*”时对“1100*”进行编码后的编码比特序列即节点210f的索引关键 字250f。
另外,在图5(a)的配对节点树中,当举出三个与上述(b)相应的最长 一致关键字的例子时,如下所述。
第一例是源检索关键字为“11001”时的例子。该源检索关键字的有效 比特数是5。
在图5(a)中有不存在有效比特的源索引关键字“*****”。另外,对于 存在数量少于5的有效比特、而所有的有效比特的值与源检索关键字的 值一致的源索引关键字,存在“1****”和“1100*”。
对这三个源索引关键字中有效比特数最大的“1100*”进行编码后的节 点210f的索引关键字250f是最长一致关键字。
第二例是源检索关键字为“11***”时的例子。该源检索关键字的有效 比特数是2。
在图5中有不存在有效比特的源索引关键字“*****”。另外,对于存 在数量少于2的有效比特、而所有的有效比特的值与源检索关键字的值 一致的源索引关键字,存在“1****”。
对这两个源索引关键字中有效比特数最大的“1****”进行编码后的 节点210c的索引关键字250c是最长一致关键字。
此外,在配对节点树内还存在对源索引关键字“1100*”及“111**”进行 编码后的索引关键字250f以及251f。一看便知,作为与“11***”一致的范 围,视为“1100*”和“111**”比“1****”宽。
但是,索引关键字250f和251f不符合最长一致关键字的定义。如下 所述,对以这种方式定义最长一致关键字的原因进行补充。
无关比特表示任意的值,因此包含无关比特的源比特序列可视为表 示比特序列的集合。例如,“11***”所表示的集合包含“11011”这样的源比 特序列等。
但是,“11011”与“1100*”在第3比特不同,与“111**”在第2比特不 同。即,“11011”不包含于“1100*”和“111**”中。由此,不适于将索引关 键字250f或251f作为针对源检索关键字“11***”的最长一致关键字。
另一方面,无论源检索关键字“11***”的无关比特取什么值,对无关 比特设定了值的该比特序列必定包含于源索引关键字“*****”所表示的 集合和源索引关键字“1****”所表示的集合中。
并且,两个源索引关键字中具有更多有效比特的源索引关键字 “1****”所表示的集合更小,更接近于源检索关键字“11***”所表示的集 合。由此,针对源检索关键字“11***”的最长一致关键字是源索引关键字 “1****”。
第三例是源检索关键字为“0****”时的例子。在图5(a)的配对节点树 中,不包含对从″0″开始的源索引关键字进行编码后的索引关键字。
但此时,根据上述(b)的定义,对源索引关键字“*****”进行编码后的 编码比特序列即节点210b的索引关键字250b为最长一致关键字。实际 上,无论源检索关键字“0****”的无关比特取什么值,对无关比特设定了 值的该比特序列均包含于源索引关键字“*****”所表示的集合中。
例如如IP地址那样,在比特序列值与比特序列所表示的内容的层级 分类对应的情况下,取得如上述定义的最长一致关键字的方式适于选择 最适合的分类。
接着,参照图6的流程图来详细说明图6的处理。通过图6所示的 处理,如果存在由上述(a)以及(b)定义的最长一致关键字则可以获得该最 长一致关键字,如果不存在则获得检索失败这样的结果。
在步骤S601中根据所指定的源检索关键字,利用上述编码方法来作 成检索关键字。步骤S601的详细情况参照图7在后文描述。例如,在图 5(b)中例示了由5比特的源检索关键字“10100”作成的10比特的检索关键 字270。
接着,在步骤S602中将检索对象配对节点树的根节点设定为检索开 始节点。
接着在步骤S603中,利用检索关键字从检索开始节点开始对存储配 对节点树的节点的数组进行检索,取得作为检索结果的索引关键字。步 骤S603的详细处理配合图8在后文描述。为了在之后的步骤S606中进 行参照,在步骤S603中,如图5(c)所例示的那样在搜索路径堆栈310中 存储数组编号。
在下一步骤S604中,求出检索关键字与在步骤S603中得到的索引 关键字之间的差分比特位置。差分比特位置的定义和步骤S604的详细内 容配合图9以及图10在后文中描述。
在下一步骤S606中,根据检索关键字和在步骤S603中得到的索引 关键字来追溯搜索路径堆栈,并取得最长一致关键字。步骤S606的详细 处理配合着图11在后文中描述。
如果在步骤S606中得到了最长一致关键字则检索成功,图6的处理 结束。如果在步骤S606中没有得到最长一致关键字则检索失败,图6的 处理结束。
接着,参照图7的流程图来说明对作为输入比特序列提供的源比特 序列进行编码而输出编码比特序列的编码处理。图7的编码处理相当于 图6的步骤S601。另外如后所述,在插入处理和删除处理中也执行图7 的编码处理。
在步骤S701中,存储输入比特序列的有效比特部分的长度,即有效 比特长度,作为比特长度。
另外在步骤S702中,对表示输入比特序列中接着要处理的比特的位 置的比特位置进行初始化。在本实施方式中从第0比特起依次进行处理, 因此在步骤S702中将比特位置初始化成0。
然后在步骤S703中,对输出比特序列进行初始化并设为空比特序列。 在后述的步骤S704~步骤S708的循环中更新比特位置和输出比特序列的 值。
接着,在步骤S704中判定当前的比特位置是否小于在步骤S701中 存储的比特长度,如果当前的比特位置小则进入步骤S705,除此以外的 情况进入步骤S709。
在步骤S705中,从输入比特序列中取出当前比特位置所指定的比特 值。
接着,在步骤S706中,在输出比特序列的末尾连接比特值1。然后, 在步骤S707中,在输出比特序列的末尾连接步骤S705中得到的比特值。
然后在步骤S708中,将比特位置更新成下一位置后返回步骤S704。 此外,在本实施方式中从左起依次数第0、1、2......比特,所以“下一位 置”是当前比特位置的右邻位置。
在步骤S709中,在输出比特序列的末尾与输入比特序列中无关比特 数量相应地连接“00”的比特对,结束处理。
通过以上处理,例如根据源比特序列“101**”得到编码比特序列 “1110110000”。
此外,在本实施方式中,源比特序列中的有效比特数和无关比特数 不同于输入比特序列本身而另行指定。但是,在仅处理固定长度的比特 序列的情况下,可以根据有效比特数来求出无关比特数,反之也可以根 据无关比特数来求出有效比特数,因此可以仅指定一方。
接下来,参照图8的流程图来详细说明进行初始检索的图6的步骤 S603的处理。
在步骤S801中,将搜索路径堆栈的堆栈指针值设定为初始值。该初 始值是在搜索路径堆栈中什么都没有存储时的值,在后述的图11的处理 中也使用该初始值。本实施方式的图8处理中的堆栈指针作为表示接下 来在步骤S813中要压入数组编号的、搜索路径堆栈上的位置的堆栈指针, 在以下进行说明。
接着,在步骤S802中,取得检索开始节点的数组编号。在执行图6 的步骤S602之后执行图8的处理,因此具体而言在步骤S802中得到根 节点的数组编号。
接着在步骤S803中,从存储配对节点树的节点的数组中,作为节点 读出在步骤S801中取得的数组编号所指定的数组元素。
然后在步骤S804中,从步骤S803读出的节点中取出节点类别,在 步骤S805中判定节点类别是否是分支节点。
在步骤S805的判定中所读出的节点是分支节点的情况下,进入步骤 S806,从节点中取出关于鉴别比特位置的信息,并且在步骤S807中,从 检索关键字中取出与所取出的鉴别比特位置对应的比特值。然后在步骤 S808中,从节点中取出代表节点编号。
接下来在步骤S811中,判定在步骤S806中取出的鉴别比特位置是 否为偶数。
根据本实施方式的编码,位于编码比特序列的偶数比特位置的比特 是识别比特,位于奇数比特位置的比特是数据比特。由此,在步骤S811 的判定为偶数的情况下,为了判定是否后续有对有效比特进行编码后的 比特而进入步骤S812,判定在步骤S807中取出的比特值是否为1。
在步骤S812的判定为1时,按照本实施方式的编码,源检索关键字 的具有有效比特值的数据比特还留在检索关键字中。因此进入步骤S813, 将在步骤S803中读出了节点的数组编号存储在搜索路径堆栈中。
接下来在步骤S814中,对步骤S808中取出的代表节点编号加1,取 得相当于在步骤S803中读出的节点的子节点的节点[1]的数组编号,并设 定为新的数组编号。
然后在步骤S815中,将步骤S814中得到的子节点的数组编号存储 在搜索路径堆栈中,在使堆栈指针的值加1后返回步骤S803。
此外,这里所谓“加1”的方式是与图5(c)那样将搜索路径堆栈310分 成两列进行图示的说明相对应的方式,而目的不在于限定于具体的搜索 路径堆栈310以及堆栈指针的安装方法。
在图5(c)的搜索路径堆栈310中,左列图示了在步骤S813中存储的 数组编号、右列图示了在步骤S815中存储的数组编号。在步骤S815中 进行的堆栈指针值的更新相当于:在图5(c)中堆栈指针所指向的行移到下 一行。
另一方面,在步骤S811的判定为奇数时,表示鉴别比特位置是数据 比特的位置。另外,在步骤S812的判定为0时,按照本实施方式的编码, 表示识别比特为0、即到达了对源检索关键字中的无关比特进行编码后的 比特位置。
在步骤S811中判定为奇数时、和在步骤S812中判定为0时,都进 入步骤S809。
在步骤S809中,将在步骤S807中从检索关键字取出的比特值与在 步骤S808中取出的代表节点编号相加,并将该相加的结果设定为新的数 组编号。在步骤S809执行后,处理返回步骤S803。
以后,反复从步骤S803到步骤S815的处理,直至在步骤S805的判 定中判定为叶节点而进入步骤S810为止。在反复中,在步骤S809或步 骤S814中设定的数组编号由步骤S803使用。
在步骤S810中,从叶节点取出索引关键字,并结束处理。
此外,无关比特“*”编码成“00”,因此当将j设为0以上的整数时, 如果编码比特序列的第2j比特为“0”,则编码比特序列的第(2j+1)比特必 定是“0”。
并且,鉴别比特位置为2j的分支节点的子节点中的节点[0]必定是下 述叶节点,该叶节点存储有对第j比特以后全部为无关比特的源索引关键 字进行编码后的索引关键字。
因此,在处理从步骤S811进入步骤S812、S809、S803、S804、S805 的情况下,在步骤S805中必定判定为是叶节点,必定分支到步骤S810。
从母分支节点看来,把该作为节点[0]的叶节点(到达有效比特终端 的意思)称为“终端侧节点”,将与终端侧节点成对的节点[1]称为“非终端 侧节点”。后述图11的步骤S1107和步骤S1108是根据非终端侧节点求 出终端侧节点的处理。
接着,参照图9的流程图来详细说明求出差分比特位置的图6中步 骤S604的处理。
在步骤S901中设定比较比特长度。设定为比较比特长度的值是从最 上位的第0比特到下述两种位置中更上位的位置的长度,该两种位置是: 检索关键字中的、对源检索关键字的最上位的无关比特进行编码后的比 特对的位置;以及在图6的步骤S603得到的索引关键字中的、对源索引 关键字的最下位有效比特进行编码后的比特对的位置。更准确地说,比 较比特长度如以下(1)~(3)的方式来设定。
(1)在源检索关键字中不含有有效比特时、即源检索关键字的第0比 特为无关比特时,对源检索关键字的第0比特的无关比特进行编码后的 比特对是检索关键字的第0~第1比特。由此,比较比特长度设定为2。
(2)在源检索关键字中含有有效比特、而在源索引关键字中不含有有 效比特时,比较比特长度设定为0。
(3)在源检索关键字和源索引关键字双方都包含有效比特时,如下地 设定比较比特长度。
假设源检索关键字的最上位无关比特的位置为a(a≥1),则对第a比特 的无关比特进行编码后的比特对位于检索关键字的第2a~第(2a+1)比特。 此外,在源检索关键字仅由有效比特构成的情况下,设源检索关键字的 长度为n,方便地视为a=n。
另外,假设源索引关键字的最下位有效比特的位置为b(b≥0),则对 第b比特的有效比特进行编码后的比特对位于索引关键字的第2b~第 (2b+1)比特。
由此,在(2a+1)≤(2b+1)的情况、即a≤b的情况下,将比较比特长 度设定为从第0比特~第(2a+1)比特的长度、即(2a+2)。另一方面,在 (2a+1)>(2b+1)的情况、即a>b的情况下,将比较比特长度设定为从第0 比特~第(2b+1)比特的长度、即(2b+2)。
如上述(1)~(3)所述,在步骤S901中设定的比较比特长度为偶数,因 此以下为了便于说明,将比较比特长度表述为2c(c≥0)。
在步骤S902中,在比较比特长度所指定的比特序列内对检索关键字 和索引关键字进行比较,来得到比较比特长度的差分比特序列。即,在 第0~第(2c-1)比特的范围内对检索关键字和索引关键字进行比较,得到 长度2c的差分比特序列。
差分比特序列是在检索关键字与索引关键字之间值一致的位置的比 特是值为0、不一致的位置的比特是值为1的比特序列,例如可以通过求 逻辑“异或”的比特运算来得到。
接着在步骤S903中,从最上位的位置即第0比特起观察差分比特序 列,将第一个不一致比特、即值为1的比特的比特位置设定为差分比特 位置,并结束处理。
当不存在不一致比特时,之后不存在参照差分比特位置的情况,因 此在步骤S903中为了方便可将差分比特位置例如设定为2c。另外,在比 较比特长度为0时,为了方便将差分比特位置设定为负数。
接着,参照图10来说明差分比特位置的具体例。
在图10的例子中,检索关键字是对源检索关键字“10100”进行编码 后的编码比特序列“1110111010”。该源检索关键字仅由有效比特构成,因 此如上述(3)的说明,为了方便视作a=5。
另一方面,基于该检索关键字利用步骤S603的检索所得到的索引关 键字是对包含无关比特的源索引关键字“1011*”进行编码后的索引关键字 251e“1110111100”。该源索引关键字中最下位的有效比特的位置是b=3。
由此,由于a>b,因此在图9的步骤S901中将8(=2b+2)设定为比较 比特长度。
然后,在步骤S902中取得8比特的差分比特序列,在步骤S903中 将7设定为差分比特位置。通过上述方式,图9的处理即图6的步骤S604 结束。
接着,参照图11的流程图来详细说明取得最长一致关键字的图6中 步骤S606的处理。
在步骤S1101中,在比较比特长度2c所指定的比特序列内对检索关 键字和在图6的步骤S603中得到的索引关键字进行比较,即在从最上位 的第0比特到第(2c-1)比特的范围内进行比较,判断两者是否相等。
当在步骤S1101中判定为相等时,处理进入步骤S1111,将在步骤 S603中得到的索引关键字设定为最长一致关键字后结束处理。
当在步骤S1101中判定为不相等时,处理进入步骤S1102。
在步骤S1102中,判断搜索路径堆栈的堆栈指针的值是否是初始值, 如果是初始值则不设定最长一致关键字而结束图11的处理,如果不是这 样则进入步骤S1103。
根据图8的步骤S801的说明可知,在本实施方式中堆栈指针为初始 值是指:堆栈指针指向最初压入搜索路径堆栈的数组编号、或搜索路径 堆栈为空的情况。
在步骤S1103中,使搜索路径堆栈的堆栈指针后退1,从搜索路径堆 栈中取出数组编号。即,步骤S1103的处理是出栈动作。
此外,当结合图5(c)的搜索路径堆栈310的图示来说明时,步骤S1103 的处理是堆栈指针向上移动1行、从改变后的堆栈指针所指向的行的左 列取出数组编号的处理。
接着在步骤S1104中,从存储配对节点树的节点的数组中,作为节 点读出在步骤S1103取出的数组编号所指定的数组元素。
然后在步骤S1105中,从步骤S1104读出的节点中取出鉴别比特位 置。
这里,在步骤S1103中取出的数组编号必定是在图8的步骤S813中 压入搜索路径堆栈的数组编号,而不是在图8的步骤S815中压入搜索路 径堆栈的数组编号。
接着,在步骤S1106中判断步骤S1105中取出的鉴别比特位置是否 是比图9的步骤S903中得到的差分比特位置更上位的位置关系。
在鉴别比特位置比差分比特位置更上位的情况下进入步骤S1107,在 不是这样的情况下返回步骤S1102。
在步骤S1107中,从搜索路径堆栈中读出搜索路径堆栈的堆栈指针 所指向的子节点的数组编号。
例如,在如图5(c)那样图示堆栈时,堆栈指针表示行的位置,左列表 示包含偶数鉴别比特位置的节点的数组编号,右列表示写入相同行的左 列的数组编号的节点的子节点中、作为非终端侧节点的节点[1]的数组编 号。
由此,如果根据图5(c)的图示来说明动作,则在步骤S1107中,读出 处于堆栈指针所表示的行的右列的数组编号。
接着,在步骤S1108中得到与在步骤S1107读出的子节点的数组编 号成对的数组编号。
在本实施方式中,构成节点对的两个节点存储在相邻的数组编号的 数组元素中,因此构成节点对的两个节点的数组编号也彼此成对。例如, 节点[0]存储在偶数数组编号的数组元素中,与该节点[0]成对的节点[1]存 储在紧接其后的奇数数组编号的数组元素中。由此,偶数和奇数的数组 编号彼此成对。
在该例的情况下,在步骤S1108中,通过从步骤S1107读出的节点[1] 的数组编号减1,来取得与该节点[1]构成节点对的节点[0]的数组编号。 即,在步骤S1108中根据非终端侧节点的数组编号来取得作为叶节点的 终端侧节点的数组编号。
接着在步骤S1109中,从数组中作为节点读出在步骤S1108中得到 的数组编号所指定的数组元素、即作为叶节点的上述节点[0],该节点[0] 是终端侧节点。
接着在步骤S1110中,从步骤S1109中读出的叶节点取出索引关键 字,在下一步骤S1111中,将取出的索引关键字设定为最长一致关键字, 结束图11的处理。
接着,针对使用了图5的配对节点树的图6~图9以及图11的处理, 说明几个具体例。
在源检索关键字为图5(b)和图10所示的“10100”时,在图6的步骤 S603中,取得在图5中表示为“初始检索”的节点211e的索引关键字251e。
在该情况下,如参照图10所说明的那样,将8比特设定为比较比特 长度,差分比特位置是7。由此,执行图11的步骤S1102~步骤S1106, 从数组编号221c的节点210d中取出鉴别比特位置230d。
鉴别比特位置230d的值是6,比7上位,所以执行步骤S1107~步骤 S1111,将在图5中表示为“最长一致”的节点210e的索引关键字250e设 定为最长一致关键字。这是与最长一致关键字的定义(b)对应的情况。
在源检索关键字为“1100*”时,在图6的步骤S603中得到索引关键 字250f。在该情况下,源检索关键字的最上位无关比特位置是4,源索引 关键字的最下位有效比特位置是3,因此比较比特长度是8。
然后,在图11的步骤S1101中判定为检索关键字与索引关键字相等, 进入步骤S1111,将索引关键字250f设定为最长一致关键字。此例是与 最长一致关键字的定义(a)对应的例子。
在源检索关键字为“11001”时,在图6的步骤S603中得到对源索引 关键字“1100*”进行编码后的索引关键字250f。
在该情况下,源检索关键字的最上位无关比特位置为了方便视作5, 源索引关键字的最下位有效比特位置为3,因此在图9的步骤S901中, 将8设定为比较比特长度。
由此,在图11的步骤S1101中判定为检索关键字和索引关键字相等, 进入步骤S1111,将索引关键字250f设定为最长一致关键字。此例也是 与最长一致关键字的定义(b)对应的例子。
在源检索关键字为“11***”时,在图6的步骤S603中得到对源索引 关键字“1100*”进行编码后的索引关键字250f。
在该情况下,源检索关键字的最上位无关比特位置是2,源索引关键 字的最下位有效比特位置是3,因此在图9的步骤S901中将6设定为比 较比特长度。差分比特位置是4。
由此在图11中从步骤S1101进入步骤S1102。然后,执行步骤S1102~ 步骤S1106,从数组编号(220a+1)的节点211b中取出鉴别比特位置231b。 鉴别比特位置231b的值是2,比4上位。
由此执行步骤S1107~步骤S1111,将节点210c的对“1****”进行编码 得到的索引关键字250c设定为最长一致关键字。此例也是与最长一致关 键字的定义(b)对应的例子。
当源检索关键字为“0****”时,在图6的步骤S603中得到对“1****” 进行编码后的索引关键字250c。在该情况下,源检索关键字的最上位无 关比特位置是1,源索引关键字的最下位有效比特位置是0,因此在图9 的步骤S901中将2设定为比较比特长度,差分比特位置是1。
由此,执行图11的步骤S1102~步骤S1106,从数组编号220的根节 点210a中取出鉴别比特位置230a。鉴别比特位置230a的值是0,比1 上位。
由此执行步骤S1107~步骤S1111,将节点210b的对“*****”进行编 码得到的索引关键字250b设定为最长一致关键字。此例也是与最长一致 关键字的定义(b)对应的例子。
如以上说明,根据上述检索方法,即使在源检索关键字和源索引关 键字双方都存在无关比特时也能进行检索,另外,无需进行检索和选择 的两阶段处理,就能取得唯一确定的最长一致关键字。
接着,参照图12~图13C的流程图来说明根据指定的源插入关键字 在采用了编码比特序列的检索用配对节点树中插入叶节点的处理。此外, 通过根节点的插入处理、和将根节点以外的节点插入现有配对节点树的 通常插入处理来生成配对节点树,因此节点插入处理的说明也是配对节 点树生成处理的说明。
在图12的步骤S1201中,根据所指定的源插入关键字,通过图7的 编码处理来作成插入关键字。
接着,在步骤S1202中判定是否已经登记了所要求取得的配对节点 树的根节点的数组编号。如果在步骤S1202中的判定是已登记则进入步 骤S1203。
在步骤S1203中将根节点设定为检索开始节点。
接着在步骤S1204中,从检索开始节点开始,利用插入关键字对存 储有配对节点树的节点的数组进行检索,将插入关键字作为索引关键字 进行插入(即,在配对节点树中插入包含插入关键字作为索引关键字的叶 节点),结束图12的处理。步骤S1204的详细处理参照图13A~图13C在 后文叙述。
另一方面,如果步骤S1202中的判定不是已登记,则开始登记并生 成全新的配对节点树。
在该情况下,处理进入步骤S1205。在步骤S1205中,从数组求得空 节点对,取得该节点对中应作为代表节点的数组元素的数组编号。
接着在步骤S1206中,求出对步骤S1205中得到的数组编号加上0 后的数组编号(在本实施方式中,这次得到与步骤S1205中取得的数组编 号相等的数组编号,因此可以省略步骤S1206)。
此外在步骤S1207中,针对用于待插入根节点的在步骤S1206中得 到的数组编号的数组元素,对其节点类别写入1(叶节点),并对其索引关 键字写入插入关键字。
然后,在步骤S1208中,将在步骤S1206中取得的数组编号登记为 根节点的数组编号,结束图12的处理。
接着,参照图13A图13C来详细说明图12的步骤S1204的处理。 图13A是表示作为插入处理前级的检索处理的处理流程的图,大致相当 于在图4所示的检索处理中将插入关键字作为检索关键字。
步骤S1301相当于在图4的步骤S401中将检索开始节点作为根节点。 另外,步骤S1302~步骤S1310的处理与图4的步骤S402~步骤S410完全 对应。由此,省略这些步骤的说明。
根据图4与图13A的比较可知,无论是否对索引关键字和插入关键 字进行了编码,都通过同样的处理进行从检索开始节点至叶节点的检索。
此外需注意的是,在图13A中搜索路径堆栈的使用方法与图4相同, 而与图8和图11不同。在本实施方式的图13A的处理中,堆栈指针指向 搜索路径堆栈上存储了通过步骤S1302的入栈动作压入的数组编号的位 置。
在图13A的步骤S1311中对插入关键字和索引关键字进行比较,如 果相等则插入关键字已经存在于配对节点树中,所以插入失败并处理结 束。如果不相等则进入下一处理即图13B的步骤S1312以下的处理。
图13B是对准备用于待插入节点对的数组元素的处理进行说明的处 理流程图。
在步骤S1312中,从数组求出空节点对,取得该节点对中应成为代 表节点的数组元素的数组编号。
进入步骤S1313,比较插入关键字和在步骤S1310中得到的索引关键 字的大小,当插入关键字大时得到值为1的布尔值、当插入关键字小时 得到值为0的布尔值。
进入步骤S1314,将在步骤S1312中得到的代表节点的数组编号与在 步骤S1313中得到的布尔值相加,得到相加后的数组编号。
进入步骤S1315,将在步骤S1312中得到的代表节点的数组编号与在 步骤S1313中得到的布尔值的逻辑非值相加,得到相加后的数组编号。
在步骤S1314中得到的数组编号是存储有将插入关键字作为索引关 键字的叶节点的数组元素的数组编号,在步骤S1315中得到的数组编号 是存储有与该叶节点成对的节点的数组元素的数组编号。
即,根据在图13A所示的前级检索处理中得到的存储在叶节点中的 索引关键字与插入关键字的大小,通过图13B的处理来确定在待插入节 点对的哪个节点中存储保持插入关键字的叶节点。
例如,当在图5(a)的配对节点树中插入包含对源插入关键字“1101*” 进行编码后的插入关键字“1111101100”作为索引关键字的叶节点时,通过 图13A的处理在搜索路径堆栈中存储数组编号220、(220a+1)、(221b+1)、 (221c+1)、221d。另外,在步骤S1310中取出数组编号221d的节点210f 的为“1111101000”的索引关键字250f。
由此,在步骤S1313中对插入关键字和索引关键字进行比较,插入 关键字较大,因此得到布尔值1,在待插入节点对的代表节点编号加1后 的数组元素中存储保持插入关键字的叶节点。
另一方面,当在图5(a)的配对节点树中插入包含对源插入关键字 “0****”进行编码后的插入关键字“1000000000”作为索引关键字的叶节点 时,通过图13A的处理在搜索路径堆栈中存储有数组编号220、(220a+1)、 221b。另外,在步骤S1310中取出节点210c的为“1100000000”的索引关 键字250c。
由此,在步骤S1313中对插入关键字和索引关键字进行比较,插入 关键字较小,因此得到布尔值0,在待插入节点对的代表节点编号加0后 的数组元素中存储保持插入关键字的叶节点。
返回流程图的说明,继图13B的步骤S1315之后,执行图13C的处 理。图13C是示出在图13B所准备的数组元素中存储节点并且求出其插 入位置、改变现有节点的内容来完成插入处理的处理流程的图。
步骤S1316~步骤S1323的处理是求出待插入节点对在配对节点树上 的位置的处理,步骤S1324以下的处理是对各节点设定数据来完成插入 处理的处理。
在步骤S1316中,例如利用逻辑“异或”来进行插入关键字与步骤 S1310中得到的索引关键字之间的比特序列比较,得到差分比特序列。
进入步骤S1317,根据在步骤S1316中得到的差分比特序列,得到从 上位第0比特开始观察到的第一个不一致比特的比特位置。该处理例如 对于具有优先编码器的CPU,可以向该CPU输入差分比特序列,来得到 不一致的比特位置。并且,也能以软件方式进行与优先编码器同等的处 理,得到第一个不一致比特的比特位置。
接着进入步骤S1318,判定搜索路径堆栈的堆栈指针是否指向根节点 的数组编号。如果指向根节点的数组编号则转到步骤S1324,如果没有指 向根节点的数组编号则进到步骤S1319。
在步骤S1319中,使搜索路径堆栈的堆栈指针后退1,取出在此保存 的数组编号。
进入步骤S1320,从数组中作为节点读出在步骤S1319中取出的数组 编号的数组元素。
进入步骤S1321,从步骤S1320读出的节点中取出鉴别比特位置。
接着进入步骤S1322,判定在步骤S1321中取出的鉴别比特位置是否 是比步骤S1317中取得的比特位置更上位的位置关系。这里所谓上位的 位置关系是比特序列的更左侧位置、即比特位置的值小的位置。
如果步骤S1322的判定结果是否定的,则返回步骤S1318进行反复, 直到步骤S1318的判定为肯定或者步骤S1322的判定为肯定。当步骤 S1322的判定为肯定时,在步骤S1323中搜索路径堆栈的堆栈指针前进1, 转移到步骤S1324以下的处理。
在上述步骤S1316~步骤S1323中说明的处理是这样的处理:为了确 定待插入节点对的插入位置,在插入索引关键字与通过图13A的检索而 取得的索引关键字之间进行比特序列比较,调查通过比特序列比较成为 不同比特值的开头的(最上位的)比特位置、与存储在搜索路径堆栈中 的分支节点的鉴别比特位置之间的相对位置关系,将鉴别比特位置为上 位的分支节点的下一分支节点的链接目的地设为待插入节点对的插入位 置。
例如,在源插入关键字为“1101*”的上述例的情况下,索引关键字 “1111101000”和插入关键字“1111101100”在第7比特不同。另外,通过第 1次执行步骤S1319而取出的数组编号(221c+1)所指定的节点211d的鉴 别比特位置231d是5,比7上位。
由此,通过步骤S1323使堆栈指针前进1,堆栈指针指向搜索路径堆 栈上存储有节点210f的数组编号221d的位置。
另外,在源插入关键字为“0****”的上述例的情况下,索引关键字 “1100000000”和插入关键字“1000000000”在第1比特不同。
由此在该例中,通过反复进行步骤S1318~步骤S1322,检查搜索路 径堆栈中积蓄的数组编号的数组元素所存储的分支节点的鉴别比特位置 与比特位置1之间的位置关系,并且依次对搜索路径堆栈进行反向搜索, 直到鉴别比特位置成为上位为止。
结果在步骤S1322中,成为指向鉴别比特位置230a的值是0的根节 点210a的数组编号220的状态。然后,在步骤S1323中堆栈指针前进1, 堆栈指针指向搜索路径堆栈上存储有节点211b的数组编号(220a+1)的位 置。
另外,即使对搜索路径堆栈进行反向搜索而到达根节点,但与先前 求出的在比特序列比较中成为不同比特值的最上位比特位置相比,根节 点的鉴别比特位置也不是上位的比特位置是指以下的情况:在该配对节 点树的索引关键字的上位比特中,比根节点的鉴别比特位置更上位的比 特值全部相等。并且是指如下情况:在插入关键字中,存在比特值一开 始就与比根节点的鉴别比特位置上位的比特值不同的索引关键字。
因此,在这种情况下,待插入节点对成为根节点的直接链接目的地, 根节点的鉴别比特位置变成作为与已有索引关键字不同的值的插入关键 字的最上位比特的位置。
接着,说明步骤S1324以下的对各节点设定数据而完成插入处理的 处理。
在步骤S1324中从搜索路径堆栈取出堆栈指针所指向的数组编号。
在步骤S1325中,针对在步骤S1314中得到的数组编号所指定的数 组元素,对其节点类别写入1(叶节点),对其索引关键字写入插入关键字。
进入步骤S1326,从数组中读出步骤S1324中得到的数组编号的数组 元素。
接着在步骤S1327中,对在步骤S1315中得到的数组编号的数组元 素写入步骤S1326中读出的内容。
最后在步骤S1328中,针对在步骤S1324中得到的数组编号所指定 的数组元素,对其节点类别写入0(分支节点),在其鉴别比特位置中写入 步骤S1317中得到的比特位置,在其代表节点编号中写入步骤S1312中 得到的数组编号,并结束处理。
在源插入关键字是“1101*”的上述例的情况下,在步骤S1325中,将 取得的空节点对的节点[1]设为保持插入关键字的叶节点。
另一方面,在步骤S1327中对节点[0]写入节点210f的内容。然后, 在步骤S1328中,在节点210f的鉴别比特位置中存储7,在代表节点编 号中存储存储有所取得的节点对的代表节点的数组元素的数组编号。
另外,在源插入关键字为“0****”的上述例的情况下,在步骤S1325 中,将取得的空节点对的节点[0]设为保持插入关键字的叶节点。
另一方面,在步骤S1327中对节点[1]写入节点211b的内容。然后在 步骤S1328中,在节点211b的鉴别比特位置231b中存储1,在代表节点 编号中存储存储有所取得的节点对的代表节点的数组元素的数组编号。
如先前所述可知,在存在索引关键字的集合时,从中依次取出索引 关键字,并反复图12~图13C的处理,由此可构建与索引关键字的集合 对应的本发明的配对节点树。
接着,参照图14~图15B来说明根据指定的源删除关键字,从采用 了编码比特序列的检索用配对节点树中删除叶节点的处理。
在图14的步骤S1401中,根据指定的源删除关键字,通过图7的编 码处理来作成删除关键字。接着,在步骤S1402中将配对节点树的根节 点设定为检索开始节点。然后在步骤S1403中,根据删除关键字,从检 索开始节点起对存储有配对节点树的节点的数组进行检索,从配对节点 树中删除包含与删除关键字相等的索引关键字的叶节点。
接着,参照图15A和图15B来详细说明图14的步骤S1403的处理。
图15A是示出作为删除处理前级的检索处理的处理流程的图,大致 相当于在图4所示的检索处理中将删除关键字作为检索关键字的情况。
步骤S1501相当于在图4的步骤S401中将检索开始节点作为根节点 的情况。另外,步骤S1502~步骤S1510的处理与图4的步骤S402~步骤 S410完全对应。因此,省略这些步骤的说明。
在图15A的步骤S1511中对删除关键字和索引关键字进行比较,如 果不相等则在配对节点树中不存在待删除的索引关键字,删除失败,处 理结束。如果相等则进入下一处理、即图15B的步骤S1512以下的处理。
图15B是说明删除处理后级的处理流程的图。
首先,在步骤S1512中判定在搜索路径堆栈中是否存储有两个以上 的数组编号。在没有存储两个以上的数组编号、换言之仅存储有一个的 情况下,该数组编号是存储有根节点的数组元素的数组编号。
在该情况下转入步骤S1518,删除与步骤S1501中得到的根节点的数 组编号相关的节点对。接着进入步骤S1519,删除已登记的根节点的数组 编号而结束处理。
当在步骤S1512中判定为在搜索路径堆栈中存储有两个以上的数组 编号时,进入步骤S1513,将步骤S1508中得到的代表节点编号加上对步 骤S1507中得到的比特值进行反转后的值,得到相加后的数组编号。该 处理求出了配置有与存储了删除对象索引关键字的叶节点成对的节点的 数组编号。
接着在步骤S1514中,从数组读出步骤S1513中得到的数组编号的 数组元素的内容,在步骤S1515中搜索路径堆栈的堆栈指针后退1,取出 数组编号。
接着进到步骤S1516,将步骤S1514中读出的数组元素的内容改写到 步骤S1515中得到的数组编号的数组元素中。该处理将作为链接到存储 有删除对象索引关键字的叶节点的链接源的分支节点置换成与上述叶节 点成对的节点。
最后在步骤S1517中删除与步骤S1508中得到的代表节点编号相关 的节点对,结束处理。
如上所述,删除处理与插入处理的情况相同,无论是否对索引关键 字和删除关键字进行了编码,都通过与图4同样的处理进行从检索开始 节点至叶节点的检索。另外,删除处理中搜索路径堆栈的使用方法也与 图4相同,与图8和图11不同。在这点上,图14~图15B的删除处理与 图12~图13C的插入处理相类似。
以下,针对图5(a)的配对节点树,以指定源删除关键字“1011*”进行 删除处理的情况为例进行说明。
首先,在图14的步骤S1401中根据源删除关键字“1011*”作成删除 关键字“1110111100”,在步骤S1403中,使用该删除关键字进行图15A 和图15B的处理。
关于图15A的处理,最初在步骤S1501中得到根节点的数组编号 220。
接着,通过图15A的处理在搜索路径堆栈中依次压入数组编号220、 (220a+1)、(221b+1)、221c、(220d+1)。然后,在图15A的步骤S1511中, 对存储在数组编号(220d+1)中的节点211e的索引关键字251e与删除关 键字进行比较,两者相等因此进入图15B。
在图15B的步骤S1513中得到数组编号220d,在步骤S1514中读出 存储在数组编号220d中的节点210e的内容。
接着,在步骤S1515中取出数组编号221c,在步骤S1516中对存储 在数组编号221c中的节点210d写入节点210e的内容,在步骤S1517中 删除由数组编号220d表示的节点对201e,删除处理结束。
如以上所说明,在上述插入处理和删除处理中受影响的已有节点的 范围为最小限度,保持了插入和删除的维护成本较低这样的配对节点树 的优点。另外,通过采用上述的编码方法,既能保持该优点又能进行考 虑了无关比特的高速最长一致检索。并且,从考虑了无关比特的高速最 长一致检索所需的成本这一角度出发,例如将上述编码方法与在专利文 献3和专利文献4中进行的复杂前处理相比较,上述编码方法的成本显 著较低。
以上,对用于实施本发明的最优方式进行了详细说明,但本发明的 实施方式不限于此,可进行各种变形。
在上述实施方式中,将与比特值0对应链接的节点[0]作为代表节点, 将与比特值1对应链接的节点[1]作为与代表节点成对的非代表节点。但 是,也可以将节点[1]作为代表节点,将节点[0]作为非代表节点。此外, 根据关于图2B等的说明可知,可任意地将根节点配置在代表节点位置、 或配置在非代表节点位置。
在上述实施方式中,在叶节点的索引关键字中存储有编码比特序列。 但是,也可以将上述实施方式变更为存储除此以外的形式的比特序列作 为叶节点的索引关键字。
由于有着在源比特序列中无关比特不位于有效比特之前这一前提条 件,因此例如也可以仅将源比特序列中的有效比特部分以不编码的形式 存储为索引关键字。在源比特序列为固定长度的情况下,可以根据这种 形式的索引关键字来求出无关比特的比特数。
另外,在这种形式的索引关键字的情况下,源比特序列的长度为编 码比特序列的一半以下,因此可以将叶节点所需的存储容量削减到一半 以下。换言之,能够以相同的叶节点存储容量应对2倍以上长度的比特 序列。总之,存储区域的利用效率提高。
此外,很明显,在利用这种形式的索引关键字的实施方式中,需要 适当改变上述实施方式,例如在图6的步骤S604中对索引关键字进行编 码后与源检索关键字进行比较等。
或者,也可以通过对无关比特设定了任意比特值的比特序列、与表 示有效比特范围的比特序列(例如,掩码比特序列或表示数值的比特序列 等)的组合来表示源比特序列,并存储该组合作为叶节点的索引关键字。
另外在上述实施方式中,提供未编码的源检索关键字作为输入,检 索处理包含编码处理。但是,在提供预先编码后的检索关键字作为输入 的情况下,不需要编码处理。可以说在插入处理和删除处理中也是同样 的。
此外,编码处理还可以通过图7所示的方法以外的方法来实现。例 如可采用如下的方法:通过移位寄存器等使输入比特序列每次移动1比 特,并且从输入比特序列中每次取出1比特,将取出的1比特与识别比 特连接。
另外,还可以采用除了在上述实施方式中使用的编码方法以外的编 码方法。在上述实施方式的编码方法中,将源比特序列中的1比特编码 成编码比特序列中的2比特,也可以采用除了具有这样的1∶2对应关系 的编码方法以外的编码方法。
例如,也可以将源比特序列中的1比特编码成编码比特序列中的3 比特。另外,对于上述实施方式的编码方法的识别比特,当值为0时表 示无关比特,当值为1时表示有效比特,但是反过来也可以。
此外,需要与编码方法相应地对检索处理进行适当改变。例如,在 采用了识别比特0和1的含义与上述实施方式相反的编码方法时,在图8 的步骤S812中需改成:当比特值为0时进入步骤S813,当比特值为1 时进入步骤S809;在步骤S814中需要将与代表节点编号相加的值从1 改成0。另一方面,插入处理和删除处理与编码方法无关,可采用上述实 施方式的方法。
另外,在上述图5中,将“0****”作为源检索关键字时的最长一致关 键字是对“*****”进行编码后的″0000000000″,但在此情况下,最长一致 关键字的源比特序列“*****”所表示的集合包含从“1”开始的比特序列。但 是,从“1”开始的比特序列和源检索关键字“0****”在最上位的第0比特不 同。根据检索目的的不同,有时希望将这样的情况当作检索失败。
因此,考虑分配下述制约:对于最长一致关键字的源比特序列,至 少第0比特是有效比特,最长一致关键字的源比特序列与源检索关键字 之间,必须至少第0比特的值是一致的。为了分配这种制约,可使图6 的处理进行如下的变形。
即,在步骤S604与步骤S606之间追加新的步骤S605,在该步骤S605 中,判定所求出的差分比特位置是否是第0比特。
在差分比特位置为第0比特时,在配对节点树中不存在满足上述制 约的最长一致关键字,因此检索失败,图6的处理结束。另一方面,在 步骤S605中差分比特位置不是第0比特时,处理进入步骤S606。
或者,使该变形例进一步变形,在步骤S605中当差分比特位置为1 以下时结束处理,当差分比特位置为2以上时处理进入步骤S606。
另外,在始终保证检索关键字的有效比特长度比索引关键字的长这 样的应用领域中利用本发明的检索方法的情况下,可以省略图8的步骤 S812,在步骤S811中当鉴别比特位置为偶数时进入步骤S813。
上述检索处理可根据用途进行其他各种变形。
例如在图6的步骤S602中将根节点设定为检索开始节点,也可以将 任意部分树的根节点设定为检索开始节点。
另外,在上述各处理中利用了搜索路径堆栈,但搜索路径堆栈的实 现方法是任意的。在图5中为了容易理解,将搜索路径堆栈分成两列进 行显示,但此图示不限定搜索路径堆栈的实现方法。
此外,在图8的处理中,为了使处理高效,在搜索路径堆栈中存储 鉴别比特位置为偶数的分支节点、和作为其子节点的节点[1]的数组编号。 但是,也可以与插入处理及删除处理同样,在搜索路径堆栈中存储从检 索开始节点到叶节点的路径上的所有节点的数组编号。
在该情况下,可以取代图11的步骤S1107和步骤S1108,而从搜索 路径堆栈中读出分支节点的数组编号,从数组中读出该数组编号的分支 节点来取出代表节点编号。所取出的代表节点编号是该分支节点的子节 点中作为代表节点的节点[0]的数组编号,因此在步骤S1109以后执行与 图11同样的步骤。
或者,对于图8,在步骤S815中在搜索路径堆栈内存储在步骤S814 中得到的作为非终端侧节点的节点[1]的数组编号,但也可以改变上述实 施方式,使得在步骤S815中在搜索路径堆栈内存储作为终端侧节点的节 点[0]的数组编号。
但是,即使在该情况下,也在紧随步骤S815之后的步骤S803中读 出在步骤S814中得到了数组编号的节点[1],这一点与图8相同。在进行 这种变形的情况下,可取代图11的步骤S1107和步骤S1108,直接从搜 索路径堆栈读出节点[0]的数组编号。
此外,显然执行本发明的检索方法、插入方法或删除方法的装置可 通过存储有配对节点树的存储手段、和使计算机执行各流程图所示处理 的程序而构建在计算机上。因此,本发明的实施方式包含上述程序以及 存储有程序的计算机可读取的存储介质。