CN101542485B - 配对节点树的分割/结合方法和程序 - Google Patents

配对节点树的分割/结合方法和程序 Download PDF

Info

Publication number
CN101542485B
CN101542485B CN2007800440419A CN200780044041A CN101542485B CN 101542485 B CN101542485 B CN 101542485B CN 2007800440419 A CN2007800440419 A CN 2007800440419A CN 200780044041 A CN200780044041 A CN 200780044041A CN 101542485 B CN101542485 B CN 101542485B
Authority
CN
China
Prior art keywords
node
tree
pairing
array
minimum value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN2007800440419A
Other languages
English (en)
Other versions
CN101542485A (zh
Inventor
新庄敏男
国分光裕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kousokuya Inc
Original Assignee
S Grants Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by S Grants Co Ltd filed Critical S Grants Co Ltd
Publication of CN101542485A publication Critical patent/CN101542485A/zh
Application granted granted Critical
Publication of CN101542485B publication Critical patent/CN101542485B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/02Comparing digital values
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • G06F16/322Trees
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/02Indexing scheme relating to groups G06F7/02 - G06F7/026
    • G06F2207/025String search, i.e. pattern matching, e.g. find identical word or best match in a string

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供配对节点树的分割/结合方法和程序。求出处理源的配对节点树的索引关键字的最小值或最大值,依次删除这些索引关键字直到作为分割点的索引关键字,在处理目标配对节点树中插入所删除的索引关键字,由此对配对节点树进行分割。将一个配对节点树作为上述分割方法的处理源进行删除处理,将另一个配对节点树作为处理目标进行插入处理,来结合配对节点树。

Description

配对节点树的分割/结合方法和程序
技术领域
本发明涉及使用存储比特序列的树状的数据结构从比特序列的集合中检索期望的比特序列的检索方法,特别涉及本申请人在日本特愿2006-187827中提出的配对节点树的分割/结合方法及其程序。
背景技术
近年,社会的信息化不断发展,大规模的数据库在各处被利用起来。为了从这种大规模的数据库中检索记录,通常是将与存储有各记录的地址相对应的记录内的项目用作索引关键字来进行检索,检索出期望的记录。并且,全文检索中的字符串也能视为文档的索引关键字。
而且,由于这些索引关键字利用比特序列来表现,因而数据库的检索可归结于比特序列的检索。
为了高速进行上述比特序列的检索,一直以来对存储比特序列的数据结构进行了各种研究。作为这种研究之一,公知的是Patricia(帕特里希亚)树这样的树结构。
图1示出在上述现有的检索处理中使用的Patricia树的一例。Patricia树的节点构成为包含索引关键字、检索关键字的检查比特位置、以及左右的链接指针。尽管未作明示,然而当然在节点内包含有用于对与索引关键字对应的记录进行存取的信息。
在图1的例子中,保持索引关键字“100010”的节点1750a为根节点,其检查比特位置是0。节点1750a的左链接1740a与节点1750b连接,右链接1741a与节点1750f连接。
节点1750b保持的索引关键字是“010011”,检查比特位置1730b是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连接,右链接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等部分等,存储容量的削减效果不怎么好。并且,反向链接导致的检索处理的延迟问题和追加删除等的处理困难的情况也未得到改善。
专利文献1:日本特开2001-357070号公报
作为解决上述现有检索方法中的问题点的方案,本申请人在日本特愿2006-187827中提出了使用配对节点树的比特序列检索,该配对节点树是由根节点、和配置在相邻的存储区域中的分支节点和叶节点或分支节点之间或叶节点之间的节点对组成的比特序列检索用的树,根节点是表示树的起点的节点,在该树的节点为一个时,根节点为叶节点,在树的节点为两个以上时,根节点为所述分支节点,所述分支节点包含表示进行比特序列检索的检索关键字的鉴别比特位置和链接目的地节点对中的一个节点的位置的位置信息,所述叶节点包含由检索对象的比特序列构成的索引关键字。
在上述申请中,示出了根据给定的索引关键字的集合来生成配对节点树的方法、以及根据配对节点树来检索单个索引关键字的方法等使用配对节点树的基本检索方法。
并且,在比特序列的检索中,存在求出最小值、最大值或求出某个范围的值等各种检索要求。因此,本申请人在日本特愿2006-293619中提 出了求出配对节点树的任意部分树所包含的索引关键字的最大值/最小值的方法等。
但是,近年来,随着信息处理技术的进展,对信息服务的要求进一步扩大且更加严格。在提供信息服务方面基本的是数据库的构筑和从该数据库中取出信息,但是,数据库所存储的数据量不断增大而变得非常巨大。
本申请人之前提出的检索方法能够进行上述巨大化的数据库的高速检索,但是,随着数据库的巨大化,与其对应的配对节点树与以往的树结构相比虽然可以说存储容量已经变小,然而还是较大的存储容量。另一方面,各种存储单元的存储容量分别存在限制,为了构筑经济的系统,需要组合利用各种访问速度、存储容量的存储单元。
并且,数据库本身也能够被物理分割且分散设置。
因此,需要对一个配对节点树进行分割和重新结合。
发明内容
因此,本发明的目的在于,提供如下的方法:将配对节点树分割为2个,并将2个配对节点树结合。
根据本发明的一个方式,提供如下的配对节点树的分割方法:指定用于决定作为分割点的索引关键字的分割关键字,求出处理源配对节点树的索引关键字的最小值或最大值,依次删除这些索引关键字直到作为分割点的索引关键字,在处理目标配对节点树中插入所删除的索引关键字,由此对配对节点树进行分割。
并且,根据本发明的另一方式,在上述分割方法中,在依次求出处理源配对节点树的索引关键字的最小值或最大值的处理中,根据上次求出最小值或最大值时的检索路径的历史来设定检索开始节点。
并且,根据本发明的又一方式,提供如下的配对节点树的结合方法:针对2个配对节点树的结合,将一个配对节点树作为上述分割方法中的处理源进行删除处理,将另一个配对节点树作为处理目标进行插入处理。
并且,根据本发明的又一方式,提供如下的配对节点树的分割方法: 指定用于决定作为分割点的索引关键字的分割关键字,求出分割节点,该分割节点是作为所述处理源配对节点树的部分树、且将所述分割关键字作为其最大值或最小值的部分树中的最大的部分树的根节点,插入将所述分割节点作为根节点的部分树即分割节点树,从而生成新的处理目标配对节点树,从所述处理源配对节点树中删除所述分割节点树。
并且,根据本发明的又一方式,提供如下的2个配对节点树的结合方法:根据处理源配对节点树的索引关键字的最大值或最小值与处理目标配对节点树的索引关键字的最小值或最大值的差分比特位置,求出要从处理源配对节点树分割并与处理目标结合的部分树即分割结合节点树,根据差分比特位置,将该分割结合节点树与处理目标配对节点树结合。
并且,根据本发明的又一方式,提供用于使计算机执行上述配对节点树的分割方法或配对节点树的结合方法的程序。
根据本发明,能够以简单的处理、高效地实施配对节点树的分割/结合处理,即使配对节点树的大小变大,也能够容易地处理。
附图说明
图1是示出以往的检索中使用的Patricia树的一例的图。
图2A是说明存储在数组中的配对节点树的结构例的图。
图2B是概念性地示出配对节点树的树结构的图。
图3是说明用于实施本发明的硬件结构例的图。
图4是示出比特序列检索的基本动作的流程图。
图5是示出求出存储在配对节点树中的索引关键字的最小值的处理的流程图。
图6是示出求出存储在配对节点树中的索引关键字的最大值的处理的流程图。
图7A是示出求出索引关键字的下限值的处理的前段的流程图。
图7B是示出求出索引关键字的下限值的处理的后段的流程图。
图8A是示出求出索引关键字的上限值的处理的前段的流程图。
图8B是示出求出索引关键字的上限值的处理的后段的流程图。
图9A是示出插入处理的前段即检索处理的处理流程的图。
图9B是说明准备要插入的节点对用的数组元素的处理的处理流程图。
图9C是示出求出插入节点对的位置并写入节点对的各节点的内容来完成插入处理的处理流程的图。
图10是说明包含根节点的插入处理在内的在追加索引关键字时的节点插入处理整体的处理流程图。
图11A是示出删除处理的前段即检索处理的处理流程的图。
图11B是说明删除处理的后段的处理流程的图。
图12是说明实施例1的配对节点树的分割处理流程的图。
图13是说明实施例2的配对节点树的分割处理流程的图。
图14是说明实施例2的节点的插入处理流程的图。
图15A是说明实施例2的根节点设定处理的流程图。
图15B是说明实施例2的在父节点中插入包含插入关键字的节点对的处理流程的图。
图16是说明实施例2的删除处理的流程图。
图17是说明实施例3的配对节点树的分割处理流程的图。
图18是说明求出最初的分割节点的处理流程的前段的图。
图19是说明求出最初的分割节点的处理流程的后段的图。
图20是说明处理目标根节点的插入处理的处理流程的图。
图21是说明在分割处理中求出差分比特位置的处理流程的图。
图22是说明根节点以外的插入处理的处理流程的图。
图23是说明实施例3的删除处理的处理流程的图。
图24是说明求出下一分割节点的处理的处理流程的图。
图25是说明求出分割节点树的最大值并将其作为下一分割关键字的处理的处理流程的图。
图26是说明实施例3的配对节点树的结合处理流程的概要的图。
图27是说明在结合处理中求出差分比特位置的处理流程的图。
图28是说明求出处理源的分割结合节点的处理流程的图。
图29是说明求出处理目标的结合位置的处理流程的图。
图30A是说明分割前的树结构例的图。
图30B是说明最初分割后的树结构例的图。
图30C是说明下一次分割后的树结构例的图。
图31A是说明最初的结合处理前的树结构例的图。
图31B是说明最初的结合处理后的树结构例的图。
图31C是说明下一次的结合处理后的树结构例的图。
具体实施方式
首先,关于本申请人在之前的上述申请中提出的作为本发明前提的配对节点树,说明将配对节点树存储在数组中的例子。分支节点保持的表示链接目的地位置的数据也可以作为存储装置的地址信息,不过通过使用由可存储分支节点或叶节点中的所占有区域的存储容量大的一方的数组元素构成的数组,可以用数组编号来表示节点位置,这样可以削减位置信息的信息量。
图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内存储有“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,通过与索引关键字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~图11B,在为了理解本发明所需的范围内,介绍在上述申请中由本申请人提出的使用配对节点树的基本检索处理、配对节点树的插入删除处理、以及求出配对节点树所包含的索引关键字的最大值/最小值的处理等应用处理的一部分。
图4是示出在本申请人的申请即上述日本特愿2006-293619中提出的比特序列检索的基本动作的流程图。
首先,在步骤S401中,取得检索开始节点的数组编号。与所取得的数组编号对应的数组存储了构成配对节点树的任意节点。在后面说明的各种应用检索中进行检索开始节点的指定。
接着,在步骤S402中,在探索路径堆栈310中存储所取得的数组编号,在步骤S403中,读出与该数组编号对应的数组元素作为应参照的节点。然后,在步骤S404中,从所读出的节点中取出节点类别,在步骤S405中,判定节点类别是否是分支节点。
在步骤S405的判定中,在所读出的节点是分支节点的情况下,进入步骤S406,从节点中取出与鉴别比特位置有关的信息,进而,在步骤S407中,从检索关键字中取出与所取出的鉴别比特位置对应的比特值。然后,在步骤S408中,从节点中取出代表节点编号,在步骤S409中,将从检索关键字中取出的比特值与代表节点编号相加,作为新的数组编号,返回步骤S402。
然后,反复进行步骤S402~步骤S409的处理,直到在步骤S405的判定中判定为叶节点而进入步骤S410。在步骤S410中,从叶节点中取出索引关键字,结束处理。
图5是示出在本申请人的申请即上述日本特愿2006-293619中提出的求出存储在配对节点树(包含部分树)中的索引关键字的最小值的处理的流程图。根据如上所述的索引关键字在树上的配置来求出索引关键字的最小值的处理相当于在树上从检索开始节点开始到叶节点为止搜索节点[0]。
首先,从步骤S501中的取得检索开始节点的数组编号、到步骤S505中的判定节点类别的处理分别与上述图4的步骤S401~步骤S405的处理相同。
在步骤S505的节点类别的判定中判定为节点类别是分支节点时,进入步骤S506,从节点中取出数组的代表节点编号,在步骤S507中,对取出的代表节点编号加上值“0”,并将其结果作为新的数组编号,返回步骤S502。然后,反复进行步骤S502~步骤S507的处理,直到在步骤S505中判定为该节点是叶节点为止,在步骤S508中,从叶节点中取出索引关键字,结束处理。
在上述图5所示的处理中,为了搜索节点[0],对代表节点编号一律都加上“0”。即,根据图5的处理,链接目的地的节点一定为节点对中的 节点[0],并分支到储存有更小值的索引关键字的节点一方。由此,能够取出树结构为如上所述排列结构的配对节点树的最小索引关键字。
图6是示出在本申请人的申请即上述日本特愿2006-293619中提出的求出存储在配对节点树(包含部分树)中的索引关键字的最大值的处理的流程图。
求出索引关键字的最大值的处理相当于针对树上的节点中的节点[1]依次进行搜索直至叶节点为止。下面,关于求出任意部分树的最大索引关键字的处理,一边与上述求出最小索引关键字的处理进行比较,一边以不同点为中心进行说明。
图6所示的一连串处理中的步骤S601~步骤S606和步骤S608分别对应于图5的步骤S501~步骤S506和步骤S508,并执行同样的处理。与图5中求出最小值的处理的不同点是,在步骤S607中,对代表节点编号加上值“1”。由此,始终链接到代表节点编号所表示的节点对中的节点[1],并依次反复进行步骤S602~步骤S607的处理,直至到达叶节点为止,由此能够取得索引关键字的最大值。
如图4~图6所示,当执行对与检索关键字一致的索引关键字进行检索的基本动作和索引关键字的最小值/最大值的检索处理时,依次在探索路径堆栈310中存储所参照的数组的数组编号。
另外,在参照上述图5和图6的索引关键字的最小值/最大值的检索处理中,说明了将配对节点树存储在数组中的情况,但显而易见,不是必须将配对节点树存储在数组中,通过仅链接构成节点对的2个节点中的代表节点、或者配置在与代表节点相邻的存储区域中的节点而到达叶节点,也能够进行索引关键字的最小值/最大值的检索。
图7A和图7B是示出在本申请人的申请即上述日本特愿2006-293619中提出的求出存储在配对节点树中的索引关键字的下限值的处理的流程图。这里,所谓下限值是所指定的下限关键字以上的索引关键字的最小值。图7A和图7B所示的求出下限值的处理被应用于如下的处理:即,在对用户等所指定的检索范围进行检索时,将实际上不能取得索引关键字的范围排除在对象外,对实际包含有索引关键字的范围 进行检索。另外,在图7A和图7B中,省略了所指定的下限关键字和上限关键字的取得处理。在以后的各种应用检索中也同样。
首先,在步骤S701中,对于检索开始节点的数组编号设定根节点的数组编号,在步骤S702中,进行最小值检索处理并求出索引关键字的最小值。然后,在步骤S703中,对下限关键字和在步骤S702中求出的最小值进行比较,判定下限关键字是否大于最小值。在下限关键字取最小值以下的值时,进入步骤S704,将在步骤S702中求出的最小值设定为下限值,并结束处理。
在步骤S703中判定为下限关键字大于在步骤S702中求出的最小值时,进入步骤S705,将下限关键字设定为检索关键字。然后,在步骤S706中,对于检索开始节点的数组编号设定根节点的数组编号,在步骤S707中,根据利用图4和图5说明的比特序列检索方法来检索索引关键字。然后,在步骤S708中,对检索关键字和由步骤S707的检索结果所得到的索引关键字进行比较,判定值是否一致。在判定为检索关键字和索引关键字相等的情况下,进入步骤S709,将通过检索得到的索引关键字设定为上述下限值,并结束处理。在判定为检索关键字和索引关键字不同的情况下,进入图7B的步骤S710。
在步骤S710中判定检索关键字和索引关键字的大小关系。这里,在检索关键字大于索引关键字的情况下,意味着该索引关键字小于检索关键字即下限关键字、没有包含在由用户等指定的检索范围中。另一方面,在检索关键字小于索引关键字的情况下,意味着该索引关键字包含在指定的检索范围中。因此,当判定为检索关键字小于索引关键字时,进入步骤S718,将该索引关键字设定为下限值,结束处理。
在步骤S710中判定为检索关键字大于索引关键字时,进入步骤S711。步骤S711~步骤S717的处理是以升序的方式取出索引关键字的处理,通过步骤S711~步骤S717的处理,依次取出存储在配对节点树中的索引关键字,当得到取大于检索关键字即下限关键字的值的索引关键字时,将该索引关键字设定为下限值。
图8A和图8B是示出在本申请人的申请即上述日本特愿 2006-293619中提出的求出存储在配对节点树中的索引关键字的上限值的处理的流程图。这里,所谓上限值是所指定的上限关键字以下的索引关键字的最大值。图8A和图8B所示的求出上限值的处理与上述求出下限值的处理同样,被应用于如下处理等:即,在对用户等所指定的检索范围进行检索时,将实际上不能取得索引关键字的范围排除在对象外,对实际包含有索引关键字的范围进行检索。
首先,在步骤S801中将根节点作为检索开始节点进行检索的处理与求出索引关键字的下限值的处理同样,并且,步骤S802及之后的处理分别与上述步骤S702及之后的处理对应。
即,在使用图7A和图7B说明的求出下限值的处理中,通过步骤S702及之后的处理,检索大于等于由用户等所指定的下限关键字和配对节点树所包含的索引关键字中的下限关键字、且取最接近下限关键字的值的索引关键字。与此相对,在图8A和图8B所示的求出上限值的处理中,通过步骤S802及之后的处理,检索取由用户等指定的上限关键字以下的值作为检索范围的上限、且取最接近上限关键字的值的索引关键字。
若与图7A和图7B所示的处理进行比较,则在对所指定的关键字(下限关键字/上限关键字)和索引关键字进行比较时的大小关系(步骤S703和步骤S710、以及步骤S803和步骤S810)、将所指定的关键字作为检索关键字来检索配对节点树时分别求出索引关键字的最小值/最大值(步骤S707和步骤S807)、以及求出索引关键字的顺序分别是升序/降序(步骤S711和步骤S811及之后的处理)的方面是相反的,不过在求出下限值和上限值之前的步骤基本上与上述相同。
具体说明步骤S802及之后的处理。
当在步骤S802中求出配对节点树中所包含的索引关键字的最大值时,在步骤S803中,将步骤S802中求出的最大值与上限关键字进行比较,并判定上限关键字是否大于最大值。当上限关键字大于等于索引关键字的最大值时,进入步骤S804,将在步骤S802中求出的最大值设定为上限值,并结束处理。
当上限关键字小于最大值时,进入步骤S805,将上限关键字设定为 检索关键字。然后,在步骤S806中,设定根节点的数组编号作为检索开始节点的数组编号,在步骤S807中,进行针对检索关键字的检索处理,进入步骤S808。
在步骤S808中,判定检索关键字和在步骤S807中取得的索引关键字是否相等。在步骤S808中判定为这些值相等的情况下,进入步骤S809,将在步骤S807的处理中得到的索引关键字设定为上述上限值,并结束处理。在步骤S808中判定为不相等的情况下,进入图8B的步骤S810。
在步骤S810中判定检索关键字和索引关键字的大小关系。这里,在检索关键字小于索引关键字的情况下,意味着该索引关键字小于检索关键字即上限关键字、没有包含在由用户等指定的检索范围中。另一方面,在检索关键字大于索引关键字的情况下,意味着该索引关键字包含在指定的检索范围中。因此,当判定为检索关键字大于索引关键字时,进入步骤S818,将该索引关键字设定为上限值,并结束处理。
在步骤S810中判定为检索关键字小于索引关键字时,进入步骤S811。步骤S811及之后的处理是以降序的方式取出索引关键字的处理,并反复进行步骤S810~步骤S817的处理,直到判定为检索关键字大于索引关键字为止。
接着,通过9A~图9C、图10,说明在本申请人的申请即上述日本特愿2006-187827中提出的配对节点树中的节点插入处理。9A~图9C是说明常规的插入处理的图,图10是说明根节点的插入处理的图。由于通过根节点的插入处理和常规的插入处理来生成配对节点树,因而节点插入处理的说明也是配对节点树的生成处理的说明。
图9A是示出插入处理的前段即检索处理的处理流程的图,相当于在图4所示的检索处理中将插入关键字用作检索关键字。步骤S901相当于在图4的步骤S401中将检索开始节点作为根节点,步骤S902~步骤S910的处理完全对应于图4的步骤S402~步骤S410,因而省略说明。
在图9A的步骤S911中对插入关键字和索引关键字进行比较,如果相等,则插入关键字已存在于配对节点树内,因而插入失败,结束处理。如果不相等,则进到后面的处理,即图9B的步骤S912以下的处理。
图9B是说明准备要插入的节点对用的数组元素的处理的处理流程图。
在步骤S912中,根据数组求出空的节点对,取得该节点对中的应成为代表节点的数组元素的数组编号。
进到步骤S913,对插入关键字与在步骤S910所获得的索引关键字的大小进行比较,当插入关键字大时获得值1的布尔值、当插入关键字小时获得值0的布尔值。
进到步骤S914,获得将在步骤S912所获得的代表节点的数组编号与在步骤S913所获得的布尔值相加得到的数组编号。
进到步骤S915,获得将在步骤S912所获得的代表节点的数组编号与在步骤S913所获得的布尔值的逻辑“非”值相加得到的数组编号。
在步骤S914所获得的数组编号是存储具有插入关键字作为索引关键字的叶节点的数组元素的数组编号,在步骤S915所获得的数组编号是存储与该叶节点成对的节点的数组元素的数组编号。
即,根据在前段的检索处理中获得的在叶节点内存储的索引关键字和插入关键字的大小,决定在插入的节点对中的哪个节点中存储保持插入关键字的叶节点。
例如在图2B的配对节点树内插入“011011”的情况下,检索结果的索引关键字为存储在节点211d内的“011010”。通过插入关键字“011011”和存储在节点211d内的索引关键字“011010”的大小比较来求出布尔值,在当前的例子中由于插入关键字大,因而获得布尔值1,在将插入的节点对的代表节点编号加上1得到的数组元素内存储保持插入关键字的叶节点。另一方面,索引关键字“011010”被存储在将通过大小比较所获得的布尔值进行了逻辑反转后得到的值与代表节点编号相加所得到的数组编号的数组元素内。
此时,由于索引关键字“011010”和插入关键字“011011”在第5比特不同,因而节点211d成为如下的分支节点:将鉴别比特位置设为5、将代表节点编号设为所插入的节点对的代表节点的数组编号。
并且,在要将“011001”插入到图2B的配对节点树内的情况下,检索 结果的索引关键字成为存储在节点211d内的“011010”。在该情况下,由于插入关键字小,因而获得布尔值0,在将插入的节点对的代表节点编号加上0后得到的数组元素内存储保持插入关键字的叶节点。然后,由于索引关键字“011010”和插入关键字“011001”在第4比特不同,因而节点211d成为如下的分支节点:将鉴别比特位置设为4、将代表节点编号设为所插入的节点对的代表节点的数组编号。然后进到图9C的步骤S916以下的处理。
图9C是示出将节点存储在图9B中所准备的数组内并求出其插入位置、变更已有节点的内容来完成插入处理的处理流程的图。
步骤S916~步骤S923的处理是求出要插入的节点对在配对节点树上的位置的处理,步骤S924以下的处理是对各节点设定数据来完成插入处理的处理。
在步骤S916中,通过使用例如逻辑“异或”来进行插入关键字与在步骤S910所获得的索引关键字的比特序列比较,获得差分比特序列。
进到步骤S917,根据在步骤S916所获得的差分比特序列,获得从上位第0比特开始观察到的第一个不一致比特的比特位置。该处理可在例如具有优先编码器的CPU中通过向该CPU输入差分比特序列,来获得不一致的比特位置。并且,也能以软件方式进行与优先编码器同等的处理,获得第一个不一致比特的比特位置。
然后进到步骤S918,判定探索路径堆栈的堆栈指针是否指定了根节点的数组编号。如果指定了根节点的数组编号则转到步骤S924,如果未指定根节点的数组编号则进到步骤S919。
在步骤S919中,使探索路径堆栈的堆栈指针后退1个,取出堆栈在其内的数组编号。
进到步骤S920,从数组中读出在步骤S919所取出的数组编号的数组元素作为节点。
进到步骤S921,从在步骤S920所读出的节点中取出鉴别比特位置。
然后进到步骤S922,判定在步骤S921所取出的鉴别比特位置与在步骤S917所获得的比特位置相比是否为上位的位置关系。这里假定上位 的位置关系是指比特序列的更左侧的位置,即比特位置的值小的位置。
在步骤S922的判定结果是否定时,回到步骤S918,重复执行直到步骤S918的判定为肯定或者步骤S922的判定为肯定。当步骤S922的判定为肯定时,在步骤S923使探索路径堆栈的堆栈指针前进1个,转到步骤S924以下的处理。
在上述步骤S916~步骤S923所说明的处理是这样的处理:为了决定要插入的节点对的插入位置,在要插入的索引关键字与通过检索所取得的索引关键字之间进行比特序列比较,调查在比特序列比较中成为不同的比特值的、开头的(最上位的)比特位置与存储在探索路径堆栈内的分支节点的鉴别比特位置之间的相对位置关系,将鉴别比特位置为上位的分支节点的下一分支节点的链接目的地设为要插入的节点对的插入位置。
例如当把“111000”插入到图2B的配对节点树内时,检索结果的索引关键字为存储在节点210h内的“101011”。获得在插入关键字“111000”与存储在节点210h内的索引关键字“101011”的比特序列比较中为不同的比特值的、最上位的比特位置1。依次反向搜索探索路径堆栈,直到所获得的比特位置1与堆积在探索路径堆栈中的数组编号的数组元素所存储的分支节点的鉴别比特位置之间的位置关系成为鉴别比特位置为上位,此时到达根节点210a。
因此,使探索路径堆栈的指针前进1个,获得节点211b的数组编号。插入关键字“111000”被插入到节点211b的链接目的地。
并且,即使对探索路径堆栈进行反向搜索并到达根节点,但与先前求出的在比特序列比较中为不同的比特值的、最上位的比特位置相比,根节点的鉴别比特位置也不是上位的比特位置是指以下的情况:在该配对节点树的索引关键字的上位比特,与根节点的鉴别比特位置相比为上位的比特值全部相等。并且是指如下情况:在要插入的索引关键字中,在与根节点的鉴别比特位置相比为上位的比特值中开始存在不同的比特值。因此,要插入的节点对成为根节点的直接链接目的地,根节点的鉴别比特位置变为与已有的索引关键字不同的值即插入关键字的最上位比 特的位置。
下面,对步骤S924以下的在各节点设定数据来完成插入处理的处理进行说明。
在步骤S924中,从探索路径堆栈中取出堆栈指针所指定的数组编号。
在步骤S925中,向在步骤S914所获得的数组编号所指定的数组元素的节点类别内写入1(叶节点),向索引关键字内写入插入关键字。
进到步骤S926,从数组中读出在步骤S924中所获得的数组编号的数组元素。
然后在步骤S927中,向在步骤S915中所获得的数组编号的数组元素内写入在步骤S926所读出的内容。
最后在步骤S928中,向在步骤S924中所获得的数组编号所指定的数组元素的节点类别内写入0(分支节点),向鉴别比特位置内写入在步骤S917中所获得的比特位置,向代表节点编号写入在步骤S912中所获得的数组编号,结束处理。
在向上述图2B的配对节点树插入“111000”的例子中,向所取得的空节点对的节点[0]内写入节点211b的内容(步骤S927),将节点[1]设为保持插入关键字“111000”的叶节点(步骤S925)。然后,在节点211b的鉴别比特位置上存储在比特序列比较中成为不同的比特值的、最上位的比特位置1,将存储有所取得的节点对的代表节点的数组元素的数组编号存储在代表节点编号(步骤S928)。
图10是说明在本申请人的申请即上述日本特愿2006-187827中提出的包含根节点的插入处理在内的在追加索引关键字时的节点插入处理整体的处理流程图。
在步骤S101中,对要求取得的配对节点树的根节点的数组编号是否已登记进行判定。如果已登记,则进行使用图9A~图9C所说明的常规的插入处理。
如果步骤S101的判定为未登记,则开始全新的配对节点树的登记、生成。
首先,在步骤S102中,根据数组求出空节点对,取得该节点对中的应成为代表节点的数组元素的数组编号。然后在步骤S103中,求出对在步骤S102所获得的数组编号加上0后的数组编号(实际上,等于在步骤S102所取得的数组编号)。然后在步骤S104中,针对在步骤S103中所获得的数组编号的数组元素,向要插入的根节点的节点类别写入1(叶节点),并向索引关键字写入插入关键字,在步骤S105,登记在步骤S102中所取得的根节点的数组编号,结束处理。
如前所述,显然,当有索引关键字的集合时,从该集合中依次取出索引关键字,通过反复进行图10和图9A~图9C的处理,可构建与索引关键字的集合对应的本发明的配对节点树。
下面,参照图11A和图11B,对在本申请人的申请即上述日本特愿2006-187827中提出的从配对节点树涉及的索引关键字的集合中删除特定的索引关键字的处理流程进行说明。
图11A是示出删除处理的前段即检索处理的处理流程的图,相当于在图4所示的检索处理中把删除关键字作为检索关键字。步骤S1101相当于在图4的步骤S401中将检索开始节点作为根节点,步骤S1102~步骤1110的处理与图4的步骤S402~步骤S410完全对应,因而省略说明。
在图11A的步骤S1111中对删除关键字与索引关键字进行比较,如果不相等,则在配对节点树内不存在要删除的索引关键字,因而删除失败,结束处理。如果相等,则进到后面的处理,即图11B的步骤S1112以下的处理。
图11B是说明删除处理的后段的处理流程的图。
首先,在步骤S1112判定在探索路径堆栈内是否存储有2个以上的数组编号。所谓未存储有2个以上的数组编号,换句话说只存储有1个数组编号,则该数组编号是存储有根节点的数组元素的数组编号。在该情况下,转到步骤S1118,删除在步骤S1101中所获得的根节点的数组编号涉及的节点对。然后进到步骤S1119,删除所登记的根节点的数组编号,结束处理。
当在步骤S1112中判定为在探索路径堆栈内存储有2个以上的数组 编号时,进到步骤S1113,获得将在步骤S1108中获得的代表节点编号与将步骤S1107中所获得的比特值反转后得到的值相加所得到的数组编号。该处理是求出与存储了删除对象的索引关键字的叶节点成对的节点所配置的数组编号的处理。
然后在步骤S1114中,读出在步骤S1113所获得的数组编号的数组元素的内容,在步骤S1115中使探索路径堆栈的堆栈指针后退1个,取出数组编号。
然后进到步骤S1116,将在步骤S1114中所读出的数组元素的内容改写到在步骤S1115中所获得的数组编号的数组元素中。该处理是将作为链接到存储有删除对象的索引关键字的叶节点的链接源的分支节点置换为与上述叶节点成对的节点的处理。
最后在步骤S1117中删除在步骤S1108中所获得的代表节点编号涉及的节点对,结束处理。
以上,说明了与配对节点树的分割/结合有关的作为本发明的前提的技术,但是,如果需要,请参照上述专利申请的说明书和附图的记载。
接着,对本发明的配对节点树的分割/结合方法进行说明。
这里,配对节点树的分割是指,在指定了由某个比特序列构成的分割关键字时,根据与该分割关键字之间的大小关系将配对节点树所包含的索引关键字分为2组,生成由属于各个组的索引关键字构成的2个配对节点树。
针对基于大小关系的分割,在以下的说明中,分割为大于分割关键字的组和小于等于分割关键字的组,但是,即使在分割为大于等于分割关键字的组和小于分割关键字的组的情况下,也能够同样地进行分割/结合,根据以下的说明能够容易地理解。
总之,分割关键字是为了决定在哪里分割配对节点树而使用的关键字。
并且,配对节点树的结合是指,根据与2个索引关键字的集合对应的2个配对节点树,生成与2个索引关键字的集合的和集合对应的配对节点树。在本发明中,前提是2个索引关键字的集合的积集合为空。
以下,说明本发明的3个实施例,但是,在该说明中,有时将配对节点树简称为树。在以下说明的实施例1、2和3中,不需要在分割处理对象的树中包含与所指定的分割关键字相等的索引关键字,但是,在将与所指定的分割关键字对应的索引关键字作为分割关键字的情况下,能够将所指定的分割关键字作为上限关键字或下限关键字,通过参照图7A、图7B、图8A、图8B说明的检索方法求出上限值或下限值,将其作为与所指定的分割关键字对应的新的分割关键字。
实施例1
在本实施例1中,在最小值小于等于分割关键字的期间反复进行如下处理:取出作为分割对象的处理源树(以下有时简称为处理源)的索引关键字的最小值,在通过处理源的分割而生成的处理目标树(以下有时简称为处理目标)中插入所取出的索引关键字的最小值,从处理源树中删除索引关键字的最小值,由此,从作为分割对象的处理源树中分割出处理目标树。
图12是说明本发明的实施例1的配对节点树的分割处理流程的图。
在最初的步骤S1201中,将所指定的分割关键字设定为处理源的分割关键字。关于分割关键字的指定,可存在基于操作者的外部输入的情况,还存在基于某个计算机程序的处理结果的情况、基于来自远方的命令的情况等。将所指定的分割关键字设定在用于保持处理源的分割关键字的存储器上的区域中。
接着,在步骤S1202中,将处理源的根节点设定为处理源的检索开始节点,进入步骤S1203。
在步骤S1203中,判定处理源树是否已登记。该判定结果为未登记意味着处理源树已全部删除,所以分割关键字是大于等于处理源树的索引关键字的最大值的例外情况,该情况下结束处理。
如果处理源树已登记,则转移到步骤S1204,从在步骤S1202中设定为检索开始节点的根节点开始,执行图5所示的处理,得到索引关键字的最小值。
接着,进入步骤S1205,判定在步骤S1204中得到的最小值是否大 于分割关键字。如果最小值大于分割关键字,则树的分割完成,所以结束处理,如果最小值小于等于分割关键字,则执行以下说明的步骤S1206~步骤S1209的处理目标树的生成和从处理源树删除节点的处理,返回步骤S1203。
在步骤S1206中,将在步骤S1204中得到的最小值设定为处理目标的插入关键字。
接着,在步骤S1207中,通过图9A~图9C、图10所示的树的生成、插入处理,执行基于插入关键字的处理目标树的生成。
接着,在步骤S1208中,将步骤S1207中的插入关键字设定为处理源的删除关键字,在步骤S1209中,通过图11A、图11B所示的删除处理,从处理源树中删除包含删除关键字的叶节点。
在上述分割处理的说明中,从处理源的索引关键字的最小值起依次进行删除,但是,对于本领域技术人员来说,显然,同样能够从索引关键字的最大值起依次进行删除。该情况下,步骤S1204成为求出索引关键字的最大值的处理,步骤S1205成为最大值和分割关键字的大小关系的判定处理,在步骤S1206中将最大值设定为处理目标的插入关键字。
以上说明了分割处理,但是,也能够通过图12所示的处理流程来执行结合处理。
关于结合处理,将要结合的2个树中的某一个作为处理源树,如果分割关键字大于等于处理源树的索引关键字的最大值,则结合处理相当于上述的例外处理,删除处理源树,与处理目标树结合。另外,在处理源树的索引关键字的最大值未知的情况下,预先通过图6所示的最大值检索处理来求出分割关键字。
然后,由于处理源的分割关键字大于等于处理源树的索引关键字的最大值,因此在步骤S1205的大小比较中,分割关键字始终大于最小值而分支到步骤S1206,所以能够省略步骤S1205。如果这样,则设定分割关键字也没有意义,所以结果也不需要步骤S1201,仅通过反复进行最小值检索、插入处理和删除处理,就能够进行结合处理。
并且,如上面针对分割处理所叙述的那样,显而易见地,仅通过反 复进行最大值检索、插入处理和删除处理,就能够进行结合处理。
本实施例1的处理逻辑简单,但是,反复进行将处理源的根节点作为检索开始节点的最小值检索,以索引关键字为单位进行插入删除,所以执行时的处理步骤数量变大。
实施例2
本实施例2在以索引关键字为单位进行插入删除这点上与实施例1相同,但是在应该插入删除的索引关键字的探索中应用探索路径堆栈,从而减小了执行插入处理和删除处理时的处理步骤数量。
图13是说明本发明的实施例2的配对节点树的分割处理流程的图。
步骤S1301~步骤S1306的处理与图12所示的实施例1的步骤S1201~步骤S1206的处理完全相同,所以省略说明。
在步骤S1307中,利用插入关键字在处理目标中插入节点。该处理是与图12所示的步骤S1207的插入处理不同的、本实施例特有的处理,后面参照图14、图15A、图15B详细说明。
接着,在步骤S1308中,将包含在步骤S1304中得到的最小值的节点设定为处理源的删除节点,在步骤S1309中,将删除节点从处理源删除,得到处理源的父节点,该处理源的父节点复制有与删除节点成对的节点的内容。
接着,在步骤S1310中,将在步骤S1309中得到的处理源的父节点设定为处理源的检索开始节点,返回步骤S1303。
如以后说明的那样,处理源的父节点是删除节点的最近的上位分支节点。删除节点包含处理源的索引关键字的最小值,根据上述的索引关键字的顺序性,下次要检索的最小值位于处理源的父节点的下位。
因此,使第2次及第2次之后的步骤S1304中的最小值检索的检索开始节点不是根节点而是处理源的父节点,由此能够减少处理步骤数量。
后面参照图16详细说明步骤S1308~步骤S1309和处理源的父节点。
图14是说明与图13所示的步骤S1306和步骤S1307对应的节点的插入处理流程的图。
最初的步骤S1401中的将插入关键字设定为处理目标的插入关键字的步骤是与图13所示的步骤S1306对应的处理,将在图13所示的步骤S1304中得到的最小值设定在处理目标的插入关键字设定区域中。
接着,在步骤S1402中,判定处理目标是否已登记。
如果未登记,则转移到步骤S1403,在步骤S1403中,将包含插入关键字的节点对设定为处理目标的根节点,登记为处理目标的根节点。接着,进入步骤S1404,将处理目标的根节点设定为已插入节点,结束处理。
如果上述步骤S1402的判定结果为已登记,则转移到步骤S1405。在步骤S1405中,判定已插入节点是否已设定。该判定处理在后面说明的树的结合处理中是必要的。在树的分割处理中,在最初的插入处理中,在步骤S1404中将根节点设定为已插入节点,所以步骤S1406的判定始终为“是”。因此,如果仅是分割处理,则步骤S1405和步骤S1407不是必须的。
如果步骤S1405的判定结果为“是”,则进入步骤S1406,将设定为已插入节点的节点设定为处理目标的检索开始节点,进入步骤S1408。
如果步骤S1405的判定结果为“否”,则进入步骤S1407,将根节点设定为处理目标的检索开始节点,进入步骤S1408。
在步骤S1408中,通过图6所示的最大值检索处理,从在步骤S1406或步骤S1407中设定的检索开始节点开始,求出处理目标的索引关键字的最大值。
接着,在步骤S1409中,根据在步骤S1401中设定的插入关键字和在步骤S1407中得到的最大值,求出要插入的节点对的处理目标的父节点,在该父节点中插入包含所述插入关键字的节点对。
接着,进入步骤S1410,将在步骤S1409中插入了包含插入关键字的节点对的处理目标的父节点设定为已插入节点,结束处理。
接着,详细说明上述步骤S1403和步骤S1409。
图15A是说明图14所示的步骤S1403的根节点设定处理的流程图。
首先,在步骤S1501中,从数组中取得节点对为空的代表节点编号。
接着,在步骤S1502中,将在步骤S1501中取得的代表节点编号加上值“0”而得到的数组编号设定为插入节点的数组编号。
进入步骤S1503,为了形成叶节点,在节点类别中设定叶,在索引关键字中设定插入关键字,存储在通过步骤S1502设定的数组编号的数组元素中。
接着,在步骤S1504中,将插入节点的数组编号登记为根节点的数组编号,结束处理。
另外,关于上述步骤S1501~步骤S1504的处理,在参照图10说明的配对节点树的生成处理中,对应于根节点的数组编号未登记时的步骤S102~步骤S105。
图15B是说明图14所示的步骤S1409的求出要插入的节点对的处理目标的父节点并在该父节点中插入包含所述插入关键字的节点对的处理的流程图。图15B所示的流程是本申请人的在先申请即日本特愿2006-187827中提出的插入处理的应用,步骤S1505的将插入关键字和最大值作为比特序列进行比较并求出从上位第0比特开始所发现的第一个不一致比特的位置、将其设定在用于存储差分比特位置的区域中的处理对应于图9C所示的步骤S916和步骤S917的处理。
步骤S1505之后进入步骤S1506。另外,步骤S1506~步骤S1512的处理相当于图9C所示的步骤S918~步骤S923,步骤S1513~步骤S1518的处理相当于图9C所示的步骤S924~步骤S928。
在步骤S1506中,使处理目标的探索路径堆栈的堆栈指针后退1个,取出数组编号。
接着在步骤S1507中,从数组中取出数组编号所指定的数组元素的内容作为节点。
接着在步骤S1508中,从在步骤S1507中取出的节点中取出鉴别比特位置。
接着在步骤S1509中,对在步骤S1505中设定的差分比特位置和在步骤S1508中取出的差分比特位置进行比较,判定鉴别比特位置与差分比特位置相比是否为上位的位置关系。
如果该判定结果为鉴别比特位置与差分比特位置相比是上位的位置关系,则进入步骤S1512,使处理目标的探索路径堆栈的堆栈指针前进1个,取出数组编号,将其设定在父节点的数组编号区域中,转移到步骤S1513。
如果步骤S1509的判定结果为鉴别比特位置与差分比特位置相比不是上位的位置关系,则进入步骤S1510。
在步骤S1510中,判定处理目标的探索路径堆栈的堆栈指针是否指定了根节点的数组编号。
在判定结果为处理目标的探索路径堆栈的堆栈指针没有指定根节点的数组编号的情况下,返回步骤S1506。
在判定结果为处理目标的探索路径堆栈的堆栈指针指定了根节点的数组编号的情况下,在步骤S1511中,从处理目标的探索路径堆栈中取出堆栈指针所指定的数组编号,将其设定在用于存储处理目标的父节点的数组编号的区域中,转移到步骤S1513。
在步骤S1513中,从数组中取得节点对为空的代表节点编号。
接着在步骤S1514中,将对代表节点编号加上1而得到的数组编号设定在用于存储插入节点的数组编号的区域中。
接着在步骤S1515中,为了形成叶节点,在节点类别中设定叶,在索引关键字中设定插入关键字,存储在通过步骤S1514设定的数组编号的数组元素中。
接着在步骤S1516中,将对代表节点编号加上0而得到的数组编号设定在用于存储与插入节点成对的对节点的数组编号的区域中。
接着在步骤S1517中,读出在步骤S1511或步骤S1512中设定的处理目标的父节点的数组编号所指定的数组元素的内容,将其存储在通过步骤S1516设定的对节点的数组编号所指定的数组元素中。
接着在步骤S1518中,为了形成分支节点,在节点类别中设定分支,在鉴别比特位置中设定在步骤S1505中设定的差分比特位置,在代表节点编号中设定在步骤S1516中设定的对节点的数组编号,存储在通过步骤S1511或步骤S1512设定的处理目标的父节点的数组编号所指定的数 组元素中,结束处理。
图16是示出对图13所示的处理流程中的删除处理进行说明的处理流程例的图。
最初的步骤即步骤S1601相当于图13所示的步骤S1308。删除节点所包含的删除关键字是在图13所示的步骤S1304中通过最小值检索而求出的,所以,在处理源的探索路径堆栈中堆栈有存储了删除关键字的数组元素的数组编号,因此读出该数组编号将其设定在用于存储删除节点的区域中。
在接下来的步骤S1602中,判定是否在处理源的探索路径堆栈中存储了2个以上的数组编号。该步骤S1602及步骤S1602之后到步骤S1608的处理对应于图11B所示的本申请人的在先申请即日本特愿2006-187827中提出的删除处理的后段的处理。
如果在处理源的探索路径堆栈中没有存储2个以上的数组编号,则转移到步骤S1607,删除在步骤S1601中设定的删除节点的数组编号所指定的节点对,进到步骤S1608,将根节点的数组编号删除(抹消登记),结束处理。
如果在处理源的探索路径堆栈中存储了2个以上的数组编号,则进到步骤S1603,求出与在步骤S1601中设定的删除节点成对的节点的数组编号,将其设定在用于存储对节点的数组编号的区域中。
接着在步骤S1604中,使处理源的探索路径堆栈的堆栈指针后退1个,取出数组编号,将其存储在删除节点的最近的上位分支节点即处理源的父节点的数组编号存储区域中。
接着在步骤S1605中,读出在步骤S1603中设定的对节点的数组编号所指定的数组元素的内容,将其存储在通过步骤S1604设定的处理源的父节点的数组编号所指定的数组元素中。
接着在步骤S1606中,将删除节点的数组编号所指定的节点对删除,结束处理。
以上,说明了实施例2的树分离处理,但是,在实施例2中,与实施例1的情况同样,也能够从索引关键字的最大值起依次进行删除。
并且,与实施例1的情况同样,分割处理的处理流程也能够用于树的结合处理。只要将要结合的2个树中的某一个作为处理源树,将分割关键字设成大于等于处理源树的索引关键字的最大值或小于等于最小值,来进行处理源树的删除处理,进行在处理目标树中插入所删除的节点的处理即可。
实施例3
上述实施例1和实施例2的分割结合方法是以索引关键字为单位进行插入删除的方法,但是,接着作为实施例3,说明着眼于配对节点树的顺序性的、以配对节点树的更大的满足规定条件的部分树为单位,来进行插入删除的分割结合方法。
图17是说明实施例3的配对节点树的分割处理流程的图。并且,图30A~图30C是通过实例来说明上述分割处理的图,例示出类似于图2B所例示的配对节点树的树。图30A示出分割前的树结构例,图30B示出最初分割后的树结构例,图30C示出下一次分割后的树结构例。
首先,如图17所示,在步骤S001中,取得分割关键字并将其设定在用于存储分割关键字的区域中。在图30A的例示中,分割关键字等于节点211g的索引关键字251g“100011”。另外,如上所述,要取得的分割关键字不需要包含在处理源中,但是,如后面将说明的那样,在本实施例中,需要根据所取得的分割关键字求出上限值或下限值,并将处理源所包含的索引关键字作为新的分割关键字。因此,在以下的说明中,设分割关键字包含在处理源中来进行说明。
接着在步骤S002中,根据分割关键字求出处理源的分割节点。分割节点是包含分割关键字作为最大值的部分树中的最大的部分树(以下称为分割节点树)的根节点。在图30A的例示中,节点210f是分割节点,由虚线包围的部分树是分割节点树291。求出分割节点的处理的详细情况在后面参照图18和图19进行说明。
接着进入步骤S003,判定处理目标是否已登记。如果未登记则进入步骤S004,将在步骤S002中求出的分割节点设定为处理目标的根节点,并登记为处理目标的根节点,进而转移到步骤S007,执行分割节点树的 删除处理。另外,步骤S004的处理的详细情况在后面参照图20进行说明。
在图30A的例示中,分割处理刚刚开始,如图30A的(b)所示,处理目标不存在且没有登记,所以进入步骤S004,将分割节点210f的内容作为处理目标,存储在新取得的节点对201i的代表节点210i中,设定为处理目标的根节点,并登记为处理目标的根节点。其结果,如图30B的(b)所示,生成由所插入的分割节点树291构成的处理目标树。
另一方面,在图30B的(a)中示出从处理源删除了将节点211g作为分割节点的分割节点树291后的树结构,将分割节点210b作为根节点的下一个分割节点树292由虚线包围并示出。
如果步骤S003的判定结果为已登记,则转移到步骤S005。在步骤S005中,求出作为在后述的步骤S010中设定的下一个分割节点树的最大值的分割关键字与处理目标的最小值的差分比特位置。求出差分比特位置的处理的详细情况在后面参照图21进行说明。
在图30B的例示中,下一个分割节点树292的最大值是索引关键字251c“011010”,处理目标的最小值是索引关键字250g“100010”,所以,差分比特位置为“0”。
接着进入步骤S006,将处理目标的根节点作为插入位置,在处理目标中插入分割节点树,进入步骤S007。
在步骤S007中,从处理源删除分割节点树。然后进入步骤S008,求出下一个分割节点。
在图30C的(b)的例示中示出如下的树结构:将根节点210i作为插入位置,经由新取得的节点对201j将下一个分割节点树292插入到处理目标。并且,在图30C的(a)中示出从图30B的(a)所示的树结构中删除下一个分割节点树292后的结构。
步骤S006中的分割节点树的插入处理、步骤S007中的删除处理、以及步骤S008中的求出下一个分割节点的处理的详细情况在后面分别参照图22、如23、图24进行说明。
接着步骤S008,在步骤S009中判定在步骤S008中是否求出了分割 节点。如果未求出分割节点,则分割处理结束。
如果求出了分割节点,则在步骤S010中,求出将该分割节点作为根节点的部分树即分割节点树的最大值,作为下一个分割关键字,返回步骤S005,反复进行下一个分割节点树的插入、删除处理以及求出再下一个分割节点的处理。
步骤S010中的求出分割节点的最大值并将其作为下一个分割关键字的处理的详细情况在后面参照图25进行说明。
在本实施例中,如上所述以分割节点树为单位进行删除插入处理,所以能够削减处理步骤数量。
接着,参照图18和图19,详细说明图17所示的步骤S002中的求出分割节点的处理。
图18是说明求出最初的分割节点的处理流程的前段的图。
如图18所示,在步骤S1801中,将分割关键字设定为检索关键字,在步骤S1802中,将存储有处理源的根节点的数组元素的数组编号设定为检索开始节点的数组编号。
接着进入步骤S1803,执行图4所示的检索处理,作为检索结果而得到与分割关键字相等的索引关键字,结束前段的处理,进入图19所示的后段的处理。
后段的处理参照图19进行说明,但是,在此之前,再次参照图30A,说明在本实施例中将分割关键字作为处理源中所包含的索引关键字的必要性。
现在设利用分割关键字“100001”来分割图30A所示的处理源。当利用该分割关键字来执行图18所示的步骤S1803的检索处理时,作为检索结果而得到的索引关键字是索引关键字251g“100011”。但是,应该作为分割点的索引关键字是存储在叶节点211c中的以“100001”为上限的上限值“011010”、或存储在叶节点211g中的以“100001”为下限的下限值“100010”,这是因为在任何情况下,都与利用分割关键字“100001”进行检索的结果不一致。
因此,在求出分割节点之前,需要根据其定义将分割关键字作为处 理源所包含的索引关键字来求出。
图19是说明求出最初的分割节点的处理流程的后段的图。后段的处理是追溯处理源的探索路径堆栈,求出第一个节点[0]的数组编号,设定为分割节点的数组编号的处理。
如图19所示,在步骤S1901中,判定探索路径堆栈的堆栈指针是否指定了根节点的数组编号。如果探索路径堆栈的堆栈指针指定了根节点的数组编号,则进入步骤S1906,将根节点的数组编号设定为分割节点的数组编号,结束处理。
如果探索路径堆栈的堆栈指针没有指定根节点的数组编号,则进入步骤S1902,从探索路径堆栈取出数组编号,将堆栈指针减1。
接着在步骤S1903中,根据在步骤S1902中取出的数组编号,得到配置在该数组编号的数组元素中的节点位于该节点对的哪侧的位置。
然后在步骤S1904中,判定在步骤S1903中得到的节点位置是否是节点[1]侧。
如果判定结果为是节点[1]侧,则返回步骤S1901的处理,如果是节点[0]侧,则转移到步骤S1905,将在步骤S1902中取出的数组编号设定为分割节点的数组编号,结束处理。
在图30A所示的例子中,将根节点210a的数组编号220设定为检索开始关键字,当利用分割关键字“100011”执行检索处理时,得到作为检索结果的索引关键字251g,在探索路径堆栈中依次堆栈数组编号220、220a+1、221b、220f+1。
因此,在图19所示的步骤S1901的最初的处理时,探索路径堆栈的堆栈指针指定数组编号220f+1,接着,步骤S1904的判定处理的结果为返回步骤S1901,在下一次的步骤S1904中追溯1个,判定数组编号221b的节点210f的节点位置,转移到步骤S1905,将节点210f的数组编号221b设定为分割节点的数组编号。
这里,在进一步说明分割处理之前,说明如下情况:分割关键字是分割节点树的最大值,分割节点树是将分割关键字作为最大值的处理源的部分树中的最大的部分树、换言之为是其根节点的鉴别比特位置为最 上位的部分树。
由此前的说明可知,分割节点是对利用分割关键字进行检索时的到达分割关键字为止的路径进行追溯而得到的第一个节点[0]。
如果包含分割关键字作为索引关键字的叶节点为节点[0],则该叶节点为分割节点本身,分割节点树仅由1个叶节点构成。由于配对节点树的顺序性,存在于与该叶节点成对的节点[1]侧的叶节点的索引关键字全部大于分割关键字。因此,在当前情况下,在将分割关键字的上位的分支节点作为根节点的部分树中,分割关键字不是最大值,所以,分割关键字是分割节点树的最大值,分割节点树是将分割关键字作为最大值的处理源的部分树中的最大的部分树。
如果包含分割关键字作为索引关键字的叶节点为节点[1],则只要针对树搜索节点[1]侧来进行追溯,由于配对节点树的顺序性,不管在将哪个节点[1]作为根节点的部分树中,上述分割关键字都是这些部分树的最大值。然后,当追溯到节点[0]时,在该节点[0]的更上位的节点的下位存在与该节点[0]成对的节点[1]以下的节点,在这些节点中存在包含大于上述分割关键字的索引关键字的叶节点。
因此,将上述节点[0]即分割节点作为根节点的部分树是包含上述分割关键字作为最大值的最大的部分树。
以下,参照图20以下的附图继续进行分割处理的说明。
图20是说明图17所示的步骤S004中的处理目标的根节点的插入处理的处理流程的图。
在步骤S2001中,将存储有在图17所示的处理流程的步骤S002中求出的分割节点的数组元素的数组编号设定为插入节点的数组编号。
接着在步骤S2003中,从数组中取得空的节点对的代表节点编号。
接着在步骤S2004中,将在步骤S2003中取得的代表节点编号设定为节点[0]的数组编号。
接着在步骤S2005中,读出在步骤S2001中设定的插入节点的数组编号所指定的数组元素的内容,将其存储在通过步骤S2004设定的节点[0]的数组编号所指定的数组元素中。
最后在步骤S2009中,将节点[0]的数组编号登记为处理目标的根节点的数组编号,结束根节点的插入处理。
在图30A和图30B的(b)的例示中,将存储有分割节点210f的数组元素的数组编号221b设定为插入节点的数组编号,将所取得的空的节点对201i的代表节点编号220’设定为节点[0]的数组编号。
然后,将数组编号221b所指定的数组元素的内容即分割节点210f的内容存储在数组编号220’所指定的数组元素即节点210i中,将数组编号220’登记为处理目标的根节点的数组编号。
图21是说明图17所示的步骤S005中的通过分割关键字和处理目标的最小值来求出差分比特位置的处理流程的图。
如图21所示,在步骤S2101中,将处理目标的根节点的数组编号设定为检索开始节点的数组编号。
接着在步骤S2102中,执行图5所示的最小值检索,得到处理目标的索引关键字的最小值。
接着在步骤S2103中,对在图17所示的步骤S010中设定的分割关键字和在步骤S2103中得到的最小值进行比特序列比较,求出从上位第0比特开始发现的第一个不一致比特位置,将其设定为差分比特位置。
另外,在上述步骤S2101中,将处理目标的根节点的数组编号设定为检索开始节点的数组编号,但是显然在最后插入到处理目标中的分割节点树中包含有处理目标的最小值,所以在例如图30B的(b)所例示的处理目标中,通过将最后插入的分割节点、节点210j的数组编号220j设定为检索开始节点的数组编号,由此能够减轻最小值检索的处理。
图22是说明图17所示的步骤S006中的对根节点以外的处理目标的插入处理的处理流程的图。
最初在步骤S2201中,将存储有在图17所示的处理流程的步骤S008中求出的分割节点的数组元素的数组编号设定为插入节点的数组编号。该步骤S2201与图20所示的步骤S2001的不同点仅在于,求出分割节点的处理步骤是步骤S008。
接着在步骤S2202中,设定根节点的数组编号作为处理目标的插入 位置。
接下来的步骤S2203~步骤S2205与图20所示的根节点的插入处理的步骤S2003~步骤S2005相同。
在步骤S2203中,从数组中取得空的节点对的代表节点编号,接着在步骤S2204中,将在步骤S2203中取得的代表节点编号设定为节点[0]的数组编号,接着在步骤S2205中,读出在步骤S2201中设定的插入节点的数组编号所指定的数组元素的内容,将其存储在通过步骤S2204设定的节点[0]的数组编号所指定的数组元素中。
接着进入步骤S2206,将对步骤S2203中取得的代表节点编号加上值1而得到的值设定为节点[1]的数组编号。
接着在步骤S2207中,读出在步骤S2202中设定的处理目标的插入位置的数组编号所指定的数组元素的内容,将其存储在通过步骤S2206设定的节点[1]的数组编号所指定的数组元素中。
最后在步骤S2208中,在节点类别中设定分支,在鉴别比特位置中设定在图17所示的步骤S005中求出的鉴别比特位置,在代表节点编号中设定在步骤S2204中设定的节点[0]的数组编号,形成分支节点,存储在通过步骤S2202设定的处理目标的插入位置的数组编号所指定的数组元素中,结束处理。
在图30B和图30C的例示中,将存储有分割节点210b的数组元素的数组编号220a设定为插入节点的数组编号,将根节点210i的数组编号220’设定为处理目标的插入位置。并且,将所取得的空的节点对201j的代表节点编号220j设定为节点[0]的数组编号。
然后,将插入节点的数组编号220a所指定的数组元素的内容即分割节点210b的内容存储在节点[0]的数组编号220j所指定的数组元素即节点210j中。
另一方面,在对代表节点编号220j加上1而得到的值即数组编号220j+1所指定的数组元素即节点211j中,存储处理目标的插入位置的数组编号220’所指定的数组元素即图30B的(b)所示的根节点210i的内容。
然后,在图30C的(b)所示的根节点210i的鉴别比特位置230i中,存储有之前在和图17的步骤S005有关的例示中说明的分割节点树292的最大值即索引关键字251c“011010”与处理目标的最小值即索引关键字250g“100010”的差分比特位置“0”。并且,在代表节点编号中存储有节点[0]的数组编号220j。
根据上述说明可以理解,生成插入目标后的插入处理是如下处理,即:在插入目标的根节点的紧下部插入由分支节点彼此构成的节点对,在该节点对的节点[1]以下连接现有的处理目标的根节点以下的部分树,在节点[0]连接分割节点树。显然,通过该处理,确保了插入分割节点树后的插入目标的顺序性。
图23是说明图17所示的步骤S007中的分割节点树的删除处理的处理流程的图。在相同的删除处理中虽然也存在类似的方面,但是,图16所示的删除处理是作为存储有删除关键字的叶节点的删除节点的删除,与此相对,图23所示的删除处理基本上是作为分支节点的分割节点的删除,从处理源删除将该分割节点作为根节点的分割分支节点树。
首先在步骤S2301中,将在图17所示的步骤S002或步骤S008中求出的分割节点的数组编号设定为处理源的删除节点的数组编号。
接着,判定在步骤S2301中设定的删除节点的数组编号是否与处理源的根节点的数组编号一致。当删除节点的数组编号与处理源的根节点的数组编号一致时,进入步骤S2303,删除处理源的根节点的代表节点编号所指定的节点对,接着在步骤S2304中抹消处理源的根节点的数组编号的登记,结束处理。
当步骤S2302的判定处理的结果为删除节点的数组编号与处理源的根节点的数组编号不一致时,进入步骤S2305,求出与在步骤S2301中设定的删除节点成对的节点的数组编号,将其设定为对节点的数组编号。
接着在步骤S2306中,从处理源的探索路径堆栈中取出数组编号,在步骤S2307中将该取出的数组编号设定为父节点的数组编号,并且避开父节点的代表节点编号。另外,通过图19所示的步骤S1902或以后说明的图24所示的步骤S2402的处理,在处理源的探索路径堆栈中存储了 作为分割节点的最近的上位的父节点的数组编号。
接着在步骤S2308中,读出在步骤S2305中设定的对节点的数组编号所指定的数组元素的内容,将其存储在通过步骤S2307设定的父节点的数组编号所指定的数组元素中。
最后在步骤S2309中,删除在步骤S2307中避开的父节点的代表节点编号所指定的节点对,结束处理。
图24是说明图17所示的步骤S008中的求出下一个分割节点的处理的处理流程的图。
在步骤S2401中,判定处理源的探索路径堆栈的堆栈指针是否指定了根节点的数组编号。如果处理源的探索路径堆栈的堆栈指针指定了根节点的数组编号,则返回“没有分割节点”。
如果处理源的探索路径堆栈的堆栈指针没有指定根节点的数组编号,则进到步骤S2402,从探索路径堆栈中取出数组编号,将探索路径堆栈的堆栈指针减1。
接着进入步骤S2403,根据在步骤S2402中取出的数组编号,得到存储在该数组编号所指定的数组元素中的节点的节点位置。
接着在步骤S2404中,判定在步骤S2403中得到的节点位置是否是节点[0]侧。如果是节点[0]侧,则返回步骤S2401,如果是节点[1]侧,则转移到步骤S2406,将从在S2402中取出的数组编号中减去值1而得到的节点[0]的数组编号设定为分割节点的数组编号,返回“有分割节点”。
在图30A和图30B的例示中,在求出下一个分割节点的阶段中,处理源的探索路径堆栈的堆栈指针指定了分割节点210f的父节点的数组编号即220a+1,节点位置为节点[1]侧,所以位于与其成对的节点[0]侧的节点210b成为下一个分割节点,将存储有该节点210b的数组元素的数组编号即220a设定为分割节点的数组编号。
并且,在图30B和图30C的例示中,在进一步求出下一个分割节点的阶段中,处理源的探索路径堆栈的堆栈指针指定了节点210b的父节点即根节点210a的数组编号220,所以上述步骤S2401的判定处理的结果为返回没有分割节点。即,当分割节点的父节点为根节点时,不存在下 一个分割节点。从配对节点树的顺序性来看这是显然的。
图25是说明求出将在图17所示的步骤S008中求出的分割节点作为根节点的分割节点树的最大值并将其作为下一个分割关键字的步骤S010的处理流程的图。
首先在步骤S2501中,避开处理源的探索路径堆栈的堆栈指针的值。其理由是,通过图19所示的步骤S1902或图24所示的步骤S2402的处理,指定了分割节点的父节点的数组编号的处理源的堆栈指针的值由于后述步骤S2503的最大值检索而发生变动,不能在图23所示的步骤S2306中使用。
接着在步骤S2502中,将在图24的步骤S2406中设定的分割节点的数组编号设定为检索开始节点的数组编号。
接着在步骤S2503中,执行图6所示的最大值检索,求出索引关键字的最大值。
接着进入步骤S2504,将在步骤S2502中得到的最大值设定为分割关键字。
最后在步骤S2505中,将在步骤S2501中避开的值复原为处理源的探索路径堆栈的堆栈指针的值,结束处理。
以上,根据参照图24和图25的详细说明可以理解,在图17的步骤S008中求出的下一个分割节点与在步骤S010中求出的下一个分割关键字的关系,与之前说明的在步骤S001中设定的分割关键字与在步骤S002中求出的分割节点或分割节点树的关系相同。
显而易见,在上述步骤S010中求出的下一个分割关键字是将在步骤S008中求出的下一个分割节点作为根节点的分割节点树的最大值。并且,根据配对节点树的顺序性可知:由于在步骤S008中求出的下一个分割节点是节点[0],所以将其上位的节点作为根节点的部分树包含存储了比在步骤S010中求出的下一个分割关键字大的索引关键字的叶节点。
以上详细说明了实施例3的配对节点树的分割处理,但是,根据实施例3,以分割节点树为单位进行分割处理。即,通过从处理源对分割节点进行分割,将分割节点的对节点复制到父节点,从而从处理源删除分 割节点树,通过将分割节点插入到处理目标,由此完成分割节点树的插入。
因此,只要使用相同的数组,就不需要对分割节点以外的节点的处理,与实施例2的情况相比,处理的执行步骤数量进一步减少。
接着,对与分割处理同样地以部分树为单位进行处理的实施例3的配对节点树的结合处理进行说明。本实施例的结合处理与实施例1和实施例2的结合处理有很大不同,实施例1和实施例2的结合处理以索引关键字为单元、换言之以节点为单位进行结合处理,与此相对,本实施例的结合处理以满足规定条件的部分树为单位从处理源进行分割并与处理目标进行结合。在实施例1和实施例2的结合处理中,通过选择分割关键字从而能够原样地应用分割处理,与此相对,如本实施例那样以部分树为单位进行结合处理时,无法单纯地应用分割处理。
这是因为,处理源和处理目标具有与存储在各自内部的索引关键字的差分比特位置对应的结构,未必能够将处理源本身作为分割节点树直接插入处理目标。
图26是说明实施例3的配对节点树的结合处理流程的图。在以下的说明中,处理目标的索引关键字大于处理源的索引关键字,但是,即使相反也能够同样地进行处理,根据下述说明能够容易地理解这点。
图31A~图31C是通过实例来说明上述结合处理的图,例示了与图2B所例示的配对节点树的部分树类似的树。
图31A是示出结合处理开始前的处理源和处理目标的树的结构例的图。图31A的(a)例示了处理源,示出了附加有其数组编号的符号220a+1的分割结合节点和分割结合节点树293,该分割结合节点树293是将该分割结合节点作为根节点的部分树,且是成为结合处理的单位的部分树。以后,对于表示节点的符号,有时用通过检索处理搜索该节点时堆栈在探索路径堆栈中的该节点被配置的数组元素的数组编号来表示。
图31A的(b)例示了处理目标,对作为结合位置的节点附加该数组编号的符号221f来示出。并且,图31A示出处理源的最大值是索引关键字251g“101001”的情况和处理目标的最小值是索引关键字 250h“101011”。
图31B是示出将图31A所示的分割结合节点树293插入处理目标并从处理源删除后的树结构的图。图31B的(a)用虚线包围示出处理源的下一个分割结合节点树294,并示出最大值为索引关键字251d“011010”的情况。图31B的(b)分别用虚线包围示出处理目标的被结合的分割节点树293、通过结合处理追加的节点对201k和节点221f的链接关系,示出下一个结合位置是节点221的情况。
图31C是示出将图31B所示的分割结合节点树294插入到处理目标并从处理源删除后的树结构的图。图31B的(a)所示的处理源的下一个分割结合节点220是根节点,所以删除处理源的根节点,图31C的(a)中什么也不显示。图31C的(b)分别用虚线包围示出处理目标的被结合的分割节点树294、通过结合处理而追加的节点对201m和节点221的链接关系。
下面,参照图26和图31A~图31C说明本实施例的结合处理的概要。
在图26的步骤S2601中,求出处理源的最大值和处理目标的最小值的差分比特位置。在图31A的例示中,求出处理源的最大值“101001”和处理目标的最小值“101011”的差分比特位置4。求出差分比特位置的处理的详细情况在后面参照图27进行说明。另外,在以下的说明中,有时将在该步骤S2601中求出的差分比特位置简称为差分比特位置。
接着在步骤S2602中,根据在步骤S2601中求出的差分比特位置,求出处理源的分割结合节点。在图31A的例示中,求出分割结合节点220a+1。该处理的详细情况在后面参照图28进行说明。
接着进入步骤S2603,根据在步骤S2601中求出的差分比特位置,求出用于插入在步骤S2602中求出的分割结合节点的处理目标的结合位置。在图31A的例示中,求出了结合位置221f。该处理的详细情况在后面参照图29进行说明。
接着在步骤S2604中,在步骤S2603中求出的结合位置中插入在步骤S2602中求出的分割结合节点。如下实现该处理:在参照图22说明的插入处理中,将在步骤S2602中求出的分割结合节点的数组编号设定为 步骤S2201的插入节点的数组编号,在步骤S2202的处理目标的插入位置中设定在步骤S2603中求出的结合位置的数组编号,来执行该插入处理。
在图31A和图31B的例示中,在图22的步骤S2201中,将分割结合节点220a+1的数组编号220a+1设定在插入节点设定区域中,在步骤S2202中,在插入位置设定区域设定结合位置221f的数组编号221f。接着在步骤S2203中,取得空的节点对201k,在步骤S2204中,将该代表节点编号220k设定为节点[0]的数组编号。
然后,在步骤S2205中,读出在插入节点设定区域中设定的数组编号220a+1所指定的数组元素的内容、即分割结合节点221b的内容,将其存储在被设定为节点[0]的数组编号的数组编号220k所指定的数组元素即节点210k中。
进而在步骤S2206中,将对代表节点编号220k加上1而得到的值即220k+1设定为节点[1]的数组编号。然后,在步骤S2207中,读出设定为插入位置的数组编号221f所指定的数组元素即节点210h的内容,将其存储在被设定为节点[1]的数组编号的数组编号220k+1所指定的数组元素即节点211k中。
最后在步骤S2208中,在被设定为插入位置的数组编号221f所指定的数组元素即节点210h的位置,在节点类别中设定0、在鉴别比特位置中设定在图26的步骤S2601中求出的差分比特位置4、在代表节点编号中设定被设定为节点[0]的数组编号的数组编号220k,生成新的分支节点,得到图31B的(b)所示的结合后的处理目标的结构。
接着返回图26的树结合处理的说明,在步骤S2605中,从处理源删除分割结合节点。该处理如下实现:在参照图23说明的删除处理中,将分割节点换成分割结合节点来执行。
接着进入步骤S2606,判定处理源是否已登记。如果已登记,则返回步骤S2601反复进行处理,如果未登记,则结合处理完成,所以结束处理。
接着,参照图27~图29详细说明本实施例的结合处理。
图27是说明图26所示的步骤S2601的求出差分比特位置的处理的详细处理流程的图。首先,在步骤S2701中,将处理源的根节点的数组编号设定为检索开始节点的数组编号。接着在步骤S2702中,通过图6所示的检索处理,求出处理源的索引关键字的最大值。
接着进入步骤S2703,将处理目标的根节点的数组编号设定为检索开始节点的数组编号。接着在步骤S2704中,通过图5所示的检索处理,求出处理目标的索引关键字的最小值。
接着在步骤S2705中,进行在步骤S2702中求出的最大值和在步骤S2704中求出的最小值的比特序列比较,求出从上位第0比特开始发现的第一个不一致比特的位置,将其设定为差分比特位置,结束处理。
如上所述,在图31A的例示中,求出处理源的最大值“101001”和处理目标的最小值“101011”的差分比特位置4。然后,在处理源和处理目标中都不存在鉴别比特位置与该差分比特位置相等的分支节点。
这是因为:处理目标的最小值大于处理源的最大值,所以处理源的最大值的差分比特位置的比特值为0,如果在处理源的分支节点中存在鉴别比特位置与差分比特位置相等的节点,则处理源的最大值为节点[0],与作为最大值矛盾。处理目标也同样。
接着,说明求出处理源的分割结合节点的处理。除了处理源仅是根节点的例外情况,分割结合节点是通过最大值检索搜索到的分支节点中的、鉴别比特位置位于在图26所示的步骤S2601中求出的差分比特位置的下位的分支节点中的、作为最上位的分支节点。
若把以分割结合节点为根节点的处理源的部分树称为分割结合节点树,则本实施例的结合处理以分割结合节点树为单位进行结合处理。
图28是说明图26所示的步骤S2602的求出处理源的分割结合节点的处理流程的图。另外,在求出分割结合节点的处理的开始时,处理源的探索路径堆栈的堆栈指针指定图26所示的步骤S2601中的最大值检索的结果、即存储了索引关键字的最大值的叶节点的数组编号。
在步骤S2801中,判定处理源的探索路径堆栈的堆栈指针是否指定了根节点的数组编号。在处理源的探索路径堆栈的堆栈指针指定了根节 点的数组编号的情况下,进入步骤S2810,在处理源的探索路径堆栈的堆栈指针没有指定根节点的数组编号的情况下,进入步骤S2802。
在步骤S2802中,使探索路径堆栈的堆栈指针后退1个,取出该堆栈指针所指定的数组编号,进入步骤S2803。
在步骤S2803中,取出在步骤S2802中取出的数组编号所指定的数组元素的内容作为节点,在步骤S2304中取得所取出的节点的鉴别比特位置。
接着在步骤S2805中,判定在步骤S2804中取得的鉴别比特位置与差分比特位置相比是否为上位的位置关系。如果为下位,则返回步骤S2801,如果为上位,则进入步骤S2809。如上所述,上述鉴别比特位置与差分比特位置不相等。
在步骤S2809中,使处理源的探索路径堆栈的堆栈指针前进1个,转移到步骤S2810。
在步骤S2810中,从处理源的探索路径堆栈中取出堆栈指针所指定的数组编号,将其设定为处理源的分割结合节点的数组编号,结束处理。另外,在以下的说明中,有时将这里设定的数组编号简称为分割结合节点的数组编号。
参照图31A和图31B说明上述处理时,如下所述。
在图31A的例示中,当从存储了关键字的最大值的节点211g开始追溯探索路径时,首先,由于堆栈指针指定了节点211g的数组编号221b,所以步骤S2801的判定为“否”,反复进行从步骤S2801开始的处理,由于差分比特位置为4,所以在步骤S2802的处理中到达根节点210a,由于根节点210a的鉴别比特位置为0、是差分比特位置的上位,所以在步骤S2805的判定处理中分支到步骤S2809,通过步骤S2809的处理,使探索路径前进一个,求出分割结合节点220a+1。
在图31B的例示中,当从存储了关键字的最大值的节点211d开始追溯探索路径时,由于差分比特位置为0,所以在步骤S2802的处理中到达根节点210a,由于根节点210a的鉴别比特位置为1、是差分比特位置的下位,所以在步骤S2805的判定处理中分支到步骤S2801,在步骤S2801 的判定处理中判定为根节点而分支到步骤S2810,求出根节点210a作为下一个分割结合节点。
接着,说明求出处理目标的结合位置的处理。在结合处理后的处理目标中插入存储了处理源的索引关键字的最大值的叶节点,所以新存在具有与差分比特位置相等的值的鉴别比特位置的分支节点。即,将具有与差分比特位置相等的值的鉴别比特位置的分支节点插入到通过最小值检索而搜索过的路径中,但是将该插入位置作为处理目标的结合位置。
在配对节点树中,下位的分支节点的鉴别比特位置位于上位的分支节点的鉴别比特位置的下位,所以具有为差分比特位置的最近的上位的鉴别比特位置的分支节点的子节点的位置成为结合位置,或者如果例外地不存在具有上位的鉴别比特位置的分支节点,则根节点成为结合位置。
在插入到结合位置的分支节点的子节点对的节点[1]侧,存在存储了结合前的处理目标的索引关键字的最小值的叶节点,节点[0]为分割结合节点。
图29是说明上述求出处理目标的结合位置的处理流程的图。如图29所示,求出处理目标的结合位置的处理流程与图28所示的求出处理源的分割结合节点的处理流程的结构相同。不同点仅在于,图29的处理流程是针对处理目标的,求出的是结合位置。另外,在求出处理目标的结合位置的处理的开始时,处理目标的探索路径堆栈的堆栈指针指定了图26所示的步骤S2601中的最小值检索的结果、即存储了索引关键字的最小值的叶节点的数组编号。
在步骤S2901中,判定处理目标的探索路径堆栈的堆栈指针是否指定了根节点的数组编号。在处理目标的探索路径堆栈的堆栈指针指定了根节点的数组编号的情况下,进入步骤S2910,在处理目标的探索路径堆栈的堆栈指针没有指定根节点的数组编号的情况下,进入步骤S2902。
在步骤S2902中,使探索路径堆栈的堆栈指针后退1个,取出数组编号,进入步骤S2903。
在步骤S2903中,取出在步骤S2902中取出的数组编号所指定的数组元素的内容作为节点,在步骤S2904中,取得所取出的节点的鉴别比 特位置。
接着在步骤S2905中,判定在步骤S2904中取得的鉴别比特位置与差分比特位置相比是否为上位的位置关系。如果为下位,则返回步骤S2901,如果为上位,则进入步骤S2909。如上所述,上述鉴别比特位置与差分比特位置不相等。
在步骤S2909中,使处理源的探索路径堆栈的堆栈指针前进1个,转移到步骤S2910。
在步骤S2910中,从处理目标的探索路径堆栈中取出堆栈指针所指定的数组编号,将其设定为处理目标的结合位置的数组编号,结束处理。另外,在以下的说明中,有时将这里设定的数组编号简称为结合位置的数组编号。
参照图31A和图31B说明上述处理时,如下所述。
在图31A的例示中,当从存储了关键字的最小值的节点210h开始追溯探索路径时,由于差分比特位置为4、在步骤S2904中取出的根节点210f的鉴别比特位置为3,所以从步骤S2905分支到步骤S2909,通过步骤S2909的处理,使探索路径前进一个,求出结合位置的数组编号221f。
在图31B的例示中,当从存储了关键字的最小值的节点210g开始追溯探索路径时,由于差分比特位置为0,所以到达根节点210f,在步骤S2901中判定为是根节点而分支到步骤S2910,求出根节点210f的数组编号221作为下一个结合位置的数组编号。
以上,详细说明了实施例3的配对节点树的结合处理,但是,根据实施例3,以分割结合节点树为单位进行结合处理。即,从处理源将分割结合节点进行分割,将分割结合节点的对节点复制到父节点,从而从处理源删除分割结合节点树,将分割结合节点结合到处理目标,由此完成分割结合节点树的结合。
因此,只要使用相同的数组,就不需要针对分割结合节点以外的节点的处理,与实施例2的情况相比,处理的执行步骤数量进一步减少。
以上详细说明了用于实施本发明的最佳方式,然而对本领域技术人员来说,本发明的实施方式显然不限于此而能进行各种变形。
显然,能利用使计算机执行以上说明的本发明的实施方式的配对节点树的分割结合处理及其等同物的程序,来实现本发明的配对节点树的分割方法和结合方法。
因此,上述程序以及存储有程序的计算机可读取的存储介质包含在本发明的实施方式内。

Claims (15)

1.一种配对节点树的分割方法,该配对节点树是由根节点、和配置在相邻的存储区域中的分支节点和叶节点、或分支节点之间或叶节点之间的节点对构成的比特序列检索用的树,
所述根节点是表示树的起点的节点,当该树的节点为一个时所述根节点是所述叶节点,当树的节点为两个以上时所述根节点是所述分支节点,
所述分支节点包含表示进行比特序列检索的检索关键字的鉴别比特位置和链接目的地节点对中的一个节点即代表节点的位置的位置信息,所述叶节点包含由检索对象的比特序列构成的索引关键字,
将所述树的任意节点作为检索开始节点,依次反复下述动作:在所述分支节点中根据该分支节点中包含的鉴别比特位置的检索关键字的比特值,来链接到链接目的地节点对的代表节点或配置在与其相邻的存储区域中的节点,直至到达所述叶节点为止,由此将存储在所述叶节点中的索引关键字作为检索结果关键字,所述检索结果关键字是所述树的以所述检索开始节点为根节点的任意部分树的基于所述检索关键字的检索结果,
所述配对节点树的分割方法的特征在于,
该配对节点树的分割方法具有以下步骤:
取得分割关键字的步骤,该分割关键字决定对分割对象即处理源配对节点树进行分割的索引关键字;
处理源最小值或最大值取得步骤,求出所述处理源配对节点树的索引关键字的最小值或最大值;
比较步骤,对所述分割关键字和所述最小值或最大值的大小进行比较,如果该最小值大于所述分割关键字或该最大值小于所述分割关键字,则结束处理;
生成步骤,如果所述比较结果为该最小值小于等于所述分割关键字或该最大值大于等于所述分割关键字,则在不存在将该最小值或该最大值作为索引关键字插入的处理目标配对节点树的情况下,生成将包含该最小值或该最大值作为索引关键字的叶节点作为根节点的处理目标配对节点树,在存在所述处理目标配对节点树的情况下,对该处理目标配对节点树插入该最小值或该最大值的索引关键字,从而生成新的处理目标配对节点树;以及
删除步骤,从所述处理源配对节点树中删除所述最小值或所述最大值的索引关键字,
反复进行将删除了所述最小值或所述最大值的索引关键字后的所述处理源配对节点树作为新的处理源配对节点树的所述处理源最小值或最大值取得步骤、所述比较步骤、所述生成步骤、以及所述删除步骤,直到在所述处理源最小值或最大值取得步骤中取得的最小值大于所述分割关键字或最大值小于所述分割关键字为止。
2.根据权利要求1所述的配对节点树的分割方法,其特征在于,
所述处理源最小值或最大值取得步骤是如下步骤:
将所述处理源配对节点树的根节点作为检索开始节点,仅链接所述节点对中的构成该节点对的2个节点中的代表节点或配置在与代表节点相邻的存储区域中的节点而到达叶节点,从而求出所述处理源配对节点树的索引关键字的最小值或最大值。
3.根据权利要求1或2所述的配对节点树的分割方法,其特征在于,
所述配对节点树存储在数组中,所述位置信息是存储有与该位置信息对应的节点的所述数组的数组元素的数组编号,
存储有所述检索开始节点的数组元素的数组编号、和存储有从所述检索开始节点到所述叶节点的链接目的地节点的数组元素的数组编号依次保存在堆栈中,
所述生成步骤在存在所述处理目标配对节点树的情况下包含以下步骤:
将在所述处理源最小值或最大值取得步骤中求出的最小值或最大值设定为所述处理目标配对节点树的插入关键字,
执行取得所述处理目标配对节点树的索引关键字的最大值或最小值的处理目标最大值或最小值取得步骤,
在所述插入关键字与所述索引关键字的最大值或最小值之间进行比特序列比较,求出成为不同比特值的开头的比特位置,
根据该比特位置与存储在所述堆栈中的数组编号的分支节点的鉴别比特位置之间的相对位置关系,决定如下的节点对的插入位置即处理目标父节点:该节点对包括保持所述插入关键字的叶节点,
将该处理目标父节点的所述位置信息作为存储有如下的节点对的代表节点的数组元素的数组编号:该节点对包括保持所述插入关键字的叶节点。
4.根据权利要求3所述的配对节点树的分割方法,其特征在于,
所述生成步骤进一步包含以下步骤:将所述处理目标父节点设定为插入了包含插入关键字的叶节点的已插入节点,
所述处理目标最大值或最小值取得步骤是将所述已插入节点作为检索开始节点,取得所述处理目标配对节点树的索引关键字的最大值或最小值的步骤。
5.根据权利要求4所述的配对节点树的分割方法,其特征在于,
所述删除步骤包含以下步骤:
将包含在所述处理源最小值或最大值取得步骤中求出的最小值或最大值作为索引关键字的叶节点设定为所述处理源配对节点树的删除节点,
将与所述删除节点构成同一节点对的节点的内容写入到该节点对的链接源的分支节点内,
删除该节点对。
6.一种配对节点树的结合方法,该配对节点树的结合方法用于2个配对节点树的结合,该配对节点树是由根节点、和配置在相邻的存储区域中的分支节点和叶节点、或分支节点之间或叶节点之间的节点对构成的比特序列检索用的树,
所述根节点是表示树的起点的节点,当该树的节点为一个时所述根节点是所述叶节点,当树的节点为两个以上时所述根节点是所述分支节点,
所述分支节点包含表示进行比特序列检索的检索关键字的鉴别比特位置和链接目的地节点对中的一个节点即代表节点的位置的位置信息,所述叶节点包含由检索对象的比特序列构成的索引关键字,
将所述树的任意节点作为检索开始节点,依次反复下述动作:在所述分支节点中根据该分支节点中包含的鉴别比特位置的检索关键字的比特值,来链接到链接目的地节点对的代表节点或配置在与其相邻的存储区域中的节点,直至到达所述叶节点为止,由此将存储在所述叶节点中的索引关键字作为检索结果关键字,所述检索结果关键字是所述树的以所述检索开始节点为根节点的任意部分树的基于所述检索关键字的检索结果,
所述配对节点树的结合方法的特征在于,
该配对节点树的结合方法具有以下步骤:
处理源最小值或最大值取得步骤,求出作为所述2个配对节点树中的一方的处理源配对节点树的索引关键字的最小值或最大值;
插入步骤,在作为所述2个配对节点树中的另一方的处理目标配对节点树中插入所述最小值或最大值的索引关键字;以及
删除步骤,从所述处理源配对节点树中删除所述最小值或所述最大值的索引关键字,
反复进行将删除了所述最小值或所述最大值的索引关键字后的所述处理源配对节点树作为新的处理源配对节点树的所述处理源最小值或最大值取得步骤、所述插入步骤、以及所述删除步骤,直到所述处理源配对节点树被全部删除。
7.根据权利要求6所述的配对节点树的结合方法,其特征在于,
所述配对节点树存储在数组中,所述位置信息是存储有与该位置信息对应的节点的所述数组的数组元素的数组编号,
存储有所述检索开始节点的数组元素的数组编号、和存储有从所述检索开始节点到所述叶节点的链接目的地节点的数组元素的数组编号依次保存在堆栈中,
所述插入步骤包含以下步骤:
将所述最小值或所述最大值设定为所述处理目标配对节点树的插入关键字,
执行取得所述处理目标配对节点树的索引关键字的最大值或最小值的处理目标最大值或最小值取得步骤,
在所述插入关键字与所述索引关键字的最大值或最小值之间进行比特序列比较,求出成为不同比特值的开头的比特位置,
根据该比特位置与存储在所述堆栈中的数组编号的分支节点的鉴别比特位置之间的相对位置关系,决定如下的节点对的插入位置即父节点:该节点对包括保持所述插入关键字的叶节点,
将该父节点的所述位置信息作为存储有如下的节点对的代表节点的数组元素的数组编号:该节点对包括保持所述插入关键字的叶节点。
8.根据权利要求7所述的配对节点树的结合方法,其特征在于,
所述删除步骤包含以下步骤:
将包含在所述处理源最小值或最大值取得步骤中求出的最小值或最大值作为索引关键字的叶节点设定为所述处理源配对节点树的删除节点,
将与所述删除节点构成同一节点对的节点的内容写入到该节点对的链接源的分支节点中,
删除该节点对。
9.一种配对节点树的分割方法,该配对节点树是由根节点、和配置在相邻的存储区域中的分支节点和叶节点、或分支节点之间或叶节点之间的节点对构成的比特序列检索用的树,
所述根节点是表示树的起点的节点,当该树的节点为一个时所述根节点是所述叶节点,当树的节点为两个以上时所述根节点是所述分支节点,
所述分支节点包含表示进行比特序列检索的检索关键字的鉴别比特位置和链接目的地节点对中的一个节点即代表节点的位置的位置信息,所述叶节点包含由检索对象的比特序列构成的索引关键字,
将所述树的任意节点作为检索开始节点,依次反复下述动作:在所述分支节点中根据该分支节点中包含的鉴别比特位置的检索关键字的比特值,来链接到链接目的地节点对的代表节点或配置在与其相邻的存储区域中的节点,直至到达所述叶节点为止,由此将存储在所述叶节点中的索引关键字作为检索结果关键字,所述检索结果关键字是所述树的以所述检索开始节点为根节点的任意部分树的基于所述检索关键字的检索结果,
所述配对节点树的分割方法的特征在于,
该配对节点树的分割方法具有以下步骤:
取得分割关键字的步骤,该分割关键字用于分割作为分割对象的处理源配对节点树;
检索步骤,将该分割关键字作为所述检索关键字,并将所述处理源配对节点树的根节点作为所述检索开始节点,从所述处理源配对节点树得到所述分割关键字作为检索结果关键字,并且在堆栈中依次存储所述根节点的位置信息和从该根节点到包含所述分割关键字的叶节点的链接目的地节点的位置信息;
分割节点取得步骤,依次读取存储在所述堆栈中的位置信息,直到存储有所述代表节点的存储区域的位置信息为止,或者直到存储有与所述代表节点成对的节点的存储区域的位置信息为止,求出该读出的存储有所述代表节点的存储区域的位置信息的存储区域所存储的节点作为分割节点,或者求出该读出的存储有与所述代表节点成对的节点的存储区域的位置信息的存储区域所存储的节点作为分割节点;
生成步骤,在不存在插入将所述分割节点作为根节点的部分树即分割节点树的处理目标配对节点树的情况下,将该分割节点树作为处理目标配对节点树来生成处理目标配对节点树,在存在所述处理目标配对节点树的情况下,将该分割节点树插入该处理目标配对节点树,从而生成新的处理目标配对节点树;以及
删除步骤,从所述处理源配对节点树中删除所述分割节点树。
10.根据权利要求9所述的配对节点树的分割方法,其特征在于,
该配对节点树的分割方法还具有下一个分割节点取得步骤,在该下一个分割节点取得步骤中,依次读取存储在所述堆栈中的、在存储有所述分割节点的存储区域的位置信息之前存储的存储区域的位置信息,直到存储有与所述代表节点成对的节点的存储区域的位置信息为止,或者直到存储有所述代表节点的存储区域的位置信息为止,取得与如下存储区域中存储的节点成对的节点作为下一个分割节点,该存储区域是:该读出的存储有与所述代表节点成对的节点的存储区域的位置信息的存储区域,或者该读出的存储有所述代表节点的存储区域的位置信息的存储区域,
将所述分割节点作为所述下一个分割节点来执行所述生成步骤和所述删除步骤。
11.根据权利要求9或10所述的配对节点树的分割方法,其特征在于,
所述配对节点树存储在数组中,所述位置信息是存储有与该位置信息对应的节点的所述数组的数组元素的数组编号。
12.一种配对节点树的结合方法,该配对节点树的结合方法用于2个配对节点树的结合,该配对节点树是由根节点、和配置在相邻的存储区域中的分支节点和叶节点、或分支节点之间或叶节点之间的节点对构成的比特序列检索用的树,
所述根节点是表示树的起点的节点,当该树的节点为一个时所述根节点是所述叶节点,当树的节点为两个以上时所述根节点是所述分支节点,
所述分支节点包含表示进行比特序列检索的检索关键字的鉴别比特位置和链接目的地节点对中的一个节点即代表节点的位置的位置信息,所述叶节点包含由检索对象的比特序列构成的索引关键字,
将所述树的任意节点作为检索开始节点,依次反复下述动作:在所述分支节点中根据该分支节点中包含的鉴别比特位置的检索关键字的比特值,来链接到链接目的地节点对的代表节点或配置在与其相邻的存储区域中的节点,直至到达所述叶节点为止,由此将存储在所述叶节点中的索引关键字作为检索结果关键字,所述检索结果关键字是所述树的以所述检索开始节点为根节点的任意部分树的基于所述检索关键字的检索结果,
所述配对节点树的结合方法的特征在于,
该配对节点树的结合方法具有以下步骤:
处理源最大值或最小值取得步骤,求出作为所述2个配对节点树中的一方的处理源配对节点树的索引关键字的最大值或最小值;
处理目标最小值或最大值取得步骤,求出作为所述2个配对节点树中的另一方的处理目标配对节点树的索引关键字的最小值或最大值;
差分比特位置取得步骤,求出在所述处理源最大值或最小值取得步骤中求出的处理源配对节点树的索引关键字的最大值、与在所述处理目标最小值或最大值取得步骤中求出的处理目标配对节点树的索引关键字的最小值之间的差分比特位置,或者求出所述处理源最大值或最小值取得步骤中求出的处理源配对节点树的索引关键字的最小值、与在所述处理目标最小值或最大值取得步骤中求出的处理目标配对节点树的索引关键字的最大值之间的差分比特位置;
分割结合节点取得步骤,根据在所述差分比特位置取得步骤中求出的差分比特位置,求出要从所述处理源分割并与处理目标结合的部分树的根节点即分割结合节点;
结合位置取得步骤,根据在所述差分比特位置取得步骤中求出的差分比特位置,求出要结合在分割结合节点取得步骤中求出的分割结合节点的处理目标的结合位置;
插入步骤,在所述结合位置取得步骤中求出的处理目标的结合位置中插入在所述分割结合节点取得步骤中求出的分割结合节点;以及
删除步骤,从所述处理源配对节点树中删除在所述分割结合节点取得步骤中求出的分割结合节点,
反复进行将删除了所述分割结合节点后的所述处理源配对节点树作为新的处理源配对节点树的所述处理源最大值或最小值取得步骤、所述处理目标最小值或最大值取得步骤、所述差分比特位置取得步骤、所述分割结合节点取得步骤、所述结合位置取得步骤、所述插入步骤以及所述删除步骤,直至所述处理源配对节点树被完全删除。
13.根据权利要求12所述的配对节点树的结合方法,其特征在于,
所述处理源最大值或最小值取得步骤是如下的步骤:将所述处理源配对节点树的根节点作为检索开始节点,仅链接所述节点对中的构成该节点对的2个节点中的代表节点或配置在与代表节点相邻的存储区域中的节点而到达叶节点,从而求出所述处理源配对节点树的索引关键字的最大值或最小值,
所述处理目标最小值或最大值取得步骤是如下的步骤:将所述处理目标配对节点树的根节点作为检索开始节点,仅链接所述节点对中的构成该节点对的2个节点中的代表节点或配置在与代表节点相邻的存储区域中的节点而到达叶节点,从而求出所述处理目标配对节点树的索引关键字的最小值或最大值。
14.根据权利要求13所述的配对节点树的结合方法,其特征在于,
所述处理源配对节点树和处理目标配对节点树存储在数组中,所述位置信息是存储有与该位置信息对应的节点的所述数组的数组元素的数组编号,
所述处理源最大值或最小值取得步骤和所述处理目标最小值或最大值取得步骤中的存储有所述检索开始节点的数组元素的数组编号、和存储有从所述检索开始节点到所述叶节点的链接目的地节点的数组元素的数组编号分别依次保存在处理源的堆栈和处理目标的堆栈中。
15.根据权利要求14所述的配对节点树的结合方法,其特征在于,
在所述分割结合节点取得步骤中,从在存储于所述处理源的堆栈中的数组编号的前一个所存储的数组编号开始进行读出,直到存储在该数组编号的数组元素中的分支节点的鉴别比特位置为所述差分比特位置的上位,求出在该读出的数组元素的下一个、存储在所述处理源的堆栈中的数组编号的数组元素中所存储的节点,作为所述分割结合节点,
在所述结合位置取得步骤中,从在存储于所述处理目标的堆栈中的数组编号的前一个所存储的数组编号开始进行读出,直到存储在该数组编号的数组元素中的分支节点的鉴别比特位置为所述差分比特位置的上位,求出在该读出的数组元素的下一个、存储在所述处理目标的堆栈中的数组编号的数组元素中所存储的节点,作为所述结合位置。
CN2007800440419A 2006-11-28 2007-10-19 配对节点树的分割/结合方法和程序 Expired - Fee Related CN101542485B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
JP319407/2006 2006-11-28
JP2006319407 2006-11-28
JP169459/2007 2007-06-27
JP2007169459A JP4379894B2 (ja) 2006-11-28 2007-06-27 カップルドノードツリーの分割/結合方法及びプログラム
PCT/JP2007/001142 WO2008065735A1 (fr) 2006-11-28 2007-10-19 Procédé de division/connexion pour un arbre de nœuds couplé et programme

Publications (2)

Publication Number Publication Date
CN101542485A CN101542485A (zh) 2009-09-23
CN101542485B true CN101542485B (zh) 2011-07-27

Family

ID=39467538

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2007800440419A Expired - Fee Related CN101542485B (zh) 2006-11-28 2007-10-19 配对节点树的分割/结合方法和程序

Country Status (6)

Country Link
US (1) US8224861B2 (zh)
EP (1) EP2098965A4 (zh)
JP (1) JP4379894B2 (zh)
CN (1) CN101542485B (zh)
TW (1) TW200834356A (zh)
WO (1) WO2008065735A1 (zh)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4527753B2 (ja) 2007-07-03 2010-08-18 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
CN101802822B (zh) 2007-09-14 2012-10-24 新叶股份有限公司 比特序列检索装置、检索方法以及程序
JP4502223B2 (ja) * 2007-12-05 2010-07-14 株式会社エスグランツ ビット列のマージソート装置、方法及びプログラム
JP4498409B2 (ja) * 2007-12-28 2010-07-07 株式会社エスグランツ データベースのインデックスキー更新方法及びプログラム
US7882138B1 (en) * 2008-03-27 2011-02-01 Sonoa Networks India (PVT) Ltd. Progressive evaluation of predicate expressions in streaming XPath processor
CN102654842B (zh) * 2011-03-02 2014-07-30 深圳市金蝶中间件有限公司 一种判断流程图中是否存在循环回路的方法和装置
CN102184165B (zh) * 2011-04-22 2013-01-02 烽火通信科技股份有限公司 一种节省内存的lcs算法
US8818971B1 (en) * 2012-01-30 2014-08-26 Google Inc. Processing bulk deletions in distributed databases
CN102750328B (zh) * 2012-05-29 2018-08-10 北京城市网邻信息技术有限公司 一种数据结构的构造和存储方法
US9501506B1 (en) 2013-03-15 2016-11-22 Google Inc. Indexing system
US9483568B1 (en) 2013-06-05 2016-11-01 Google Inc. Indexing system
JP2015075830A (ja) * 2013-10-07 2015-04-20 富士通株式会社 並列処理管理プログラム、並列処理管理方法、及び、並列処理管理装置
JP5959068B2 (ja) * 2014-02-26 2016-08-02 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 接続関係の可視化を支援する装置及び方法
CN105913848A (zh) * 2016-04-13 2016-08-31 乐视控股(北京)有限公司 一种基于最小堆的路径存储方法、系统和语音识别器
US10963301B2 (en) * 2019-07-17 2021-03-30 Google Llc Scheduling operations on a computation graph
CN115374124B (zh) * 2022-08-29 2023-05-12 钟士平 基于a+树数据结构存储的数据查询方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1270728A (zh) * 1997-09-15 2000-10-18 埃弗内特集团股份有限公司 快速路由查找的方法和系统
EP1107126A2 (en) * 1999-12-08 2001-06-13 Hewlett-Packard Company, A Delaware Corporation A fast, efficient, adaptive, hybrid tree

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5261088A (en) * 1990-04-26 1993-11-09 International Business Machines Corporation Managing locality in space reuse in a shadow written B-tree via interior node free space list
JPH07210569A (ja) 1994-01-19 1995-08-11 Oki Electric Ind Co Ltd 情報検索方法および情報検索装置
US6175835B1 (en) * 1996-07-26 2001-01-16 Ori Software Development, Ltd. Layered index with a basic unbalanced partitioned index that allows a balanced structure of blocks
GB9811574D0 (en) * 1998-05-30 1998-07-29 Ibm Indexed file system and a method and a mechanism for accessing data records from such a system
US6438562B1 (en) * 1999-08-24 2002-08-20 Oracle Corporation Parallel index maintenance
US6532476B1 (en) * 1999-11-13 2003-03-11 Precision Solutions, Inc. Software based methodology for the storage and retrieval of diverse information
US6614789B1 (en) * 1999-12-29 2003-09-02 Nasser Yazdani Method of and apparatus for matching strings of different lengths
US6675163B1 (en) * 2000-04-06 2004-01-06 International Business Machines Corporation Full match (FM) search algorithm implementation for a network processor
JP3601416B2 (ja) 2000-06-13 2004-12-15 日本電気株式会社 情報検索方法及び装置
JP3691018B2 (ja) * 2002-01-31 2005-08-31 日本電信電話株式会社 最長一致検索回路および方法およびプログラムおよび記録媒体
US6694323B2 (en) * 2002-04-25 2004-02-17 Sybase, Inc. System and methodology for providing compact B-Tree
FI118062B (fi) * 2003-04-30 2007-06-15 Nokia Corp Pienimuistinen päätöspuu
JP2006187872A (ja) 2004-12-28 2006-07-20 Canon Inc インクジェット記録装置およびインクジェット記録方法
JP2006187827A (ja) 2005-01-05 2006-07-20 Toyo Tire & Rubber Co Ltd 研磨パッド
JP2006293619A (ja) 2005-04-08 2006-10-26 Toshiba Tec Corp コンピュータ装置及びログ出力プログラム
JP4271227B2 (ja) 2006-10-30 2009-06-03 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
JP4271214B2 (ja) 2006-07-07 2009-06-03 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
JP4933222B2 (ja) * 2006-11-15 2012-05-16 株式会社日立製作所 インデックス処理方法及び計算機システム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1270728A (zh) * 1997-09-15 2000-10-18 埃弗内特集团股份有限公司 快速路由查找的方法和系统
EP1107126A2 (en) * 1999-12-08 2001-06-13 Hewlett-Packard Company, A Delaware Corporation A fast, efficient, adaptive, hybrid tree

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JP特开2001-357070A 2001.12.26

Also Published As

Publication number Publication date
EP2098965A1 (en) 2009-09-09
EP2098965A4 (en) 2010-04-14
WO2008065735A1 (fr) 2008-06-05
JP2008159025A (ja) 2008-07-10
TW200834356A (en) 2008-08-16
US8224861B2 (en) 2012-07-17
JP4379894B2 (ja) 2009-12-09
CN101542485A (zh) 2009-09-23
US20090234802A1 (en) 2009-09-17

Similar Documents

Publication Publication Date Title
CN101542485B (zh) 配对节点树的分割/结合方法和程序
CN101484895B (zh) 比特序列检索装置以及检索方法
CN101689204B (zh) 比特序列检索方法以及程序
CN101535993B (zh) 比特序列检索装置及检索方法
CN101657818B (zh) 配对节点树保存/复原方法、最长一致/最短一致检索方法、比特序列检索方法以及存储介质
JP4402120B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4502223B2 (ja) ビット列のマージソート装置、方法及びプログラム
WO2009084145A1 (ja) データベースのインデックスキー更新方法及びプログラム
JP5165662B2 (ja) ビット列キー分類・分配装置、分類・分配方法及びプログラム
JP2008269503A (ja) ビット列検索方法及び検索プログラム
CN101802822B (zh) 比特序列检索装置、检索方法以及程序
JP4417431B2 (ja) カップルドノードツリーの分割/結合方法及びプログラム
EP2149845A1 (en) Coupled node tree save/restore method, longest consistence/shortest consistence retrieval method, bit retrieval method and memory medium
WO2009090697A1 (ja) ビット列検索装置、検索方法及びプログラム
JP4813575B2 (ja) ビット列検索装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
ASS Succession or assignment of patent right

Owner name: KOUSOKUYA INC.

Free format text: FORMER OWNER: GRANTS CO. LTD S.

Effective date: 20121031

C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20121031

Address after: Kanagawa

Patentee after: Kousokuya Inc.

Address before: Chiba County, Japan

Patentee before: Grants Co. Ltd S.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110727

Termination date: 20141019

EXPY Termination of patent right or utility model