专利名称:比特序列检索装置、检索方法以及程序的制作方法
技术领域:
本发明涉及从比特序列的集合中检索期望比特序列的检索装置、检索方法以及程 序,尤其涉及对存储比特序列的数据结构进行研究来提高检索速度等的技术领域。
背景技术:
近年来,随着社会信息化的进展,在各个场所都利用大规模的数据库。为了从这样 大规模的数据库中检索记录,通常是将与存储有各记录的地址相对应的记录内的项目作为 索引关键字进行检索,搜索出期望的记录。另外,也可以将全文检索中的字符串视为文档的 索引关键字。并且,由于这些索引关键字用比特序列来表现,因此可以将数据库的检索归结为 比特序列的检索。一直以来,为了高速地进行上述比特序列的检索,对存储比特序列的数据结构进 行了各种研究。作为这样的结构之一,已知有Patricia树这样的树结构。图1示出上述现有检索处理所使用的Patricia树的一例。Patricia树的节点构 成为包含索引关键字、检索关键字的检查比特位置、左右链接指针。虽未明示,但显然节点 中包含用于对与索引关键字对应的记录进行访问的信息。在图1的例子中,保持索引关键字"100010"的节点1750a是根节点,其检查比特 位置是0。节点1750a的左链接1740a与节点1750b连接,右链接1741a与节点1750f连接。节点1750b所保持的索引关键字是〃 010011〃,检查比特位置2030b是1。节点 1750b的左链接1740b与节点1750c连接,右链接1741b与节点1750d连接。节点1750c 所保持的索引关键字是〃 000111",检查比特位置是3。节点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连接,右链接174If与节点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等部分,也必须分配与 节点相同容量的存储区域,存储容量的削减效果不怎么好。并且,也没有改善由反向链接引 起的检索处理的延迟问题,并且很难进行追加删除等处理。另外,在从数据库检索记录时,通常不仅将与数据库的记录1对1地对应的项目的 值作为索引关键字进行检索,还将构成记录的任意项目的值作为检索关键字进行检索。因 为该项目的值根据记录不一定是唯一的,所以在多个记录中进行重复关键字的检索。在下 述专利文献2中记载了使用这种重复关键字的一例。专利文献1 日本特开2001-357070号公报专利文献2 日本特开平11-96058号公报因此,本发明要解决的课题是提供一种能进行重复关键字的检索且所需的存储容 量小、检索速度为高速、具有容易进行数据维护的数据结构的比特序列检索装置以及检索 方法。作为解决上述现有检索方法中的问题点的方法,本申请人在日本特愿 2006-187827中提出了采用配对节点树的比特序列检索,该配对节点树是由根节点、以及配 置在相邻存储区域中的分支节点和叶节点、或者分支节点之间或叶节点之间的节点对构成 的用于比特序列检索的树,根节点是表示树的起点的节点,当该树的节点为一个时根节点 是叶节点,当树的节点为两个以上时根节点是上述分支节点,上述分支节点包含进行比特 序列检索的检索关键字的鉴别比特位置和表示链接目的地节点对的一个节点的代表节点 的位置的位置信息,上述叶节点包含由检索对象的比特序列构成的索引关键字。在上述申请中,示出根据所赋予的索引关键字集合来生成配对节点树的方法和从 配对节点树中检索单一索引关键字的方法等采用了配对节点树的基本检索方法。
6
另外,在比特序列的检索中,存在求出最小值、最大值、求出某范围的值等各种检 索要求。因此,本申请人在日本特愿2006-293619中提出了求出配对节点树的任意部分树 所包含的索引关键字的最大值/最小值的方法等。此外,本申请人在日本特愿2007-114915中提出了下述配对节点树以及采用该配 对节点树的各种检索处理,对于该配对节点树,将索引关键字配置在不同于配对节点树的 区域内,在叶节点中取代索引关键字而存储有表示配置索引关键字的存储区域的位置的信 肩、ο但是,上述配对节点树的结构基于索引关键字彼此间的比特值不同的位置即差分 比特位置,因此在这种状态下无法处理重复关键字。
发明内容
本发明的目的在于能够在应用了该配对节点树的高速检索方法中处理重复关键字。根据本发明的一个方式,通过组合多个关键字作为关键字序列,使关键字序列的 末尾关键字成为不重复的唯一关键字,由此将由多个关键字的关键字序列构成的索引关键 字构成为唯一关键字。并且,在上述配对节点树的叶节点中存储第2位置信息,该第2位置 信息表示配置有该唯一关键字的存储区域的位置。检索关键字是组合多个关键字作为关键 字序列、且关键字序列的末尾关键字唯一的检索关键字序列。在分支节点中,具有第1鉴别 位置和第2鉴别位置,该第1鉴别位置表示进行比特序列检索的检索关键字序列中的、进行 比特序列比较的关键字的位置信息,该第2鉴别位置表示该关键字的鉴别比特位置。另外, 分支节点包含第1位置信息,该第1位置信息表示作为链接目的地节点对的一个节点的代 表节点的位置。采用具有以上这样的数据结构的配对节点树,从检索关键字序列中取出分支节点 的第1鉴别位置的关键字,根据该关键字的第2鉴别位置(鉴别比特位置)的比特值,链接 到链接目的地节点对中的某一节点,进行上述处理直至到达叶节点为止,利用存储在叶节 点内的表示存储区域位置的信息,取得配置在该存储区域内的索引关键字,由此实施基于 上述检索关键字序列的检索。根据本发明,能对重复关键字进行处理,并且能进行更高速的比特序列数据的检 索。而且还能容易地执行比特序列数据的追加删除。
图1是示出在现有检索中采用的Patricia树的一例的图。图2A是说明存储在数组中的配对节点树的结构例的图。图2B是概念性示出配对节点树的树结构的图。图3是说明用于实施本发明的硬件结构例的图。图4是说明本发明一实施方式的检索处理的流程图。图5是说明本发明一实施方式的作为插入处理前级的检索处理的处理流程的图。图6是说明准备用于本发明一实施方式的插入处理的待插入节点对的数组元素 的处理流程的图。
图7是说明求取插入节点对的位置、写入节点对的各节点的内容来完成插入处理 的处理流程的图。图8A是说明本发明一实施方式的包含根节点插入处理的叶节点插入处理整体的 处理流程的图。图8B是说明本发明一实施方式的关键字序列比较处理的处理流程的图。图9是说明本发明一实施方式的作为删除处理前级的检索处理的处理流程的图。图10是说明本发明一实施方式的删除处理后级的处理流程的图。图IlA是例示说明删除处理前的配对节点树和删除关键字序列的图。图IlB是说明删除处理后的配对节点树的图。图12A是例示说明插入处理前的配对节点树和插入关键字序列的图。图12B是说明插入处理后的配对节点树的图。
具体实施例方式以下,作为用于实施本发明的优选方式,说明在数组中存储配对节点树的例子。作 为分支节点所保持的表示链接目的地代表节点的位置的数据,还可以为存储装置的地址信 息,可以通过采用由可存储分支节点或叶节点中占有区域的存储容量大的一方的数组元素 构成的数组,由此利用数组编号来表示节点位置,可削减表示代表节点位置的位置信息的
fn息里。图2A是说明本发明一实施方式的存储在数组内的配对节点树的结构例的图。参照图2A,节点101配置在数组100的数组编号10的数组元素内。节点101由节 点类别102、第1鉴别位置103a、第2鉴别位置103以及代表节点编号104构成。节点类别 102是0,表示节点101是分支节点。在第1鉴别位置103a中存储0,表示对检索关键字序 列的第0位置的关键字进行比特序列比较。在第2鉴别位置103中存储1。在代表节点编 号104中存储链接目的地的节点对的代表节点的数组编号20。此外,以下为了简化表述,有 时将存储在代表节点编号内的数组编号称为代表节点编号。另外,有时还利用对该节点赋 予的标号或者对节点对赋予的标号来表示存储在代表节点编号内的数组编号。此外,还将 第1鉴别位置或第2鉴别位置所存储的值简称为第1鉴别位置或第2鉴别位置。在数组编号20的数组元素中存储有节点对111的代表节点即节点W] 112。并 且在相邻的下一数组元素(数组编号20+1)中存储与代表节点成对的节点[1]113。节点 W] 112与节点101同样是分支节点。在节点W] 112的节点类别114中存储0,在第1鉴别 位置115a中存储1,在第2鉴别位置115中存储3,在代表节点编号116中存储30。另外, 节点[1]113由节点类别117和参照指针118a构成。在节点类别117中存储1,表示节点 [1]113是叶节点。在参照指针118a中存储参照索引关键字的存储区域的指针。参照指针 118a所存储的数据是上述第2位置信息的具体例。以下为了简化表述,有时还将参照指针 所存储的数据称为参照指针。关于Patricia树与先前叙述的相同,显然还需要用于对与索引关键字对应的记 录进行访问的访问目的地信息。例如,可以通过在与存储索引关键字的存储区域相邻的存 储区域中,存储与该索引关键字对应的访问目的地信息,来进行索引关键字和访问目的地 信息的对应。以下,省略说明访问目的地信息。
此外,有时用节点
来表示代表节点,用节点[1]来表示与代表节点成对的节 点。另外,有时将存储在某数组编号的数组元素中的节点称为该数组编号的节点,有时还将 存储有节点的数组元素的数组编号称为节点的数组编号。省略由存储在数组编号30和31的数组元素中的节点122和节点123构成的节点 对121的内容。对存储有节点
112、节点[1] 113、节点122以及节点123的数组元素分别赋予 的0或1,表示在利用检索关键字序列进行检索时链接到节点对的哪个节点。对代表节点编 号加上检索关键字序列中位于前级分支节点的第1鉴别位置的关键字(以下,有时称为检 索关键字。)的位于第2鉴别位置(以下,有时称为鉴别比特位置。)的比特值0或1,链接 到相加后所得到的数组编号的节点。因此,可以通过对前级分支节点的代表节点编号加上位于前级分支节点的第1鉴 别位置的检索关键字的、位于鉴别比特位置的比特值,来求出存储有链接目的地节点的数 组元素的数组编号。此外,在上述例中代表节点编号采用配置有节点对的数组编号中较小的一方,显 然也可以采用较大的一方。图2B是概念性示出本实施方式的配对节点树的树结构和检索关键字序列(以下, 有时称为索引关键字。)的存储区域的图。图2B(1)所示的是配对节点树的树结构。用标 号210a示出的是根节点。在图示的例中,根节点210a是配置在数组编号220中的节点对 201a的代表节点。作为树结构,在根节点210a的下方配置有节点对201b,在节点对201b的下层配 置有节点对201c和节点对201f,在节点对201f的下层配置有节点对201h和节点对201g。 在节点对201c的下方配置有节点对201d,并且在节点对201d的下方配置有节点对201e。在各节点的前方赋予的0或1的标号与在图2A中说明的数组元素的前方赋予的 标号相同。根据检索关键字的鉴别比特位置的比特值来搜索树,找到与检索对象的索引关 键字对应的叶节点。在所图示的例子中示出,根节点210a的节点类别260a为0表示是分支节点,第1 鉴别位置240a示出0,鉴别比特位置230a示出0。代表节点编号是220a,其是存储有节点 对201b的代表节点210b的数组元素的数组编号。 节点对20Ib由节点2IOb和21 Ib构成,这些节点的节点类别260b、26Ib都是0,表 示为分支节点。在节点210b的第1鉴别位置240b中存储0,在鉴别比特位置230b中存储 1,在链接目的地的代表节点编号中存储有存储节点对201c的代表节点210c的数组元素的 数组编号220b。在节点210c的节点类别260c中存储1,所以该节点是叶节点,因此,含有参照指针 250c。在图示的例子中,在参照指针250c中存储下述指针,该指针参照存储有由第1关键 字290c和第2关键字290c ‘构成的索引关键字的存储区域。参照指针250c所存储的数据 也称为参照指针,用标号280c来表示。其它叶节点也同样,将参照指针和参照指针所存储 的数据都用参照指针这样的表达来描述。图2B(2)示出了连续设置多个索引关键字的存储区域的例子,将这些连续的存储 区域整体示作索引关键字存储区域311,不过索引关键字也可以不存储在连续的区域内。另外,树结构上叶节点彼此间的关系也可以与索引关键字存储区域311中的索引关键字的配
置顺序无关。返回到节点对201c的说明,与代表节点210c成对的另一个节点211c的节点类别 261c是0,第1鉴别位置241c是1,鉴别比特位置231c是0,在代表节点编号中存储有存储 节点对201d的代表节点210d的数组元素的数组编号221c。节点2IOd的节点类别260d是0,第1鉴别位置240d是1,鉴别比特位置230d 是2,在代表节点编号中存储有存储节点对201e的代表节点210e的数组元素的数组编号 220d。与节点210d成对的节点21 Id的节点类别261d是1,在参照指针251d中存储参照 指针281d,该参照指针281d表示存储有〃 011010"、“ 1000〃这样的关键字序列291d、 291d'的存储区域。节点对201e的节点210e、211e的节点类别260e、261e都是1,表示双方都是叶节 点。在节点210e、211e的参照指针250e、251e中分别存储有参照指针280e、281e,参照指针 280e指向存储有"011010"、" 0101〃这样的关键字序列290e,参照指针281e指向存储 有"011010"、“ 0110"这样的关键字序列291e'。在节点对201b的另一个节点即节点211b的第1鉴别位置241b中存储0,在鉴别 比特位置231b中存储2,在链接目的地的代表节点编号中存储有存储节点对201f的代表节 点210f的数组元素的数组编号221b。节点对201f的节点210f、211f的节点类别260f、261f都是0,双方都是分支节 点。在第1鉴别位置240f、241f中分别存储有0、1,在鉴别比特位置230f、231f中存储有 5、2。在节点210f的代表节点编号中存储有存储节点对201g的代表节点210g的数组元素 的数组编号220f,在节点211f的代表节点编号中存储有存储节点对201h的代表节点即节 点W]210h的数组元素的数组编号221f。节点对201g的节点210g、211g的节点类别260g、261g都是1,表示双方都是叶节 点。在节点210g、211g各自的参照指针250g、251g中存储有参照指针280g、281g,参照指针 280g指向存储有"100010〃、〃 0100〃这样的关键字序列290g、290g'的存储区域,参照 指针281g指向存储有〃 100011〃、〃 0011〃这样的关键字序列291g、291g'的存储区域。另外示出,相同的节点对201h的代表节点即节点
210h和与其成对的节 点[l]211h的节点类别260h、261h都是1,表示双方都是叶节点。在节点210h、211h 各自的参照指针250h、251h中存储有参照指针280h、281h,参照指针280h指向存储 有〃 101100"、“ 0001这样的关键字序列290h、290h'的存储区域,参照指针281h指向 存储有"101100"、“ 0010〃这样的关键字序列291h、291h'的存储区域。以下,简单说明从上述树中检索索引关键字〃 1011000010〃的处理的流程。上述 索引关键字是由第1关键字"101100"和第2关键字"0010"构成的关键字序列。第1 鉴别位置以及第2鉴别位置(鉴别比特位置)从左开始为0、1、2、...。首先,将比特序列〃 1011000010〃作为检索关键字序列从根节点210a起开始处 理。因为根节点210a的第1鉴别位置240a是0,鉴别比特位置230a是0,所以当观察检索 关键字序列的第1关键字"101100"的鉴别比特位置为0的比特值时该值是1。因此链接 到对存储有代表节点编号的数组编号220a加1得到的数组编号的数组元素所存储的节点 211b。因为在节点211b的第1鉴别位置241b上存储0、在鉴别比特位置231b上存储2,所以当观察第1关键字"101100"的鉴别比特位置为2的比特值时该值是1,因此链接到存 储有代表节点编号的数组编号221b的数组元素所存储的节点211f。因为在节点211f的第1鉴别位置241f上存储1、在鉴别比特位置231f上存储2, 所以当观察第2关键字"0010"的鉴别比特位置为2的比特值时该值是1,因此链接到存 储有代表节点编号的数组编号221f的数组元素所存储的节点211h。节点211h的节点类别261h是1表示为叶节点,所以参照由参照指针281h示出的 存储区域,读出在该存储区域中存储的索引关键字即关键字序列291h、291h'。通过这种方 式来进行采用了配对节点树的检索。当将读出的关键字序列与检索关键字比较时,可知在 上述例的情况下是一致的。此外,在上述说明中,将识别检索关键字序列中的关键字位置的第1鉴别位置,以 从左起0、1、2、...这样的方式设为与关键字的排列顺序对应的关键字位置编号,但不限于 此,例如也可以通过设检索关键字序列整体的离开开头比特的偏移值、或者交替使用0和1 来表示关键字位置切换的方式,由此识别关键字的位置。接着,参照图2B对配对节点树结构的意思进行说明。配对节点树的结构是由索引关键字的集合规定的。在图2B的例子中,根节点的第 1鉴别位置240a为0反映了下述情况在索引关键字的第1关键字中存在不同的值,即不 是所有的第1关键字都重复。根节点210a的鉴别比特位置230a为0是因为,在索引关键 字的开头关键字即第1关键字中具有第0比特为0的值和第0比特为1的值。第1关键字 的第0比特为0的索引关键字的组被分类于节点210b之下,第0比特为1的索引关键字的 组被分类于节点211b之下。节点211b的鉴别比特位置231b是2反映了下述索引关键字集合的性质其下位 的叶节点211h、210h、211g、210g所对应的索引关键字的第1关键字的第1比特全部为0而 相等,从第2比特起才不同。节点211b的紧接下位的节点对201f的节点211f的第1鉴别位置为1反映了节 点211f下位的叶节点211h、210h所对应的索引关键字的第1关键字290h、291h重复,表示 接着通过第2关键字290h'、291h'的比特序列来确定配对节点树上的节点位置。并且,节 点211f的鉴别比特位置231f为2是因为,第2关键字290h'、291h'从开头起在第2比特 成为不同的值,反映其比特值在与各个索引关键字对应的位置上配置有叶节点211h、210h。另一方面,在第1关键字的第2比特为0的索引关键字中,第3比特和第4比特都 相等而在第5比特不同,因此在节点210f的鉴别比特位置230f中存储5。在索引关键字中 第1关键字的第5比特为1的值和第5比特为0的值分别仅有1个,因此节点210f的链接 目的地的节点210g、211g是叶节点,在参照指针250g和251g中分别存储参照指针280g、 281g,参照指针280g指向存储有关键字序列290g、290g'的存储区域,参照指针281g指向 存储有关键字序列291g、291g'的存储区域。即使在索引关键字的集合内包含〃 1011010001 〃或〃 1011100001 〃来取 代〃 1011000001",由于第1关键字到第3比特为止以及第2关键字与"1011000001"相 等,因而只是由节点210h的参照指针280h指示的存储区域所存储的索引关键字的值改变, 树结构本身不会改变。但是,当除了〃 1011000001〃之外还包含〃 1011000000〃时,节点 210h成为分支节点,其鉴别比特位置成为3。
11
如以上说明的那样,配对节点树的结构是由索引关键字集合中包含的各索引关键 字的各比特位置的比特值所确定的。进一步说来,针对成为不同比特值的每个比特位置,分支成比特值为“1”的节点、 和比特值为“0”的节点,所以当优先节点“1”侧和树的深度方向来搜索叶节点时,存储在节 点中的索引关键字成为与节点211h对应的索引关键字"1011000010"、与节点210h对应 的索引关键字〃 1011000001"...、与节点210c对应的索引关键字"0001110111 〃,以降 序的方式排序。S卩,在配对节点树中,索引关键字以排序的方式配置在树上。当利用检索关键字序列进行检索时,搜索在配对节点树上配置有索引关键字的 路径,例如,如果检索关键字序列是〃 1011000001〃则可到达节点210h。并且,根据上述 说明还可以想到,即使在将〃 1011000000〃作为检索关键字序列的情况下,也会到达节点 210h,获得由参照指针280h指示的存储区域所存储的索引关键字,作为检索结果关键字序 列。另外,例如在利用"1001001001 〃进行检索的情况下,在节点210a、211b、210f 的链接路径中,不使用检索关键字序列的第1关键字的第3比特和第4比特,第1关键字 的〃 100100"的第5比特为0,因此与利用"1000100100"进行检索的情况相同,到达节点 210g。这样,采用与存储在配对节点树中的索引关键字的比特结构对应的第1鉴别位置和 第2鉴别位置(鉴别比特位置)来进行分支。图3是说明用于实施本发明的硬件结构例的图。利用至少具有中央处理装置302以及缓存存储器303的数据处理装置301采用数 据存储装置308来实施本发明的检索装置的检索处理以及数据维护。数据存储装置308可 利用主存储装置305或外部存储装置306来实现,或者还可以采用经由通信装置307连接 的配置于远方的装置,数据存储装置308具有配置有配对节点树的数组309、对存储有在 检索中搜索到的节点的数组元素的数组编号进行存储的搜索路径堆栈310以及索引关键 字存储区域311。图2A的数组100是数组309的一例。另外,与图2B相同,索引关键字存 储区域311以连续区域的方式进行了图示,但显然也可以是不连续的区域。此外,因为以在 数组内配置配对节点树进行说明,所以虽然说明了在搜索路径堆栈310内存储对在检索中 搜索到的节点进行了存储的数组元素的数组编号,但一般情况下,对存储有节点的存储区 域的地址等表示节点位置的信息进行存储。在图3的例示中,主存储装置305、外部存储装置306以及通信装置307利用一根 总线304与数据处理装置301连接,但连接方法不限于此。另外,可以将主存储装置305作 为数据处理装置301内的装置,或者还可以将搜索路径堆栈310实现为中央处理装置302 内的硬件。或者,显然可以根据可使用的硬件环境、索引关键字集合的大小等来适当选择硬 件结构,例如将数组309保持在外部存储装置306内,将搜索路径堆栈310保持在主存储装 置305内等。另外,虽未特别图示,但显然为了在之后的处理中使用在处理中途获得的各种值 而采用与各个处理对应的临时存储区域。在以下的说明中,与先前所述的第1鉴别位置等 的情况相同,有时利用临时存储区域的名字来称呼临时存储区域所存储或设定的值。如图3所示,由存储有配对节点树的节点的数组元素构成的数组309和索引关键字存储区域311是不同的区域。因此,与在存储有叶节点的数组元素中包含索引关键字的 情况相比,在图3的结构中,通常1个数组元素所需的存储区域的量较少。即,通过从存储 配对节点树的数组309中分离索引关键字存储区域311,由此可以在对缓存存储器303读入 配对节点树的过程中,增加每个缓存块所存储的节点数。由此,在后述的检索处理等中,缓 存未命中的频率减少,更高速地进行处理。接着,依次详细说明本发明一实施方式的采用配对节点树的基本操作即检索、插 入、删除。图4是示出一实施方式的比特序列检索处理的流程图。首先,在步骤S401a中,取得检索开始节点的数组编号。与所取得的数组编号对应 的数组存储有构成配对节点树的任意节点。在之后说明的各种应用检索中进行检索开始节 点的指定。所取得的检索开始节点的数组编号被设定在未图示的检索开始节点设定区域内, 该检索开始节点设定区域是先前所述的“为了在之后的处理中使用在处理中途获得的各种 值而与各个处理对应的临时存储区域”之一。在以下的说明中,有时还改变“设定在未图示 的检索开始节点设定区域”这样的表述,而记述为“获得检索开始节点的数组编号。”、“设定 为检索开始节点”或者简述为“设定成检索开始节点”。接着在步骤S401b中,之后对保存第1鉴别位置的值的临时存储区域即保存鉴别 位置设定初始值。由于索引关键字开头关键字序列的第1鉴别位置设为0,因此在初始值中 设定负值。接着,在步骤S402中,在搜索路径堆栈中存储所取得的数组编号,在步骤S403中, 读出与该数组编号对应的数组元素作为应参照的节点。然后,在步骤S404中,从所读出的 节点中取出节点类别,在步骤S405中,判定节点类别是否是分支节点。在步骤S405的判定中,所读出的节点是分支节点的情况下,进到步骤S406a。在步 骤S406a中从节点取出第1鉴别位置,在下一步骤S406b中,判定在步骤S406a取出的第1 鉴别位置是否与保存鉴别位置一致。在第1鉴别位置与保存鉴别位置一致的情况下,转到步骤S406,在不一致的情况 下进到步骤S406c,从检索关键字序列中取出在步骤S406a取出的第1鉴别位置所指的关键 字,设定为检索关键字。接着,在步骤S406d中对保存鉴别位置设定步骤S406a中取出的第1鉴别位置,进 到步骤S406。在步骤S406中,从在步骤S403读出的节点中取出第2鉴别位置(鉴别比特位置), 进而在步骤S407中,从检索关键字中取出与所取出的鉴别比特位置对应的比特值。然后, 在步骤S408中,从在步骤S403读出的节点中取出代表节点编号,在步骤S409中,将从检索 关键字取出的比特值与代表节点编号相加,作为新的数组编号返回步骤S402。以后,反复从步骤S402到步骤S409的处理,直到在步骤S405的判定中判定为叶 节点而进到步骤S410a为止。在步骤S410a中,从叶节点取出参照指针,结束检索。接着,利用图5 图8A来说明配对节点树中的节点插入处理。图5 图7是说明 通常的插入处理的图,图8A是说明根节点的插入处理的图。由于通过根节点的插入处理和 通常的插入处理生成配对节点树,所以节点插入处理的说明也是配对节点树的生成处理的说明。图5是示出作为插入处理前级的检索处理的处理流程的图,相当于在图4所示的 检索处理中,将插入关键字序列作为检索关键字序列、将检索开始节点作为根节点。首先,在步骤S501a中对检索开始节点设定根节点的数组编号,在步骤S501b中把 插入关键字序列设定为检索关键字序列。作为插入处理的前提条件,预先取得索引关键字 存储区域的指针,插入关键字序列存储在该存储区域内。插入关键字序列末尾的关键字在 全部索引关键字中取唯一的值。接着,在步骤S510a中,利用检索关键字序列从检索开始节点起进行图4所示的检 索处理,取得参照指针,在步骤S510b中取出该参照指针指向的关键字序列,设定为比较关 键字序列。接着在步骤S510c中,依次比较插入关键字序列的关键字和比较关键字序列的关 键字。比较的结果是,输出表示比较关键字序列与插入关键字序列是否完全一致的信息。 在不完全一致的情况下,将第一个不一致关键字的位置设定为第1鉴别位置,并且将插入 关键字序列中的该第1鉴别位置的关键字设定为插入关键字,将比较关键字序列中的该第 1鉴别位置的关键字设定为比较关键字。步骤S510C的详细在后文中参照图8B进行说明。接着在步骤S511a中,作为步骤S510c的比较结果,判定插入关键字序列的关键字 与比较关键字序列的关键字是否完全相等,如果相等则插入关键字序列已经存在于配对节 点树的参照指针所指向的存储区域内,所以插入失败,处理结束。如果不相等则进到下一处 理、图6的步骤S512以下的处理。图6是说明准备用于待插入节点对的数组元素的处理的处理流程图。在步骤S512中,从数组中求出空的节点对,取得在该节点对中应成为代表节点的 数组元素的数组编号。进到步骤S513a,比较在步骤S510c中获得的插入关键字和比较关键字的大小,在 插入关键字大时获得值1的布尔值,在插入关键字小时获得值0的布尔值。进到步骤S514,将在步骤S512获得的代表节点的数组编号与在步骤S513获得的 布尔值相加,得到相加后的数组编号。进到步骤S515,将在步骤S512获得的代表节点的数组编号与在步骤S513获得的 布尔值的逻辑非值相加,得到相加后的数组编号。在步骤S514取得的数组编号是存储具有下述参照指针的叶节点的数组元素的数 组编号,该参照指针指向存储插入关键字序列作为索引关键字的存储区域,在步骤S515取 得的数组编号是存储与该叶节点构成节点对的节点的数组元素的编号。即,根据在前级检索处理中获得的叶节点所对应的索引关键字与插入关键字序列 的大小,来确定在待插入节点对中的哪个节点中存储保持指向插入关键字序列的参照指针 的叶节点。例如在图2B的配对节点树中插入插入关键字序列〃 0110111001〃的情况下,检 索结果的索引关键字为与节点211d对应的关键字序列"0110101000"。当依次比较插入 关键字序列和检索结果的关键字序列的关键字时,第1关键字不一致,通过第1关键字彼此 间的大小比较来求出布尔值,在当前的例子中插入关键字序列的第1关键字大,所以获得 布尔值1,在待插入节点对的代表节点编号与1相加所得的数组元素中,存储保持指向插入关键字序列的参照指针的叶节点。另一方面,指向索引关键字"0110101000"的参照指针 281d存储在将利用大小比较获得的布尔值逻辑反转后得到的值与代表节点编号相加所得 的数组编号的数组元素中。此时,因为检索结果的索引关键字的第1关键字291d" 011010"与插入关键字序 列的第1关键字〃 011011"在第5比特不同,所以节点211d成为鉴别比特位置设为5、代 表节点编号设为待插入节点对的代表节点的数组编号的分支节点。另外,要在图2B的配对节点树内插入〃 0110011010〃的情况下,检索结果也为与 节点211d对应的"0110101000"的值的索引关键字。在该情况下插入关键字序列与检 索结果的关键字序列的第1关键字也不一致,在该情况下,因为插入关键字序列的第1关 键字小所以获得布尔值0,在待插入节点对的代表节点编号与0相加所得的数组元素中, 存储保持指向插入关键字序列的参照指针的叶节点。而且,因为索引关键字的第1关键字 291d〃 011010〃与插入关键字序列的第1关键字〃 011001〃在第4比特不同,所以节点 211d成为鉴别比特位置设为4、代表节点编号设为待插入节点对的代表节点的数组编号的 分支节点。接下去,在步骤S516中,例如利用逻辑“异或”对在步骤S510c获得的插入关键字 与比较关键字进行比特序列比较,获得差分比特序列。进到步骤S517,从在步骤S516获得的差分比特序列中,获得从上位第0比特起观 察到的第一个不一致比特的比特位置(以下,有时称为差分比特位置。)。对于处理,例如 可在具有优先编码器的CPU中,向该优先编码器输入差分比特序列,获得不一致的比特位 置。另外,也可以软件的方式进行与优先编码器等同的处理,获得第一个不一致比特的比特位置。在步骤S517之后,进行图7所示的步骤S518以下的处理。图7是示出在图6中准备的数组元素内存储节点并且求出其插入位置、变更现有 节点的内容来完成插入处理的处理流程的图。步骤S518 步骤S523的处理是求出待插入节点对在配对节点树上的位置的处 理,步骤S524以下的处理是在各节点中设定数据来完成插入处理的处理。在步骤S518中,判定搜索路径堆栈的堆栈指针是否指向根节点的数组编号。如果 指向则转到步骤S524,如果没有指向则进到步骤S519。在步骤S519中,使搜索路径堆栈的堆栈指针后退1,取出堆栈在此的数组编号。进到步骤S520,从数组中读出在步骤S519取出的数组编号的数组元素作为节点。进到步骤S520a,从在步骤S520读出的节点中取出第1鉴别位置,在步骤S520b 中,对在步骤S520a取出的第1鉴别位置"A"与在步骤S510c取得的第1鉴别位置"B" 进行大小比较。如果A > B,则返回步骤S518,如果A = B,则进到步骤S521,如果A < B,则进到步
马聚S5 2 3 ο在步骤S521中,从在步骤S520读出的节点中取出第2鉴别位置(鉴别比特位置), 进到步骤S522,判定在步骤S521取出的鉴别比特位置是否是比在步骤S517取得的差分比 特位置上位的位置关系。这里所谓上位的位置关系是指比特序列的更左侧的位置、即比特 位置的值较小的位置。
如果步骤S522的判定结果是否定的,则返回步骤S518进行反复,直到在步骤S518 中的判定为肯定、或者在步骤S520b中判定为A < B、或者在步骤S522中的判定为肯定为 止。当在步骤S522的判定为肯定时,进到步骤S523。在步骤S523中,搜索路径堆栈的堆栈指针前进1,转到步骤S524以下的处理。关于在上述步骤S518 步骤S523中说明的处理,为了确定待插入节点对的插入 位置,调查存储在搜索路径堆栈中的分支节点的第1鉴别位置(A)与在步骤S510c取得的 第1鉴别位置(B)之间的相对位置关系,如果A < B则将分支节点的链接目的地设为待插 入节点对的插入位置;如果A = B,针对利用待插入索引关键字(插入关键字)与通过检索 取得的索引关键字(比较关键字)之间的比特序列比较成为不同比特值的差分比特位置, 调查该差分比特位置与存储在搜索路径堆栈中的分支节点的鉴别比特位置之间的相对位 置关系,将鉴别比特位置为上位的分支节点的下一分支节点的链接目的地作为待插入节点 对的插入位置。另外,在对搜索路径堆栈进行反向搜索而到达根节点时,根节点的链接目的地成 为插入位置。例如在图2B的配对节点树中插入〃 1110000000〃时,检索结果的索引关键字 成为对应于节点210h的"1011000001 "。在此例的情况下,第1鉴别位置(A)是1(第 1鉴别位置241f)、第1鉴别位置⑶是0,所以A > B,当链接路径返回节点211b时,第 1鉴别位置241b是0,所以A = B。在当前例的情况下,插入关键字〃 111000〃与比较关 键字〃 101100〃的差分比特位置是1,鉴别比特位置231b是2,因此进一步追溯到根节点 210a。根节点210a的鉴别比特位置230a是0,比差分比特位置1上位,所以堆栈指针指 向220a。因此,插入位置是节点211b的链接目的地。当插入节点对时,如后所述,分支节点 211b的鉴别比特位置成为差分比特位置的值1。此外,A < B例如是对第1关键字不重复的索引关键字插入包含重复的第1关键字 的插入关键字序列的情况,在图2B的例子中,当赋予插入关键字序列"1000101001"时, 第1鉴别位置(A)是第1鉴别位置240f,值是0,第1鉴别位置(B)的值是1,A < B成立, 节点210g成为插入位置,为待插入节点对的紧接上位的分支节点。接下来,说明步骤S524以下对各节点设定数据来完成插入处理的处理。在步骤S524中从搜索路径堆栈内取出堆栈指针所指向的数组编号。进到步骤S525d,针对在步骤S514取得的数组编号所指向的数组元素,对节点类 别写入叶节点,对参照指针写入插入关键字序列的指针。进到步骤S526,从数组中读出在步骤S524取得的数组编号的数组元素。接着在步骤S527中,在步骤S515取得的数组编号的数组元素中写入在步骤S526 读出的内容。最后在步骤S528a中,针对在步骤S524取得的数组编号所指向的数组元素,对节 点类别写入分支,对第1鉴别位置写入在步骤S510c取得的第1鉴别位置,对第2鉴别位置 写入在步骤S517取得的比特位置,对代表节点编号写入在步骤S512取得的数组编号,结束处理。在将插入关键字序列〃 1110000000 〃插入到上述图2B的配对节点树的例子中,在步骤S525d中,将取得的空节点对的节点[1]作为保持指向插入关键字序 列"1110000000"的参照指针的叶节点,在步骤S527中,在节点
中写入节点211b的内 容。然后,在步骤S528a中,在节点211b的节点类别中存储0,在第1鉴别位置中存储0,在 鉴别比特位置中存储通过比特序列比较而获得的差分比特位置1,在代表节点编号中存储 存储有所取得的节点对的代表节点的数组元素的数组编号。图8A是说明本发明一实施方式的包含根节点插入处理的叶节点的插入处理整体 的处理流程的图。在步骤S551中,判定是否登记了要取得的配对节点树的根节点的数组编号。如果 登记完毕,则进行采用图5 图7说明的通常插入处理。如果步骤S551中的判定不是登记完毕,则开始全新的配对节点树的登记、生成。 即使在该情况下,作为插入处理的前提条件,预先取得索引关键字的存储区域的指针,插入 关键字序列存储在该存储区域内。首先,在步骤S552中,从数组中求出空的节点对,取得该节点对中应成为代表节 点的数组元素的数组编号。接着在步骤S553中,求出将在步骤S552取得的数组编号与0 相加所得的数组编号。(实际上,等于在步骤S552取得的数组编号。)接着,在步骤S554d 中,针对在步骤S553取得的数组编号的数组元素、即与待插入的根节点对应的数组元素, 对节点类别写入叶节点,对参照指针写入插入关键字序列的指针。然后,在步骤S556中,登 记在步骤S553取得的根节点的数组编号,结束处理。如先前所述,显然在具有索引关键字集合时,通过从该集合中依次取出索引关键 字,反复图8A以及图5 图7的处理,由此可以构建与索引关键字集合对应的本发明的配 对节点树。接着,参照图8B说明在先前所述的图5所示的步骤S510c中执行的本发明一实施 方式的关键字序列比较处理的处理流程。如图所示,在步骤SlOl中,对鉴别位置设定值"0"作为初始值。在步骤S102中,判定序列中的所有关键字是否处理完毕,如果处理完毕则输出完 全一致的信息,结束处理,如果没有处理完毕则进到步骤S103。在步骤S103中,从插入关键字序列中取出鉴别位置所指向的关键字,设定为插入
关键字。进到步骤S104,从在图5所示的步骤S510b设定的比较关键字序列中取出鉴别位 置所指向的关键字,设定为比较关键字。接着进到步骤S105,判定插入关键字与比较关键字是否一致。如果一致则在步骤 S106中更新设定为鉴别位置的值,返回步骤S102,如果不一致,则转入步骤S107将鉴别位 置设定为第1鉴别位置,并且输出非完全一致,结束处理。接下来,参照图9、图10,说明本发明一实施方式的从配对节点树中删除与特定索 弓I关键字对应的叶节点的处理流程。图9是示出作为删除处理前级的检索处理的处理流程的图,相当于在图4所示的 检索处理中,将删除关键字序列作为检索关键字序列、将检索开始节点作为根节点。首先,在步骤S901a中把根节点的数组编号设定为检索开始节点,在步骤S901b中 把删除关键字序列设定为检索关键字序列。
接着,在步骤S910a中,利用检索关键字序列从检索开始节点起进行图4所示的检 索处理,取得参照指针,在步骤S910b中取出该参照指针所指向的关键字序列,设定为比较 关键字序列。接着在步骤S910c中,设定删除关键字序列末尾的关键字作为删除关键字,在步 骤S910d中,设定比较关键字序列末尾的关键字作为索引关键字。在步骤S911中比较在步骤S910c设定的删除关键字和在步骤S910d设定的索引 关键字,如果不相等,则在配对节点树中不存在要删除的索引关键字,因此删除失败,处理 结束。如果相等则进到下一处理即图10的步骤S912以下的处理。此外,之所以比较上述 关键字序列中末尾关键字是因为,末尾关键字是不重复的唯一关键字。图10是说明删除处理后级的处理流程的图。首先,在步骤S912中判定在搜索路径堆栈内是否存储有2个以上的数组编号。所 谓没有存储2个以上的数组编号换言之就是仅有1个,该数组编号是存储有根节点的数组 元素的编号。在该情况下转至步骤S918,删除在步骤S901a取得的根节点的数组编号所涉 及的节点对,结束处理。在步骤S912中判定为在搜索路径堆栈内存储有2个以上的数组编号时,进到步骤 S913a,将在步骤S910a中执行的图4所示的检索处理的步骤S408中取得的代表节点编号, 加上同样在步骤S910a中执行的图4所示的检索处理的步骤S407中取得的比特值被反转 后的值,得到相加所得的数组编号。该处理求出配置有与删除对象的叶节点成对的节点的 数组编号。接着在步骤S914中,读出在步骤S913取得的数组编号的数组元素的内容,在步骤 S915中使搜索路径堆栈的堆栈指针后退1来取出数组编号。接着进到步骤S916,将在步骤S914读出的数组元素的内容重写到在步骤S915取 得的数组编号的数组元素中。该处理将作为链接到删除对象的叶节点的链接源的分支节点 置换为与上述叶节点成对的节点。接着在步骤S917中,删除在步骤S910a中执行的图4所示的检索处理的步骤S408 中取得的代表节点编号所涉及的节点对,结束处理。图IlA以及图IlB是说明在图2B所例示的配对节点树中将〃 0110101000〃作为
删除关键字序列进行删除处理的例子的图。图IlA所示的配对节点树中,对节点对201f以下的节点省略了叙述。删除关键字 序列〃 0110101000〃是由第1关键字〃 011010〃和第2关键字〃 1000〃构成的关键字序 列,存储在作为临时存储区域的删除关键字270内。在搜索路径堆栈310中存储数组编号,其堆栈指针指向数组编号221C+1。在图中 用粗框包围的节点是在检索处理中搜索到的节点,在搜索路径堆栈310中堆积有其数组编 号为根节点210a的编号到叶节点211d的编号。在基于删除关键字序列"0110101000"的检索处理中,首先最先取得根节点 210a的数组编号220,将其存储在搜索路径堆栈310内。因为根节点210a的第1鉴别位置 240a是0,所以取出删除关键字序列的第1关键字"011010"设定为检索关键字,鉴别比特 位置230a是0、检索关键字的比特位置0的比特值是0,所以在搜索路径堆栈310中存储将 代表节点编号220a与比特值0相加所得的数组编号220a。
18
接着,读出数组编号220a所指向的节点210b,判定为分支节点。因为第1鉴别位 置240b是0与第1鉴别位置240a没有变化,所以从先前设定的检索关键字中取得与鉴别 比特位置230b的值1对应的该比特位置的比特值1,将该比特值1与代表节点编号220b相 加而获得数组编号220b+l,将该数组编号220b+l存储在搜索路径堆栈310内。接着,读出节点211c,第1鉴别位置241c是1更新了 1个,因此将删除关键字序列 的第2关键字"1000"设定为检索关键字。因为鉴别比特位置231c是0,检索关键字的比 特位置0的比特值是1,所以如图所示在搜索路径堆栈310内存储代表节点编号221c与1 相加所得的数组编号221c+l。在数组编号为221c+l的数组元素内所存储的节点211d的节点类别261d是1,表 示为叶节点。与该叶节点对应的索引关键字(关键字序列291d、291d')存储在由参照指针 281d示出的存储区域内。该存储区域是索引关键字存储区域311的一部分。因此,当取出参 照指针281d所参照的索引关键字的末尾关键字即第2关键字291d'时,其值是"1000", 与存储在删除关键字270内的第2关键字一致。在图IlA所示的状态下,读出与删除对象的节点211d成对的节点210d的内容,将 该内容写入到使搜索路径堆栈310的堆栈指针后退1时所存储的数组编号220b+l的数组 元素(节点211c)中。然后删除节点对201d。删除了节点对的数组元素为空,可再次利用。图IlB所示的配对节点树是删除处理结束后的树。在节点211c的节点类别261c、 第1鉴别位置241c、鉴别比特位置231c、代表节点编号221c中,如括弧所示,按原样存储有 存储在节点210d中的值。另外,搜索路径堆栈310的堆栈指针指向数组编号220b+l。接着,参照图12A以及图12B来说明插入处理的具体例。如图12A所示的是具有参照比特序列〃 01000001〃、〃 00010010"、" 00000011 “作为索引关键字的参照指针1281b、1281c、1280c的配对节点树。在参照指针1281b所指向的存储区域中,存储有由第1关键字1291b" 0100"和 第2关键字1291b' “ 0001"构成的关键字序列。同样,在参照指针1281c指向的存储区 域中,存储有由第1关键字1291c" 0001"和第2关键字1291c' “ 0010〃构成的关键字 序列,在参照指针1280c指向的存储区域中存储有由第1关键字1290c" 0000"和第2关 键字1290c' “ 0011〃构成的关键字序列。在图示的例子中,接下来要插入的插入关键字序列是"00000100"。如先前所述, 前提是取得索引关键字存储区域的指针1281d,将存储在指针1281d所指向的区域的序列 作为插入关键字序列,插入关键字序列的末尾关键字即第2关键字"0100"取在所有索引 关键字中唯一的值。图示的树由节点对1201a、1201b、1201c构成。节点对1201a的代表节点是根节点1210a,在第1鉴别位置上保持0,在鉴别比特 位置上保持1。节点对1201a下位的节点对1201b的代表节点1210b是分支节点,在第1鉴 别位置上保持0,在鉴别比特位置上保持3,与代表节点1210b成对的节点1211b是叶节点, 保持指向关键字序列1291b、1291b'的参照指针1281b。作为分支节点的节点1210b链接 到节点对1201c。构成节点对1201c的节点1210c和1211c都是叶节点,分别存储指向关键字序列 1290cU290c'的参照指针1280c和指向关键字序列1291cU291c'的参照指针1281c。
插入关键字序列的第1关键字1291d与参照指针1280c指向的存储区域所存储的 关键字序列的第1关键字重复。因此在图示的例子的情况下,当利用插入关键字序列进行 检索时,到达存储有参照指针1280c的叶节点1210c,设定第2关键字1290c'作为比较关 键字,设插入关键字序列的第2关键字1290d'作为插入关键字,进行大小关系的判定和比 特序列比较。这样一来,插入关键字大于比较关键字,第一个不一致比特的位置为1。图12B是示出插入了插入关键字序列〃 00000100〃的配对节点树的图。新的节点 对1201d被插入到节点对1201c的下位。节点对1201d的节点[1] 1211d生成为包含插入 关键字序列的指针作为参照指针1281d叶节点,在节点W]1210d中写入如图12A所示的节 点1210的内容。并且,在图12B所示的分支节点1210c的第1鉴别位置中存储有表示是第 2关键字的1,在第2鉴别位置中存储有作为插入关键字和比较关键字的第一个不一致比特 的位置的1,在代表节点编号中存储有配置了节点对1201的代表节点1210d的数组元素的 数组编号。以上,对用于实施本发明的优选方式进行了详细说明,但本发明的实施方式不限 于此,可进行各种变形,这对本领域技术人员而言是显而易见的。例如对于叶节点,可取代 表示存储有索引关键字的存储区域的位置的信息,而包含索引关键字本身,这对本领域技 术人员而言是显而易见的。另外,虽然将识别检索关键字序列中的关键字位置的第1鉴别 位置以从左起0、1、2、...这样的方式设为与关键字的排列顺序相应的关键字的位置编号, 但不限于此,例如可以通过设检索关键字序列整体的离开开头比特的偏移值、或者交替使 用0和1来表示关键字位置切换的方式,由此识别关键字的位置,这对本领域技术人员而言 是显而易见的。另外可知,执行本发明的比特序列检索方法的装置可通过存储配对节点树的存储 单元和使计算机执行图4所示的处理的程序而构建在计算机上。此外可知,可通过使计算机执行图5 图7、图8A、图8B所示的插入处理及其等同 物的程序,来实现本发明的插入方法,还可通过使计算机执行图9以及图10所示的删除处 理及其等同物的程序,来实现本发明的删除方法。并且,可利用这些程序在计算机上实现分 支节点与叶节点的识别单元、根据分支节点的鉴别比特位置来链接到链接目的地的节点对 的某一方的单元等。因此,本发明的实施方式包含上述程序以及存储有程序的计算机可读存储介质。 此外,在本发明的实施方式还包含本发明的配对节点树的数据结构。通过采用以上详细说明的作为本发明提供的新数据结构的配对节点树,可对重复 关键字进行处理,并且能够更高速地检索比特序列数据。而且还能够容易地执行比特序列 数据的追加删除。
权利要求
一种使用配对节点树的比特序列检索方法,该配对节点树是用于比特序列检索的树,由根节点、以及配置在相邻存储区域中的分支节点和叶节点、或者分支节点之间或叶节点之间的节点对构成,所述根节点是表示树的起点的节点,当该树的节点为一个时所述根节点是所述叶节点,当树的节点为两个以上时所述根节点是所述分支节点,所述分支节点包含第一位置信息,该第一位置信息表示作为链接目的地节点对中的一个节点的代表节点的位置,所述叶节点包含第二位置信息,该第二位置信息表示存储有由检索对象比特序列构成的索引关键字的存储区域的位置,该比特序列检索方法的特征在于,所述索引关键字是一个以上的关键字的序列,该关键字序列的末尾关键字是不重复的唯一关键字,所述分支节点还包含第1鉴别位置和第2鉴别位置,该第1鉴别位置识别进行比特序列检索的检索关键字序列中的关键字的位置,该第2鉴别位置是该关键字的鉴别比特位置,将所述配对节点树的任意节点作为检索开始节点,依次反复下述动作在所述分支节点中,根据所述检索关键字序列中的、由该分支节点所包含的第1鉴别位置所识别的位置的关键字的所述鉴别比特位置的比特值,来链接到链接目的地节点对中的代表节点或配置在与该代表节点相邻的存储区域内的节点,直至到达所述叶节点为止,由此将存储在所述叶节点所包含的所述第二位置信息所示的存储区域内的索引关键字作为检索结果关键字序列,该检索结果关键字序列是所述配对节点树的以所述检索开始节点为根节点的任意部分树的、基于所述检索关键字序列的检索结果。
2.根据权利要求1所述的比特序列检索方法,其特征在于,所述配对节点树存储在数组中,所述第一位置信息是所述数组的存储有与该第一位置 信息对应的所述代表节点的数组元素的数组编号。
3.根据权利要求2所述的比特序列检索方法,其特征在于,在堆栈内依次保持存储有所述检索开始节点的数组元素的数组编号、以及存储有从所 述检索开始节点到所述叶节点的链接目的地节点的数组元素的数组编号。
4.一种叶节点插入方法,该叶节点插入方法对在权利要求1所述的比特序列检索方法 中使用的配对节点树,插入包含表示存储有新的索引关键字的存储区域的位置的所述第二 位置信息的叶节点,其特征在于,该叶节点插入方法包含以下步骤检索结果关键字序列取得步骤,将所述新的索引关键字作为所述检索关键字序列,将 所述配对节点树的根节点作为检索开始节点,在存储从根节点到叶节点的链接路径的同 时,利用权利要求1所述的比特序列检索方法来取得所述检索结果关键字序列;第1鉴别位置取得步骤,从开头关键字起依次比较所述检索关键字序列与所述检索结 果关键字序列的关键字,取得第一个成为不同值的关键字位置;比较步骤,在所述检索关键字序列与所述检索结果关键字序列的、位于在所述第1鉴 别位置取得步骤中取得的关键字位置的关键字之间,进行大小比较和比特序列比较;插入位置确定步骤,根据所述链接路径上的分支节点的第1鉴别位置与在所述第1鉴 别位置取得步骤中取得的所述关键字位置之间的相对位置关系、以及在所述比较步骤的比 特序列比较中成为不同比特值的第一个比特位置与所述链接路径上的分支节点的第2鉴别位置之间的相对位置关系,来确定由待插入的所述叶节点和另一个节点构成的节点对的 插入位置;节点位置确定步骤,根据所述比较步骤中的所述大小比较的结果,来确定将待插入的 所述叶节点设为待插入的所述节点对中的哪个节点;以及叶节点生成步骤,将表示存储所述新的索引关键字的存储区域的位置的信息作为所述 第二位置信息,存储在所述叶节点中。
5.根据权利要求4所述的叶节点插入方法,其特征在于,所述配对节点树存储在数组中,所述第一位置信息是所述数组的存储有与该第一位置 信息对应的所述代表节点的数组元素的数组编号。
6.根据权利要求5所述的叶节点插入方法,其特征在于,在堆栈内依次保持存储有所述根节点的数组元素的数组编号以及存储有从所述根节 点到所述叶节点的链接目的地节点的数组元素的数组编号。
7.一种叶节点删除方法,该叶节点删除方法从在权利要求1所述的比特序列检索方法 中使用的配对节点树中,删除包含表示存储有所指定的所述索引关键字的存储区域的位置 的所述第二位置信息的叶节点,该叶节点删除方法的特征在于,将所述指定的索引关键字作为检索关键字序列,将所述配对节点树的根节点作为检索 开始节点,利用权利要求1所述的比特序列检索方法来取得所述检索结果关键字序列,针对包含表示存储所述检索结果关键字序列的存储区域的位置的信息作为所述第二 位置信息的叶节点,将与该叶节点成对的另一个节点存储到该叶节点的链接源的分支节点 中,由此删除所述叶节点。
8.根据权利要求7所述的叶节点删除方法,其特征在于,所述配对节点树存储在数组中,所述第一位置信息是所述数组的存储有与该第一位置 信息对应的所述代表节点的数组元素的数组编号。
9.根据权利要求8所述的叶节点删除方法,其特征在于,在堆栈内依次保持存储有所述根节点的数组元素的数组编号以及存储有从所述根节 点到所述叶节点的链接目的地节点的数组元素的数组编号。
10.一种程序,其中,该程序用于使计算机执行权利要求1 9中任意一项所述的方法。
11.一种树状的数据结构,该数据结构用于比特序列检索,其特征在于,该数据结构由根节点、以及配置在相邻存储区域中的分支节点和叶节点、或者分支节 点之间或叶节点之间的节点对构成,所述根节点是表示树的起点的节点,当该树的节点为一个时所述根节点是所述叶节 点,当树的节点为两个以上时所述根节点是所述分支节点,所述分支节点包含第一位置信息,该第一位置信息表示作为链接目的地节点对中的一 个节点的代表节点的位置,所述索引关键字是一个以上的关键字序列,该关键字序列的末尾关键字是不重复的唯 一关键字,所述分支节点还包含第1鉴别位置和第2鉴别位置,该第1鉴别位置识别进行比 特序列检索的检索关键字序列中的关键字的位置,该第2鉴别位置是该关键字的鉴别比特 位置,将所述配对节点树的任意节点作为检索开始节点,依次反复下述动作在所述分支节 点中,根据所述检索关键字序列中的、由该分支节点所包含的第1鉴别位置所识别的位置 的关键字的在所述鉴别比特位置的比特值,来链接到链接目的地节点对中的代表节点或配 置在与该代表节点相邻的存储区域内的节点,直至到达所述叶节点为止,由此能够执行基 于所述检索关键字序列的检索。
12.根据权利要求11所述的数据结构,其特征在于,所述数据结构存储在数组中,所述第一位置信息是所述数组的存储有与该第一位置信 息对应的所述代表节点的数组元素的数组编号。
13.一种使用配对节点树的比特序列检索装置,该配对节点树是用于比特序列检索的 树,由根节点、以及配置在相邻存储区域中的分支节点和叶节点、或者分支节点之间或叶节 点之间的节点对构成,所述根节点是表示树的起点的节点,当该树的节点为一个时所述根节点是所述叶节 点,当树的节点为两个以上时所述根节点是所述分支节点,所述分支节点包含第一位置信息,该第一位置信息表示作为链接目的地节点对中的一 个节点的代表节点的位置,所述叶节点包含第二位置信息,该第二位置信息表示存储有由 检索对象比特序列构成的索引关键字的存储区域的位置,该比特序列检索装置的特征在于,所述索引关键字是一个以上的关键字的序列,该关键字序列的末尾关键字是唯一关键 字,所述分支节点还包含第1鉴别位置和第2鉴别位置,该第1鉴别位置识别进行比特序列 检索的检索关键字序列中的关键字的位置,该第2鉴别位置是该关键字的鉴别比特位置,将所述配对节点树的任意节点作为检索开始节点,依次反复下述动作在所述分支节 点中,根据所述检索关键字序列中的、由该分支节点所包含的第1鉴别位置所识别的位置 的关键字的在所述鉴别比特位置的比特值,来链接到链接目的地节点对中的代表节点或配 置在与该代表节点相邻的存储区域内的节点,直至到达所述叶节点为止,由此将存储在所 述叶节点所包含的所述第二位置信息所示的存储区域内的索引关键字作为检索结果关键 字序列,该检索结果关键字序列是所述配对节点树的以所述检索开始节点为根节点的任意 部分树的、基于所述检索关键字序列的检索结果。
14.根据权利要求13所述的比特序列检索装置,其特征在于,该比特序列检索装置具有数组,所述配对节点树存储在该数组中,所述第一位置信息 是所述数组的存储有与该第一位置信息对应的所述代表节点的数组元素的数组编号。
15.根据权利要求14所述的比特序列检索装置,其特征在于,该比特序列检索装置具有堆栈,在所述堆栈中依次保持存储有所述检索开始节点的数 组元素的数组编号以及存储有从所述检索开始节点到所述叶节点的链接目的地节点的数 组元素的数组编号。
全文摘要
在应用了配对节点树的检索方法中,为了能够处理重复关键字,将以末尾关键字为唯一关键字的多个关键字作为关键字序列进行组合来构成索引关键字,检索关键字是组合多个关键字作为关键字序列、且关键字序列的末尾关键字唯一的检索关键字序列。分支节点中具有表示进行比特序列检索的检索关键字序列中的、进行比特序列比较的关键字的位置信息的第1鉴别位置和该关键字的第2鉴别位置,另外还包含表示作为链接目的地节点对中的一个节点的代表节点的位置的位置信息。从检索关键字序列中取出分支节点的第1鉴别位置的关键字,根据该关键字的第2鉴别位置的比特值,链接到链接目的地节点对的一个节点,进行上述处理直至到达与索引关键字对应的叶节点为止,检索到索引关键字。
文档编号G06F17/30GK101911068SQ20088012493
公开日2010年12月8日 申请日期2008年11月11日 优先权日2008年1月17日
发明者国分光裕, 新庄敏男 申请人:新叶股份有限公司