CN101535993A - 比特序列检索方法和程序 - Google Patents
比特序列检索方法和程序 Download PDFInfo
- Publication number
- CN101535993A CN101535993A CNA2007800407904A CN200780040790A CN101535993A CN 101535993 A CN101535993 A CN 101535993A CN A2007800407904 A CNA2007800407904 A CN A2007800407904A CN 200780040790 A CN200780040790 A CN 200780040790A CN 101535993 A CN101535993 A CN 101535993A
- Authority
- CN
- China
- Prior art keywords
- node
- tree
- retrieval
- array
- index key
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
- G06F16/316—Indexing structures
- G06F16/322—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Communication Control (AREA)
Abstract
为了提供使用配对节点树根据检索对象比特序列的集合来进行各种应用检索的方法这样的简便、高速的方法,而具有如下的配对节点树,该配对节点树由根节点与配置在相邻的存储区域中的分支节点和叶节点、或分支节点之间、或叶节点之间的节点对构成,分支节点包含表示检索关键字的鉴别比特位置和链接目的地节点对中的一个节点的位置的信息,叶节点包含由检索对象比特序列构成的索引关键字,配对节点树存储在数组中,位置信息是存储有与位置信息对应的节点的数组元素的数组编号,将配对节点树的任意节点作为检索开始节点,仅链接节点对中的数组编号小的一方而到达叶节点,由此求出以检索开始节点为根节点的任意部分树的索引关键字的最小值。
Description
技术领域
本发明涉及从比特序列的集合中检索期望的比特序列的检索装置,尤其涉及对存储比特序列的数据结构进行研究以实现检索速度等的提高的技术领域。
背景技术
近年来,社会信息化不断发展,大规模的数据库在各处加以利用。为了从这种大规模的数据库中检索记录,通常将与存储有各记录的地址相对应的记录内的项目作为索引关键字(index key)进行检索,以找出期望的记录。并且,全文检索中的字符串也能够视为文件的索引关键字。
而且,由于利用比特序列来表现这些索引关键字,所以数据库的检索可以归结于比特序列的检索。
为了高速进行上述比特序列的检索,一直以来对存储比特序列的数据结构进行了各种研究。作为这种研究之一,公知有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所示的Patricia树的最下级部分即左指针1740c、右指针1741h等部分分配与节点相同容量的存储区域等,从而存储容量的削减效果不太好。并且,也没有改善由于反向链接导致的检索处理的延迟问题和追加删除等的处理困难的问题。
作为解决上述现有检索方法中的问题点的方案,本申请人在日本申请2006-187827中提出了使用配对节点树的比特序列检索,该配对节点树是由根节点、和配置在相邻的存储区域中的分支节点和叶节点、或分支节点之间、或叶节点之间的节点对组成的比特序列检索用的树,根节点是表示树的起点的节点,在该树的节点为一个时,根节点为叶节点,在树的节点为两个以上时,根节点为所述分支节点,所述分支节点包含表示进行比特序列检索的检索关键字的鉴别比特位置和链接目的地节点对中的一个节点的位置的位置信息,所述叶节点包含由检索对象的比特序列构成的索引关键字。
在上述申请中,示出了根据给定的索引关键字的集合来生成配对节点树的方法、以及根据配对节点树来检索单个索引关键字的方法等使用配对节点树的基本检索方法。
但是,在比特序列的检索中,存在求出最小值、最大值或求出某个范围的值等各种检索要求。
专利文献1:日本特开2001—357070号公报
发明内容
因此,本发明的目的在于提供一种简便、高速的方法,该方法是使用作为能够减小必要存储容量、提高检索速度且使数据维护变得容易的数据结构的配对节点树,从检索对象比特序列的集合求出最小值、最大值或求出某个范围的值等的应用检索方法。
首先,作为本发明的基础方式,提供如下的比特序列检索方法:通过指定检索开始节点,将在上述申请中提出的比特序列检索扩展为配对节点树的任意部分树中的检索。
根据本发明的一个方式,将配对节点树的任意节点作为检索开始节点,仅链接所述节点对中构成该节点对的2个节点之中的代表节点、或配置在与代表节点相邻的存储区域中的节点,而到达叶节点,由此来求出以检索开始节点为根节点的任意部分树的索引关键字的最小值或最大值。
并且,根据本发明的另一方式,所述配对节点树存储在数组中,所述位置信息是存储与该位置信息对应的节点的所述数组的数组元素的数组编号,存储所述检索开始节点的数组元素的数组编号、和存储从所述检索开始节点到所述叶节点的链接目的地的节点的数组元素的数组编号依次保持在堆栈中。而且,求出配对节点树的索引关键字的最小值或最大值后,执行堆栈的出栈(pop)动作,依次求出取与所述索引关键字的最小值或最大值相比第二小的值或第二大的值的索引关键字,由此以升序或降序的方式输出所述配对节点树中包含的索引关键字。
并且,根据本发明的另一方式,对为了指定检索范围的下限而输入的下限关键字与所述索引关键字的最小值进行比较,在所述下限关键字大于所述索引关键字的最小值的情况下,通过依次以所述升序来取出索引关键字并与该下限关键字进行比较的处理,求出成为该下限关键字以上的值的索引关键字,将成为该下限关键字以上的值的索引关键字中最小的索引关键字设定为所述检索范围的下限值。或者,对为了指定检索范围的上限而输入的上限关键字与所述索引关键字的最大值进行比较,在所述上限关键字与所述索引关键字的最大值相等的情况下,将该索引关键字的最大值设定为所述检索范围的上限值,在所述上限关键字小于所述索引关键字的最大值的情况下,通过依次以所述降序来取出索引关键字并与该上限关键字进行比较的处理,求出成为该上限关键字以下的值的索引关键字,将成为该上限关键字以下的值的索引关键字中最大的索引关键字设定为所述检索范围的上限值。
并且,根据本发明的另一方式,执行以上述升序或降序的方式取出从所述上限值到下限值的检索范围内的索引关键字的处理。
并且,根据本发明的另一方式,提供如下的前方一致检索:将对于从前面开始指定的数量的比特以后设定为0的比特序列作为为了设定所述下限值而输入的下限关键字,将对于从前面开始指定的数量的比特以后设定为1的比特序列作为为了设定所述上限值而输入的上限关键字,来确定检索范围,针对该检索范围以升序或降序的方式取出索引关键字,从而输出由从前面开始指定的数量的比特一致的比特序列构成的索引关键字。
在本发明中,可通过使用配对节点树,根据任意比特序列的集合,以简便且高速的方法来求最大值/最小值、升序/降序的索引关键字的取出和检索范围的下限值/上限值的设定,进而,在组合这些方法设定检索范围后,可以高速地执行升序/降序的索引关键字的取出处理和与检索关键字部分一致的索引关键字的取出处理。
附图说明
图1是示出以往检索中使用的Patricia树的一例的图。
图2是说明存储在数组中的配对节点树的结构例的图。
图3是概念性地示出配对节点树的树结构的图。
图4是说明用于实施本发明的硬件结构例的图。
图5是示出本实施方式的比特序列检索的基本动作的流程图。
图6是通过配对节点树来说明本实施方式的比特序列检索的基本动作的图。
图7是示出求得存储在配对节点树中的索引关键字的最小值的处理的流程图。
图8是通过配对节点树来说明求出索引关键字的最小值的处理的图。
图9是示出求得存储在配对节点树中的索引关键字的最大值的处理的流程图。
图10是通过配对节点树来说明求出索引关键字的最小值的处理的图。
图11是示出以升序的方式取出存储在配对节点树中的索引关键字的处理的流程图。
图12是说明以升序的方式取出索引关键字的处理的图。
图13是示出以降序的方式取出存储在配对节点树中的索引关键字的处理的流程图。
图14是说明以降序的方式取出索引关键字的处理的图。
图15A是示出求得索引关键字的下限值的处理的前级的流程图。
图15B是示出求得索引关键字的下限值的处理的后级的流程图。
图16是说明求出索引关键字的下限值的处理的图。
图17A是示出求得索引关键字的上限值的处理的前级的流程图。
图17B是示出求得索引关键字的上限值的处理的后级的流程图。
图18是说明求出索引关键字的上限值的处理的图。
图19A是示出指定检索范围并以升序的方式检索索引关键字的处理的前级的流程图。
图19B是示出指定检索范围并以升序的方式检索索引关键字的处理的后级的流程图。
图20是用于说明指定检索范围并以升序的方式检索索引关键字的处理的图。
图21A是示出指定检索范围并以降序的方式检索索引关键字的处理的前级的流程图。
图21B是示出指定检索范围并以降序的方式检索索引关键字的处理的后级的流程图。
图22是用于说明指定检索范围并以降序的方式检索索引关键字的处理的图。
图23是示出针对存储在配对节点树中的索引关键字的前方一致检索处理的流程图。
图24是说明索引关键字的前方一致检索处理的图。
具体实施方式
首先,关于本申请人在之前的上述申请中提出的作为本发明前提的配对节点树,说明将配对节点树存储在数组中的例子。分支节点保持的表示链接目的地位置的数据也可以作为存储装置的地址信息,不过通过使用由可存储分支节点或叶节点之中所占有区域的存储容量大的一方的数组元素构成的数组,可以用数组编号来表示节点位置,这样可以削减位置信息的信息量。
图2是说明存储在数组中的配对节点树的结构例的图。
参照图2,节点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而得出的。
因此,通过在前级的分支节点的代表节点编号中加上检索关键字的鉴别比特位置的比特值,可以求出存储链接目的地节点的数组元素的数组编号。
另外,在上述例子中,代表节点编号采用配置有节点对的数组编号中的小的一方,但是,显然也可以采用大的一方。
图3是概念性地示出配对节点树的树结构的图。图示的6比特的索引关键字与图1所例示的Patricia树的索引关键字相同。
由符号210a表示的节点是根节点。在图示的例子中,根节点210a为配置在数组编号220中的节点对201a的代表节点。
作为树结构,在根节点210a之下配置有节点对201b,在节点对201b的下层配置有节点对201c和节点对201f,在节点对201f的下层配置有节点对201h和节点对201g。在节点对201c之下配置有节点对201d,此外,在节点对201d之下还配置有节点对201e。
加在各节点之前的0或1的符号与在图2中所说明的加在数组元素之前的符号相同。根据检索关键字的鉴别比特位置的比特值来搜索树,以找到检索对象的叶节点。
在图示的例子中,根节点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”、是一致的。这样进行了使用配对节点树的检索。
接着,参照图3来说明配对节点树的结构的含义。
通过索引关键字的集合来规定配对节点树的结构。在图3的例子中,根节点210a的鉴别比特位置是0,这是因为在图3所例示的索引关键字中有第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”。
假设在索引关键字的集合中取代“101100”而包含“101101”或“101110”,到第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。这样,使用与存储在配对节点树中的索引关键字的比特结构对应的鉴别比特位置来进行分支。
图4是说明用于实施本发明的硬件结构例的图。
通过至少具有中央处理装置302和高速缓冲存储器303的数据处理装置301,使用数据存储装置308来实施基于本发明检索装置的检索处理和数据维护。数据存储装置308可通过主存储装置305或外部存储装置306来实现,或者可使用经由通信装置307连接的配置在远方的装置,该数据存储装置308具有配置了配对节点树的数组309、以及对存储有在检索中搜索的节点的数组元素的数组编号进行存储的搜索路径堆栈310。
在图4的例示中,主存储装置305、外部存储装置306以及通信装置307通过一根总线304与数据处理装置301连接,不过连接方法不限于此。另外,可以使主存储装置305为数据处理装置301内的装置,也可以将搜索路径堆栈310实现为中央处理装置302内的硬件。或者,显然可以根据可使用的硬件环境(如数组309设置在外部存储装置306中、搜索路径堆栈310设置在主存储装置305中等)、索引关键字集合的大小等来适当选择硬件结构。
并且,虽然未特别图示,但是,为了在之后的处理中使用在处理过程中所获得的各种值而使用与各个处理对应的临时存储装置是显而易见的。
图5是示出本实施方式的比特序列检索的基本动作的流程图。
首先,在步骤S401中,取得检索开始节点的数组编号。与所取得的数组编号对应的数组存储了构成配对节点树的任意节点。在后面说明的各种应用检索中进行检索开始节点的指定。
接着,在步骤S402中,在搜索路径堆栈310中存储所取得的数组编号,在步骤S403中,读出与该数组编号对应的数组元素来作为要参照的节点。然后,在步骤S404中,从所读出的节点中取出节点类别,在步骤S405中,判定节点类别是否是分支节点。
在步骤S405的判定中,在所读出的节点是分支节点的情况下,进入步骤S406,从节点中取出与鉴别比特位置有关的信息,进而,在步骤S407中,从检索关键字中取出与所取出的鉴别比特位置对应的比特值。然后,在步骤S408中,从节点中取出代表节点编号,在步骤S409中,将从检索关键字中取出的比特值与代表节点编号相加,作为新的数组编号,返回步骤S402。
然后,反复进行步骤S402~步骤S409的处理,直到在步骤S405的判定中判定为叶节点而进入步骤S410。在步骤S410中,从叶节点中取出索引关键字,结束处理。
另外,图5所示的处理与本申请人在上述先前申请中所提出的基于配对节点树的检索处理的不同点在于,检索开始节点不限于根节点而是配对节点树上的任意节点;以及不用经过对存储在检索结果节点中的索引关键字和检索关键字进行比较来判定检索的成功失败,就从检索结果节点中取出索引关键字。
上述第1不同点的理由是,在本发明提供的应用检索中如后所述存在检索配对节点树的部分树的情况,第2不同点的理由是,同样作为本发明提供的应用检索例的最小值检索和范围检索等不同于从树中检索单一的检索关键字的检索。
图6是通过图3所例示的配对节点树来说明由图5的流程图所示的本实施方式的比特序列检索的基本动作的图。在图6中示出配对节点树、检索关键字设定区域270以及搜索路径堆栈310。下面,使用图6来说明在配对节点树上参照的节点和搜索路径堆栈的状态。
另外,在图6内仅示出图3所示的配对节点树中用于说明图5的处理所需的一部分,省略了其余的节点(代表节点编号221b以下的节点)。在以后的说明中,用于说明在配对节点树上参照的节点的附图也是同样的。
首先,作为开始检索的节点的数组编号,设定了数组编号220。此时,将对应的数组编号220压入(push)搜索路径堆栈310,并且,参照数组元素的各种信息。
当根据存储在数组中的信息,识别为数组编号220的节点是分支节点、且没有存储索引关键字时,进一步参照存储在该数组编号220的数组中的信息(代表节点编号和鉴别比特位置)等,来接着计算要参照的数组编号。这里,首先将数组编号220存储在搜索路径堆栈310中,并且从数组编号220的节点210a中取出节点类别。所取出的节点类别是分支节点,所以从节点210a中取出鉴别比特位置“0”,并进一步取出检索关键字设定区域270的检索关键字“011010”中的鉴别比特位置的比特值“0”。然后,取出存储在节点210a中的代表节点编号“220a”,将与之前从检索关键字的鉴别比特位置中取出的比特值相加而得到的值“220a”存储到搜索路径堆栈310内。
接着,当从数组编号220a的节点中读出节点类别时,数组编号220a的节点210b是分支节点,所以当从检索关键字“011010”中取出与节点鉴别比特位置“1”对应的比特值时,值是“1”。因此,在节点210b的代表节点编号“220b”中加上所得到的比特值“1”,在搜索路径堆栈310中存储“220b+1”。
从数组编号(220b+1)的节点211c中读出的节点类别是分支节点,所以,当从检索关键字“011010”中进一步取出与节点鉴别比特位置“2”对应的比特值时,值是“1”。将在节点211c的代表节点编号“221c”中加上已取到的比特值“1”而得出的值“221c+1”存储在搜索路径堆栈310中。
当从数组编号(221c+1)的节点211d中取出节点类别时,节点211d是叶节点。因此,从节点211d取出索引关键字“011010”,结束处理。
这样,通过执行依次参照各节点信息的链接处理,在搜索路径堆栈310中,以链接顺序压入检索开始节点即节点210a的数组编号220~叶节点211d的数组编号(221c+1)。
以上,详细说明了基于本发明的作为应用检索的基础的配对节点树和比特序列检索的基本动作。关于配对节点树的生成处理,虽没有特别图示,但如本申请人在上述先前申请中所说明的那样,在具有比特序列的集合时,可通过反复进行从该集合中依次取出任意比特序列并将其作为索引关键字插入的处理来实现该配对节点树的生成处理。
如上所述,对于存储在配对节点树中的索引关键字的值,通过搜索节点[1]侧和树的深度方向,来按降序排序而配置在树上,所以,可以通过下述步骤来实施索引关键字的插入处理:将待插入的索引关键字作为检索关键字,从配对节点树中检索对应的叶节点,并且在堆栈中依次存储到该叶节点为止所搜索到的链接路径的分支节点和存储该叶节点的数组元素的数组编号,在检索关键字和相应的叶节点中包含的索引关键字之间进行大小比较和比特序列比较,根据作为在比特序列比较中不同的比特值的开头比特位置和存储在上述堆栈中的分支节点的鉴别比特位置之间的相对位置关系,来决定由包含所插入的索引关键字的叶节点和另一个节点构成的节点对的插入位置,并根据上述大小关系,来确定包含待插入的索引关键字的叶节点为上述插入的节点对的哪个节点。
接着,对本发明的各种应用检索处理进行说明。
图7是示出求得存储在配对节点树(包含部分树)中的索引关键字的最小值的处理的流程图。根据如上所述的索引关键字在树上的配置来求出索引关键字的最小值的处理,相当于在树上从检索开始节点到叶节点搜索节点[0]。
首先,从步骤S501中的取得检索开始节点的数组编号、到步骤S505中的判定节点类别的处理,分别与上述图5的步骤S401~步骤S405的处理相同。
在步骤S505的节点类别的判定中判定为节点类别是分支节点时,进入步骤S506,从节点中取出数组的代表节点编号,在步骤S507中,对取出的代表节点编号加上值“0”,并将其结果作为新的数组编号,返回步骤S502。然后,反复进行步骤S502~步骤S507的处理,直到在步骤S505中判定为该节点是叶节点为止,在步骤S508中,从叶节点中取出索引关键字,结束处理。
在上述图7所示的处理中,搜索节点[0],所以在代表节点编号中都加上“0”。即,根据图7的处理,链接目的地的节点一定为节点对中的节点[0],并分支到存储有更小值的索引关键字的节点一方。由此,可以取出树结构为如上所述排列结构的配对节点树的最小索引关键字。
图8是通过图3所例示的配对节点树来说明由图7的流程图所示的求出索引关键字最小值的处理的图。图8示出将数组编号220的节点210a作为检索开始节点时所读出的数组编号和搜索路径堆栈310的状态。
从检索开始节点即节点210a起,依次链接到利用代表节点编号来表示的节点对中作为节点类别102而设定了“0”的节点(节点[0])。当将链接目的地的数组编号220、220a和220b压入搜索路径堆栈310中、并取出数组编号220b的叶节点的索引关键字“000111”时,结束处理。
在搜索路径堆栈310内依次压入节点对中节点[0]的数组编号。此时,仅参照数组的数组元素(节点类别),来进行链接处理和向搜索路径堆栈310压入的动作。
图9是示出求得存储在配对节点树(包含部分树)中的索引关键字最大值的处理的流程图。图10是使用了图3所例示的配对节点树的该处理的说明图。求出索引关键字最大值的处理相当于针对树上节点中的节点[1]依次进行搜索直至叶节点为止。下面,关于求出最大索引关键字的处理,一边与上述求出最小索引关键字的处理进行比较,一边以不同点为中心进行说明。
图9所示的一连串处理中的步骤S601~步骤S606和步骤S608分别对应于图7的步骤S501~步骤S506和步骤S508,并执行同样的处理。与图7中求出最小值的处理的不同点是,在步骤S607中,对代表节点编号加上值“1”。由此,始终与代表节点编号所表示的节点对中的节点[1]链接,并依次反复进行步骤S602~步骤S607的处理,直至到达叶节点为止,由此可以取得索引关键字的最大值。
图10是通过图3所例示的配对节点树来说明图9的流程图所示的求出索引关键字最大值的处理的图。如图10所示,在配对节点树的链接处理中,当与图8的例子同样使检索开始节点为数组编号220的节点210a时,始终链接到节点对中的节点[1],并在搜索路径堆栈310中压入链接目的地的数组编号220、(220a+1)、(221b+1)以及(221f+1)。
如图5~图10所示,当执行对与检索关键字一致的索引关键字进行检索的基本动作和索引关键字的最小值/最大值的检索处理时,依次在搜索路径堆栈310中存储所参照的数组的数组编号。
另外,在参照上述图7~图10的索引关键字的最小值/最大值的检索处理中,说明了将配对节点树存储在数组中的情况,但显而易见,不是必须将配对节点树存储在数组中,通过仅链接构成节点对的2个节点中的代表节点、或者配置在与代表节点相邻的存储区域中的节点而到达叶节点,也可以进行索引关键字的最小值/最大值的检索。
接着,说明上述求出索引关键字的最小值/最大值的检索处理和使用搜索路径堆栈310的信息的应用检索。
图11是示出以升序的方式取出存储在配对节点树中的索引关键字的处理的流程图。以升序的方式取出索引关键字的处理相当于,使构成节点对的节点中的节点[0]侧和树的深度优先,从节点开始依次搜索叶节点,并从各叶节点中取出索引关键字。
首先,在步骤S701中,在检索开始节点的数组编号中设定根节点的数组编号,在步骤S702中,执行参照上述图7和图8说明的求出最小索引关键字的处理,在配对节点树所包含的索引关键字中取得最小索引关键字。然后,在步骤S703中,取出所取得的索引关键字,进入步骤S704。
在步骤S704中,参照搜索路径堆栈310,判定堆栈指针是否指向根节点的数组编号。在堆栈指针所指的数组编号是根节点以外的情况下,进入步骤S705。然后,在步骤S705中,从搜索路径堆栈310取出堆栈指针所指的数组编号后,将堆栈指针减1。通过堆栈的出栈(pop)动作来执行在上述步骤S704中参照搜索路径堆栈310的动作、以及在步骤S705中从搜索路径堆栈310取出堆栈指针所指的数组编号后将堆栈指针减1的动作。以下各实施方式的从堆栈读出数组编号的动作也同样。
在步骤S706中,根据通过步骤S705取出的数组编号来得到表示该数组编号的节点存储在节点对的哪个数组元素中的节点位置。例如,针对节点[0],可通过存储在偶数编号的数组的数组元素中等,来根据数组编号求出节点位置。然后,在步骤S707中判定在步骤S706中得到的节点位置是否是节点[1]侧。在步骤S707中判定为节点[1]侧的情况下,返回步骤S704,并反复进行步骤S704~步骤S707的处理,直到堆栈指针所指的数组编号的节点是节点[0]或根节点为止。
在步骤S707中判定为节点[0]侧时,进入步骤S708,在数组编号中加上1,得到与该节点成对的节点[1]的数组编号。然后,在步骤S709中,对检索开始节点设定在步骤S708中得到的节点[1]的数组编号,在步骤S710中,执行求出以检索开始节点作为根节点的部分树的最小索引关键字的处理。步骤S710的处理与步骤S702同样,使用图7所示的最小值检索处理。
当在步骤S710中求出最小索引关键字时,返回步骤S703,取出所求出的索引关键字,并反复进行同样的处理,直到在以后的步骤S704中判定为堆栈指针指向根节点的数组编号为止。
这样,参照搜索路径堆栈310的堆栈指针所指的数组编号,针对与存储在搜索路径堆栈310中的数组编号的节点[0]成对的节点[1],将该节点作为检索开始节点,求出该节点属下的最小索引关键字。在步骤S702内求出最小值的阶段中,搜索路径堆栈310的堆栈指针指向配对节点树的包含最小索引关键字的节点的数组编号。接着,进行搜索路径堆栈310的出栈动作,进行以所取出的数组编号节点中的节点[1]为检索开始节点而求出以该检索开始节点作为根节点的部分树的索引关键字最小值的处理,并反复进行出栈动作和最小值检索处理,直到搜索路径堆栈310的出栈动作结果为取出配对节点树的根节点的数组编号为止。
在搜索路径堆栈310中,首先在步骤S702内进行针对根节点属下的节点求出最小值的处理,由此,依次存储与链接路径有关的数组编号。因此,将搜索路径堆栈310的堆栈指针减去1,针对堆栈指针重新指向的数组编号的节点中的节点[0],求出与该节点成对的节点[1],当针对节点[1]的属下节点依次进行最小值检索的处理时,以升序的方式取出索引关键字。
图12是说明以升序的方式取出图11的流程图所示的索引关键字的处理的图。在图12中示出执行以升序的方式取出索引关键字的处理的各阶段中搜索路径堆栈310的状态和所取出的索引关键字,图中存储在搜索路径堆栈310内的数组编号与图3所示的配对节点树相对应。参照图12,说明针对图3所示的配对节点树以升序的方式取出索引关键字时的存储在搜索路径堆栈310中的数组编号。
首先,从根节点开始检索,进行最小值检索,当搜索配对节点树中节点对的节点[0]时,搜索到数组编号220b。此时,在搜索路径堆栈310中,从根节点210a的数组编号220起依次存储220a、220b。
图12(a)示出将数组编号220作为检索开始节点执行到最小值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号220b所指的节点是叶节点,所以取出该节点的索引关键字“000111”。然后,数组编号220b指向节点[0],所以将与该节点[0]成对的节点[1]的数组编号(220b+1)作为下一检索开始节点的数组编号。
图12(b)示出将数组编号(220b+1)作为检索开始节点的数组编号来执行最小值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号220d所指的节点是叶节点,所以取出其索引关键字“010010”。然后,数组编号220d指向节点[0],所以将与该节点[0]成对的节点的数组编号(220d+1)作为下一检索开始节点的数组编号。
图12(c)示出将数组编号(220d+1)作为检索开始节点的数组编号来执行最小值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号(220d+1)所指的节点是叶节点,所以取出该节点的索引关键字“010011”。接着,数组编号(220d+1)指向节点[1],所以反复进行出栈动作和数组编号的取出,直到求出节点[0]的数组编号为止。然后,当求出指向节点[0]的数组编号221c时,将与该节点[0]成对的节点[1]的数组编号(221c+1)作为下一检索开始节点的数组编号。
图12(d)示出将数组编号(221c+1)作为检索开始节点的数组编号来执行最小值检索处理的阶段中的搜索路径堆栈310的状态和所取出的索引关键字。这里,数组编号(221c+1)的节点是叶节点,所以取出该节点的索引关键字“011010”。接着,数组编号(221c+1)指向节点[1],所以反复进行搜索路径堆栈310的出栈动作和数组编号的取出,直到求出节点[0]的数组编号为止。然后,当求出指向节点[0]的数组编号221a时,将与该节点[0]成对的节点[1]的数组编号(221a+1)作为下一检索开始节点的数组编号。
图12(e)示出将数组编号(220a+1)作为检索开始节点的数组编号来执行最小值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号221f所指的节点是叶节点,所以取出该节点的索引关键字“100010”。然后,数组编号220f指向节点[0],所以将与该节点[0]成对的节点[1]的数组编号(220f+1)作为下一检索开始节点的数组编号。
图12(f)示出将数组编号(220f+1)作为检索开始节点的数组编号来执行最小值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号(220f+1)所指的节点是叶节点,所以取出该节点的索引关键字“100011”。接着,数组编号(220f+1)指向节点[1],所以反复进行搜索路径堆栈310的出栈动作和数组编号的取出,直到求出节点[0]的数组编号为止。然后,当求出指向节点[0]的数组编号221b时,将与该节点[0]成对的节点[1]的数组编号(221b+1)作为下一检索开始节点的数组编号。
图12(g)示出将数组编号(221b+1)作为检索开始节点的数组编号来执行最小值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号221f所指的节点是叶节点,所以取出该节点的索引关键字“101011”。然后,数组编号221f指向节点[0],所以将与该节点[0]成对的节点[1]的数组编号(221f+1)作为下一检索开始节点的数组编号。
图12(h)示出将数组编号(221f+1)作为检索开始节点的数组编号来执行最小值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号(221f+1)所指的节点是叶节点,所以取出该节点的索引关键字“101100”。之后,依次反复进行搜索路径堆栈310的出栈动作和数组编号的取出,当判断为数组编号指向根节点时,结束处理。图13是示出以降序的方式取出存储在配对节点树中的索引关键字的处理的流程图。以降序的方式取出索引关键字的处理相当于,使构成节点对的节点中的节点[1]和树的深度优先,从根节点开始依次搜索叶节点。这里,与图11的以升序的方式取出索引关键字的处理进行比较,以不同点为中心进行说明。
在上述以升序的方式取出索引关键字的处理中,在图11的步骤S702和步骤S710中求出堆栈指针所指的数组编号的节点属下的取最小值的索引关键字,与此相对,在图13的步骤S802和步骤S810中求出的是堆栈指针所指的数组编号的节点属下的取最大值的索引关键字。
并且,在图11中,在步骤S703中取出期望的索引关键字后,求出存储在搜索路径堆栈310中的数组编号中节点[0]的数组编号,并将与该节点成对的节点[1]设定为检索开始节点,进行最小值检索处理。与此相对,在图13的降序取出处理中,在步骤S803中取出期望的索引关键字后,求出存储在搜索路径堆栈310中的数组编号中节点[1]的数组编号,并将与该节点成对的节点[0]设定为检索开始节点,进行最大值检索处理。
图14是说明图13的流程图所示的以降序的方式取出索引关键字的处理的图。图14示出在执行以降序的方式取出索引关键字的处理的各阶段中搜索路径堆栈310的状态和所取出的索引关键字,图中存储在搜索路径堆栈310内的数组编号与图3所示的配对节点树相对应。参照图14,说明针对图3所示的配对节点树以降序的方式取出索引关键字时的存储在搜索路径堆栈310内的数组编号。
首先,从根节点开始检索,进行最大值检索,当搜索配对节点树的节点对的节点[1]时,搜索到数组编号(221f+1)。此时,在搜索路径堆栈310中,从根节点210a的数组编号220起依次存储(220a+1)、(221b+1)、(221f+1)。
图14(a)示出在将数组编号(221f+1)作为检索开始节点的数组编号来执行最大值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号(221f+1)所指的节点是叶节点,所以取出该节点的索引关键字“101100”。然后,数组编号(221f+1)指向节点[1],因此将与该节点[1]成对的节点[0]的数组编号221f作为下一检索开始节点的数组编号。
图14(b)示出在将数组编号221f作为检索开始节点的数组编号来执行最大值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号221f所指的节点是叶节点,所以取出其索引关键字“101011”。接着,数组编号221f指向节点[0],所以反复进行搜索路径堆栈310的出栈动作和数组编号的取出,直到求出节点[1]的数组编号为止。然后,在求出指向节点[1]的数组编号(221b+1)时,将与该节点[1]成对的节点[0]的数组编号221b作为下一检索开始节点的数组编号。
图14(c)示出在将数组编号221b作为检索开始节点的数组编号来执行最大值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号(220f+1)所指的节点是叶节点,所以取出该节点的索引关键字“100011”。然后,数组编号(220f+1)指向节点[1],因此将与该节点[1]成对的节点[0]的数组编号220f作为下一检索开始节点的数组编号。
图14(d)示出在将数组编号220f作为检索开始节点的数组编号来执行最大值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号220f所指的节点是叶节点,所以取出该节点的索引关键字“100010”。接着,数组编号220f指向节点[0],所以反复进行搜索路径堆栈310的出栈动作和数组编号的取出,直到求出节点[1]的数组编号为止。然后,当求出指向节点[1]的数组编号(220a+1)时,将与该节点[1]成对的节点[0]的数组编号220a作为下一检索开始节点的数组编号。
图14(e)示出在将数组编号220a作为检索开始节点的数组编号来执行最大值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号(221c+1)是叶节点,所以取出该节点的索引关键字“011010”。然后,数组编号(221c+1)指向节点[1],因此将与该节点[1]成对的节点[0]的数组编号221c设定为下一检索开始节点的数组编号。
图14(f)示出在将数组编号221c作为检索开始节点的数组编号来执行最大值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号(220d+1)所指的节点是叶节点,所以取出该节点的索引关键字“010011”。然后,数组编号(220d+1)指向节点[1],因此将与该节点[1]成对的节点[0]的数组编号220d作为下一检索开始节点的数组编号。
图14(g)示出在将数组编号220d作为检索开始节点的数组编号来执行最大值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号220d所指的节点是叶节点,所以取出该节点的索引关键字“010010”。接着,数组编号220d指向节点[0],所以反复进行搜索路径堆栈310的出栈动作和数组编号的取出,直到求出节点[1]的数组编号为止。然后,当求出指向节点[1]的数组编号(220b+1)时,将与该节点[1]成对的节点[0]的数组编号220b作为下一检索开始节点的数组编号。
图14(h)示出在将数组编号220b作为检索开始节点的数组编号来执行最大值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。这里,数组编号220b所指的节点是叶节点,所以取出该节点的索引关键字“000111”。之后,依次反复进行搜索路径堆栈310的出栈动作和数组编号的取出,当判断为数组编号指向根节点时,结束处理。
图15A和图15B是示出求得存储在配对节点树中的索引关键字的下限值的处理的流程图。这里,所谓下限值是所指定的下限关键字以上的索引关键字的最小值。图15A和图15B所示的求出下限值的处理被应用于如下的处理:即,在对用户等所指定的检索范围进行检索时,将实际不能取得索引关键字的范围排除在外,对实际包含有索引关键字的范围进行检索。另外,在图15A和图15B中,省略了所指定的下限关键字和上限关键字的取得处理。在以后的各种应用检索中也同样。
首先,在步骤S901中,对于检索开始节点的数组编号设定根节点的数组编号,在步骤S902中,进行最小值检索处理并求出索引关键字的最小值。然后,在步骤S903中,对下限关键字和在步骤S902中求出的最小值进行比较,判定下限关键字是否大于最小值。在下限关键字为最小值以下的值时,进入步骤S904,将在步骤S902中求出的最小值设定为下限值,并结束处理。
在步骤S903中判定为下限关键字大于在步骤S902中求出的最小值时,进入步骤S905,将下限关键字设定为检索关键字。然后,在步骤S906中,对于检索开始节点的数组编号设定根节点的数组编号,在步骤S907中,根据利用图5和图6说明的比特序列检索方法来检索索引关键字。然后,在步骤S908中,对检索关键字和由步骤S907的检索结果所得到的索引关键字进行比较,判定值是否一致。在判定为检索关键字和索引关键字相同的情况下,进入步骤S909,将通过检索得到的索引关键字设定为上述下限值,并结束处理。在判定为检索关键字和索引关键字不同的情况下,进入图15B的步骤S910。
在步骤S910中判定检索关键字和索引关键字的大小关系。这里,在检索关键字大于索引关键字的情况下,意味着该索引关键字小于检索关键字即下限关键字而没有包含在由用户等指定的检索范围中。另一方面,在检索关键字小于索引关键字的情况下,意味着该索引关键字包含在指定的检索范围中。因此,当判定为检索关键字小于索引关键字时,进入步骤S918,将该索引关键字设定为下限值,结束处理。
在步骤S910中判定为检索关键字大于索引关键字时,进入步骤S911。步骤S911~步骤S917的处理是以升序的方式取出索引关键字的处理,其分别对应于图11的步骤S704~步骤S710的处理。通过步骤S911~步骤S917的处理,依次取出存储在配对节点树中的索引关键字,并得到取大于检索关键字即下限关键字的值的索引关键字,此时将该索引关键字设定为下限值。
图16是说明图15A和图15B的流程图所示的求出索引关键字的下限值的处理的图,其中,图16(a)示出配对节点树和检索关键字设定区域270,图16(b)示出搜索路径堆栈310。如图16(a)所示,在检索关键字设定区域270中设定了“010110”作为下限关键字。另外,在图16(a)中提取图3所示的配对节点树中与下限值检索有关的部分进行记述。
如参照图15A和图15B所说明的那样,在求出索引关键字的下限值的处理中,首先,将根节点作为检索开始节点求出索引关键字的最小值。根据图16(a)所示的例子,求出数组编号220b的节点中包含的索引关键字“000111”来作为最小值。当对得到的最小值和下限关键字“010110”进行比较时,下限关键字较大,所以将下限关键字作为检索关键字来检索配对节点树的索引关键字,此时,得到的索引关键字是数组编号220d的节点中包含的索引关键字“010010”。图16(b)的(1)示出在得到数组编号220d的节点中包含的索引关键字的阶段、即执行到步骤S907为止的处理的阶段中的搜索路径堆栈310的状态。
数组编号220d的节点中包含的索引关键字“010010”小于下限关键字“010100”而没有包含在检索范围内,所以当检索取第二大的值的索引关键字时,得到数组编号(220d+1)的节点中包含的索引关键字“010011”。图16(b)的(2)示出在通过执行步骤S911~步骤S917的处理而得到数组编号(220d+1)的节点中包含的索引关键字“010011”的阶段中的搜索路径堆栈310的状态。
数组编号(220d+1)的节点中包含的索引关键字“010011”也依然小于下限关键字“010100”而没有被包含在检索范围中。因此,进一步进行以升序的方式取出索引关键字的处理,并进行对得到的索引关键字和下限关键字进行比较的处理。在图16(a)所示的配对节点树中,接着得到的索引关键字“011010”大于下限关键字“010100”,所以将该数组编号(221c+1)的节点中包含的索引关键字设定为下限值,并结束处理。图16(b)的(3)示出在得到数组编号(221c+1)的节点中包含的索引关键字“011010”的阶段中的搜索路径堆栈310的状态。
图17A和图17B是示出求得存储在配对节点树中的索引关键字的上限值的处理的流程图。这里,所谓上限值是所指定的上限关键字以下的索引关键字的最大值。图17A和图17B所示的求出上限值的处理与上述求出下限值的处理同样,被应用于如下处理:即,在对用户等所指定的检索范围进行检索时,将实际不能取得索引关键字的范围排除在外,对实际包含有索引关键字的范围进行检索。
首先,在步骤S1001中,将根节点作为检索开始节点进行检索的处理与求出索引关键字的下限值的处理同样,并且,步骤S1002以后的处理分别与上述步骤S902以后的处理对应。
即,在使用图15A和图15B说明的求出下限值的处理中,通过步骤S902以后的处理,对处于用户等所指定的下限关键字和配对节点树所包含的索引关键字中的下限关键字以上、且成为最接近下限关键字的值的索引关键字进行检索。与此相对,在图17A和图17B所示的求出上限值的处理中,通过步骤S1002以后的处理,作为检索范围的上限,来检索用户等所指定的上限关键字以下、且成为最接近上限关键字的值的索引关键字。
若与图15A和图15B所示的处理进行比较,则在对所指定的关键字(下限关键字/上限关键字)和索引关键字进行比较时的大小关系(步骤S903和步骤S910、以及步骤S1003和步骤S1010)、将所指定的关键字作为检索关键字来检索配对节点树时分别求出索引关键字的最小值/最大值(步骤S907和步骤S1007)、以及求出索引关键字的顺序分别是升序/降序(步骤S911和步骤S1011以后的处理)的方面是相反的,不过在求出下限值和上限值之前的步骤基本上与上述相同。
具体说明步骤S1002以后的处理。
在步骤S1002中求出配对节点树所包含的索引关键字的最大值时,在步骤S1003中,将步骤S1002中求出的最大值与上限关键字进行比较,并判定上限关键字是否大于最大值。当上限关键字在索引关键字的最大值以上时,进入步骤S1004,将在步骤S1002中求出的最大值设定为上限值,并结束处理。
当上限关键字小于最大值时,进入步骤S1005,将上限关键字设定为检索关键字。然后,在步骤S1006中,设定根节点的数组编号来作为检索开始节点的数组编号,在步骤S1007中,进行针对检索关键字的检索处理后,进入步骤S1008。
在步骤S1008中,判定检索关键字和在步骤S1007中取得的索引关键字是否相同。在步骤S1008中判定为这些值相同的情况下,进入步骤S1009,将在步骤S1007的处理中得到的索引关键字设定为上述上限值,并结束处理。在步骤S1008中判定为不同的情况下,进入图17B的步骤S1010。
在步骤S1010中判定检索关键字和索引关键字的大小关系。这里,在检索关键字小于索引关键字的情况下,意味着该索引关键字小于检索关键字即上限关键字而没有包含在由用户等指定的检索范围中。另一方面,在检索关键字大于索引关键字的情况下,意味着该索引关键字包含在指定的检索范围中。因此,当判定为检索关键字大于索引关键字时,进入步骤S1018,将该索引关键字设定为上限值,并结束处理。
在步骤S1010中判定为检索关键字小于索引关键字时,进入步骤S1011。步骤S1011以后的处理是以降序的方式取出索引关键字的处理,其反复进行步骤S1010~步骤S1017的处理,直到判定为检索关键字大于索引关键字为止。
图18是说明图17A和图17B的流程图所示的求出索引关键字的上限值的处理的图,其中,图18(a)示出配对节点树和检索关键字设定区域270,图18(b)示出搜索路径堆栈310。如图18(a)所示,在检索关键字设定区域270中设定了“101001”作为上限关键字。另外,在图18(a)中,提取图3所示的配对节点树中与上限值检索有关的部分进行记述。
如参照图17A和图17B所说明的那样,在求出索引关键字的上限值的处理中,首先,针对数组编号220的根节点求出最大值。根据图18(a)所示的例子,求出数组编号(221f+1)的节点中包含的索引关键字“101100”作为最大值。但是,当与上限关键字“101001”比较大小时,上限关键字较小,所以将上限关键字作为检索关键字进一步检索配对节点树。根据检索的结果可得到数组编号221f的节点中包含的索引关键字“101011”。图18(b)的(1)示出在利用步骤S1007的处理得到数组编号221f的节点中包含的索引关键字“101011”的阶段中的搜索路径堆栈310的状态。
数组编号221f的节点中包含的索引关键字“101011”大于上限关键字,所以检索第二大的索引关键字。作为检索的结果可得到数组编号(220f+1)的节点中包含的索引关键字“100011”。这里,检索数组编号(220f+1)的节点的处理相当于图17A和图17B所示的处理中的步骤S1011~步骤S1017的处理。图18(b)的(2)示出在执行到步骤S1017的处理的阶段中的搜索路径堆栈310的状态。数组编号(220f+1)的节点中包含的索引关键字“100011”小于上限关键字“101001”,所以从步骤S1010进入步骤S1018。由此,在图17(a)所示的配对节点树中,在将上限关键字设为“101001”来求出上限值的情况下,将数组编号(220f+1)的节点中包含的索引关键字“100011”设定为上限值。
另外,在上述上限值和下限值的检索处理中示出了包含上限关键字或下限关键字的检索例,但是,当然也可以进行不包含上限关键字或下限关键字的检索。
此外,还可以组合多个上述应用检索,来进行以下所示的检索处理。
图19A和图19B是示出指定检索范围并以升序的方式来检索存储在配对节点树中的索引关键字的处理的流程图。参照图19A和图19B,说明由用户等指定了检索范围的上限和下限时的升序的范围检索处理。
首先,在步骤S1101中,根据下限关键字来检索配对节点树,并得到索引关键字的下限值。步骤S1101的处理如参照图15A和图15B说明的那样。
接着,在步骤S1102中,根据上限关键字来检索配对节点树,并得到索引关键字的上限值。步骤S1102的处理如参照图17A和图17B说明的那样。
然后,在步骤S1103中,对检索开始节点的数组编号设定根节点的数组编号,在步骤S1104中,使用上述下限值来检索配对节点树,并得到索引关键字。配对节点树的检索处理如参照图5说明的那样。首先在步骤S1101和步骤S1102中分别求出下限值和上限值,然后,在该步骤S1104中使用该下限值进行检索。因此,关于作为检索结果得到的索引关键字,在从所指定的下限关键字到上限关键字的范围中取实际包含有索引关键字的范围内的最小值。
在步骤S1105中,当取出索引关键字时,执行以后以升序的方式取出索引关键字的处理。反复进行升序的索引关键字的取出处理,直至在步骤S1106中索引关键字到达上限值、或者在步骤S107中堆栈指针指向根节点的数组编号。
图20是用于说明指定检索范围并以升序的方式检索存储在配对节点树中索引关键字的处理的图,图20(a)示出配对节点树,图20(b)示出搜索路径堆栈310。在以下的说明中,在第1检索关键字设定区域270内设定有下限关键字“010100”,在第2检索关键字设定区域271内设定有上限关键字“101001”。
首先,通过执行步骤S1101和步骤S1102的处理,将下限值和上限值分别确定为数组编号(221c+1)的节点的索引关键字“011010”和数组编号(220f+1)的节点的索引关键字“100011”。当将存储有下限值的数组编号(221c+1)的节点作为检索开始节点并以升序的方式求出索引关键字时,在图20(a)所示的树中,依次取出数组编号(221c+1)、220f和(220f+1)的节点。
图20(b)的(1)、(2)和(3)分别示出在以升序的方式取得这些节点的索引关键字的各阶段中的搜索路径堆栈310的状态。图20(b)的(1)示出在将根节点的数组编号220作为检索开始节点的数组编号来执行检索范围内的上述最小值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字,(2)和(3)示出在分别将数组编号(220a+1)和数组编号(220f+1)作为检索开始节点的数组编号来执行最小值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。关于这里执行的处理是,在从下限值到上限值的范围内进行上述升序的检索处理,因此可省略详细说明。
在图20所示的例子中,在步骤S1106的判定中对索引关键字和上限值进行比较,但因为在数组编号(220f+1)的节点的索引关键字“100011”和上限值的比较中这些值相同,所以在步骤S1105中取出数组编号(220f+1)的节点的索引关键字“100011”后,结束升序检索。
图21A和图21B是示出指定检索范围并以降序的方式检索存储在配对节点树中的索引关键字的处理的流程图。参照图21A和图21B,以与上述升序检索处理的不同点为中心,来说明由用户等指定了检索的上限和下限时的降序的范围检索处理。
在步骤S1201和步骤S1202中,根据所指定的上限关键字和下限关键字来取得索引关键字的上限值和下限值的处理,分别与图19A的步骤S1102和步骤S1101的处理相同。
在步骤S1203中,与图19A的步骤S1103同样,把根节点的数组编号设定为检索开始节点的数组编号,在步骤S1204中,将所求出的上限值作为检索关键字执行配对节点树的检索处理,并得到索引关键字。在步骤S1205以后的处理中,依次以降序的方式取出从上限值到下限值的范围内所包含的索引关键字,在步骤S1206中判定为所取出的索引关键字和下限值相同时、或者在步骤S1207中判定为搜索路径堆栈310的堆栈指针指向根节点的数组编号时,结束降序的索引关键字取出处理。
图22是用于说明指定检索范围并以降序的方式检索存储在配对节点树中的索引关键字的处理的图,图22(a)示出配对节点树,图22(b)示出搜索路径堆栈310。在以下的说明中,在第1检索关键字设定区域270内设定有上限关键字“101001”,在第2检索关键字设定区域271内设定有下限关键字“011001”。
首先,通过执行步骤S1201和步骤S1202的处理,作为上限值和下限值,分别得到数组编号(220f+1)的节点的索引关键字“100011”和数组编号(221c+1)的节点的索引关键字“011010”。然后,当将存储有上限值的数组编号(220f+1)的节点作为检索开始节点并以降序的方式依次求出索引关键字时,在图22(a)所示的树中,继数组编号(220f+1)的节点之后,依次取出数组编号220f和(221c+1)的节点。
图22(b)的(1)、(2)和(3)分别示出在以降序的方式取得这些节点的索引关键字的各阶段中的搜索路径堆栈310的状态。图22(b)的(1)示出在将根节点的数组编号220作为检索开始节点的数组编号来执行检索范围内的上述最大值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字,(2)和(3)示出在分别将数组编号220f和220a作为检索开始节点的数组编号来执行最大值检索处理的阶段中的搜索路径堆栈310和所取出的索引关键字。关于这里执行的处理,是在从上限值到下限值的范围内进行上述降序的检索处理,所以可省略详细说明。
在图22所示的例子中,在步骤S1206的判定中对索引关键字和下限值进行比较,但因为在数组编号(221c+1)的节点的索引关键字“011010”和下限值的比较中这些值相同,所以在步骤S1205中取出该节点的索引关键字“011010”后,结束降序检索。
针对检索范围确定了上限值和下限值之后的升序或降序的检索处理,还可以应用于取出与检索关键字部分一致的索引关键字的处理。下面,作为部分一致的检索例说明前方一致检索处理。
图23是示出针对存储在配对节点树中的索引关键字的前方一致检索处理的流程图。参照图23,对全部取出存储在配对节点树内的索引关键字中的由一直到比特位置<n>(n为0以上的整数)都一致的比特序列构成的索引关键字的处理进行说明。
首先,在步骤S1301中取得下限关键字。针对下限关键字的各比特值,设定从开头(比特位置<0>)到比特位置<n>分别与检索关键字的各比特一致的值,并针对比特序列的比特位置<n+1>以后的比特全部设定“0”。
接着,在步骤S1302中取得上限关键字。针对上限关键字的各比特值,设定从开头到比特位置<n>分别与检索关键字的各比特一致的值,针对比特序列的比特位置<n+1>以后的比特全部设定“1”。
然后,在步骤S1303中,使用在之前的步骤中设定的下限关键字和上限关键字对数组进行范围检索,并取得索引关键字,结束处理。另外,这里的范围检索处理如先前使用图19A和图19B所说明的那样。
图24是说明由图23的流程图所示的前方一致检索处理的图,图24(a)示出配对节点树,图24(b)示出搜索路径堆栈310。如图24(a)所示,设用于进行前方一致检索的检索关键字即前方一致关键字为“10××××(×是任意比特值)”。即,作为前方一致检索的比特序列,可由用户等指定“10”。
如之前所说明的那样,在前方一致关键字为“10××××”的情况下,下限关键字和上限关键字分别设定在“100000”及“101111”的图示的设定区域内。当使用该下限关键字和上限关键字来设定构成索引关键字检索范围的下限值和上限值时,分别设定节点210g的索引关键字“100010”作为下限值,设定节点211h的索引关键字“101100”作为上限值。例如如图19A和图19B所示,当针对检索范围内的索引关键字以升序的方式依次取出索引关键字时,如上所述,在配对节点树中对索引关键字进行排序并存储,因此可以得到期望的前方一致的索引关键字。图24(b)的(1)~(4)示出在执行以升序的方式取出索引关键字的处理时的搜索路径堆栈310的状态。当然,也可以通过图21A和图21B所示的检索方法来降序地取出前方一致检索的检索结果。并且,前方一致检索的结束判定可以是索引关键字是否大于上限关键字的判定。
参照图11~图24,详细说明了求出索引关键字的最小值/最大值的检索处理和使用搜索路径堆栈310的信息的应用检索,以上的应用检索可以归纳为如下的比特序列检索方法:将配对节点树的根节点作为检索开始节点,进行求出配对节点树的索引关键字的最小值/最大值的检索处理,进行搜索路径堆栈310的出栈动作,从搜索路径堆栈310中读出数组编号,将与通过出栈动作读出的数组编号的数组元素中存储的节点成对的节点作为检索开始节点,进行以该检索开始节点为根节点的求出索引关键字的最小值/最大值的检索处理,由此,进行配对节点树的索引关键字的检索。
并且,在上述应用检索中,进行搜索路径堆栈310的出栈动作并读出数组编号,根据所读出的数组编号,针对表示该数组编号的节点被存储在节点对的哪个数组元素中的节点位置,进行节点[1]侧、或节点[0]侧的判定,该判定是关于代表节点侧、还是与其成对的节点侧的判定。如上所述,代表节点不限于节点对中的如以上各实施例所述存储在数组编号小的一方的数组元素中的节点,同样可以为存储在数组编号大的一方的数组元素中的节点,所以,上述节点位置的判定相当于如下的判定:即判定从搜索路径堆栈310读出的数组编号是存储有包含该数组编号的数组元素中存储的节点在内的节点对的数组元素的数组编号大的一方还是小的一方。
以上详细说明了用于实施本发明的最佳方式,但对本领域技术人员来说,本发明的实施方式显然不限于上述方式而可以进行各种变形。并且,显而易见,可通过使计算机执行本发明的比特序列检索方法的程序,来将该比特序列检索方法构建在计算机上。
如以上所说明的那样在本发明中,可通过使用配对节点树,来以简便且高速的方法,根据任意比特序列的集合求出最大值、最小值、升序/降序的索引关键字的取出和检索范围的下限值/上限值的设定,此外,还使用这些方法来设定检索范围,之后可以高速地求出升序/降序的索引关键字的取出和部分一致的索引关键字的取出。
Claims (14)
1.一种比特序列检索方法,该比特序列检索方法使用配对节点树,该配对节点树是由根节点与配置在相邻的存储区域中的分支节点和叶节点、或分支节点之间、或叶节点之间的节点对构成的比特序列检索用的树,
所述根节点是表示树起点的节点,该树的节点为一个时根节点是所述叶节点,树的节点为两个以上时根节点为是述分支节点,
所述分支节点包含表示进行比特序列检索的检索关键字的鉴别比特位置和链接目的地节点对中的一个节点即代表节点的位置的位置信息,所述叶节点包含由检索对象比特序列构成的索引关键字,其特征在于,
将所述配对节点树的任意节点作为检索开始节点,在所述分支节点中,根据该分支节点中包含的鉴别比特位置的检索关键字的比特值,来依次反复进行链接到链接目的地节点对的代表节点或配置在与其相邻的存储区域中的节点的动作,直至到达所述叶节点为止,由此,将存储在所述叶节点中的索引关键字作为检索结果关键字,即所述配对节点树的以所述检索开始节点为根节点的任意部分树的基于所述检索关键字的检索结果。
2.根据权利要求1所述的比特序列检索方法,其特征在于,
所述配对节点树存储在数组中,所述位置信息是存储有与该位置信息对应的所述代表节点的所述数组的数组元素的数组编号,
存储有所述检索开始节点的数组元素的数组编号、和存储有从所述检索开始节点到所述叶节点的链接目的地节点的数组元素的数组编号依次保存在堆栈中。
3.一种比特序列检索方法,该比特序列检索方法使用配对节点树,该配对节点树是由根节点与配置在相邻的存储区域中的分支节点和叶节点、或分支节点之间、或叶节点之间的节点对构成的比特序列检索用的树,
所述根节点是表示树起点的节点,该树的节点为一个时根节点是所述叶节点,树的节点为两个以上时根节点是所述分支节点,
所述分支节点包含表示进行比特序列检索的检索关键字的鉴别比特位置和链接目的地节点对中的一个节点即代表节点的位置的位置信息,所述叶节点包含由检索对象比特序列构成的索引关键字,其特征在于,
将所述配对节点树的任意节点作为检索开始节点,仅链接所述节点对中构成该节点对的2个节点中的代表节点或配置在与代表节点相邻的存储区域中的节点而到达叶节点,由此,求出以所述检索开始节点为根节点的任意部分树的索引关键字的最小值或最大值。
4.根据权利要求3所述的比特序列检索方法,其特征在于,
所述配对节点树存储在数组中,所述位置信息是存储有与该位置信息对应的节点的所述数组的数组元素的数组编号,
存储有所述检索开始节点的数组元素的数组编号、和存储有从所述检索开始节点到所述叶节点的链接目的地节点的数组元素的数组编号依次保存在堆栈中。
5.一种比特序列检索方法,其特征在于,
通过权利要求4所述的比特序列检索方法,将所述配对节点树的根节点作为所述检索开始节点,取得所述配对节点树的索引关键字的最大值或最小值,
进行所述堆栈的出栈动作,从该堆栈中读出数组编号,
依次反复进行该堆栈的出栈动作,直到该数组编号成为存储有包含该数组编号的数组元素中存储的节点在内的节点对的数组元素的数组编号中大的一方或小的一方为止,
将与通过反复进行所述出栈动作而读出的所述大的一方或小的一方的数组编号的数组元素中存储的节点成对的节点作为检索开始节点,依次进行权利要求4所述的比特序列检索方法,由此,以升序或降序的方式取出存储在所述配对节点树中的索引关键字。
6.一种比特序列检索方法,其特征在于,
通过权利要求4所述的比特序列检索方法,将所述配对节点树的根节点作为所述检索开始节点,取得所述配对节点树的索引关键字的最小值,
进行所述堆栈的出栈动作,从该堆栈中读出数组编号,
反复进行所述堆栈的出栈动作,直到该数组编号成为存储有包含该数组编号的数组元素中存储的节点在内的节点对的数组元素的数组编号中大的一方或小的一方为止,
将与通过反复进行所述出栈动作而读出的所述大的一方或小的一方的数组编号的数组元素中存储的节点成对的节点作为检索开始节点,进行权利要求4所述的比特序列检索方法,由此,取得以该检索开始节点为根节点的部分树的索引关键字的最小值,
反复进行从所述堆栈的出栈动作到所述部分树的索引关键字的最小值取得为止的处理,由此,以升序的方式取出存储在所述配对节点树中的索引关键字。
7.一种比特序列检索方法,其特征在于,
通过权利要求4所述的比特序列检索方法,将所述配对节点树的根节点作为所述检索开始节点,取得所述配对节点树的索引关键字的最大值,
进行所述堆栈的出栈动作,从该堆栈中读出数组编号,
反复进行所述堆栈的出栈动作,直到该数组编号成为存储有包含该数组编号的数组元素中存储的节点在内的节点对的数组元素的数组编号中大的一方或小的一方为止,
将与通过反复进行所述出栈动作而读出的所述大的一方或小的一方的数组编号的数组元素中存储的节点成对的节点作为检索开始节点,进行权利要求4所述的比特序列检索方法,由此,取得以该检索开始节点为根节点的部分树的索引关键字的最大值,
反复进行从所述堆栈的出栈动作到所述部分树的索引关键字的最大值取得为止的处理,由此,以降序的方式取出存储在所述配对节点树中的索引关键字。
8.一种比特序列检索方法,其特征在于,
取得用于指定检索范围下限的下限关键字,
通过权利要求4所述的比特序列检索方法,将所述配对节点树的根节点作为所述检索开始节点,求出所述配对节点树的索引关键字的最小值,
如果所述下限关键字大于所述索引关键字的最小值,则将所述下限关键字作为检索关键字,并且将所述配对节点树的根节点作为所述检索开始节点,通过权利要求2所述的比特序列检索方法来取出所述检索结果关键字,
如果所述检索关键字大于所述检索结果关键字,则进行所述堆栈的出栈动作,从该堆栈中读出数组编号,
反复进行所述堆栈的出栈动作,直到该数组编号成为存储有包含该数组编号的数组元素中存储的节点在内的节点对的数组元素的数组编号中大的一方或小的一方为止,
将与通过反复进行所述出栈动作而读出的所述大的一方或小的一方的数组编号的数组元素中存储的节点成对的节点作为检索开始节点,通过权利要求4所述的比特序列检索方法,将以所述检索开始节点为根节点的部分树的索引关键字的最小值作为所述检索结果关键字,
反复进行从所述堆栈的出栈动作到求出所述部分树的索引关键字的最小值并将该索引关键字的最小值作为所述检索结果关键字为止的处理,直到所述检索关键字小于所述检索结果关键字,
由此,求出与所述指定的下限关键字相对的所述配对节点树的下限值。
9.一种比特序列检索方法,其特征在于,
取得指定检索范围上限的上限关键字,
通过权利要求4所述的比特序列检索方法,将所述配对节点树的根节点作为所述检索开始节点,求出所述配对节点树的索引关键字的最大值,
如果所述上限关键字小于所述索引关键字的最大值,则将所述上限关键字作为检索关键字,并且将所述配对节点树的根节点作为所述检索开始节点,通过权利要求2所述的比特序列检索方法,来取出所述检索结果关键字,
如果所述检索关键字小于所述检索结果关键字,则进行所述堆栈的出栈动作,从该堆栈中读出数组编号,
反复进行所述堆栈的出栈动作,直到该数组编号成为存储有包含该数组编号的数组元素中存储的节点在内的节点对的数组编号中大的一方或小的一方为止,
将与通过反复进行所述出栈动作而读出的所述大的一方或小的一方的数组编号的数组元素中存储的节点成对的节点作为检索开始节点,通过权利要求4所述的比特序列检索方法,将以所述检索开始节点为根节点的部分树的索引关键字的最大值作为所述检索结果关键字,
反复进行从所述堆栈的出栈动作到求出所述部分树的索引关键字的最大值并将该索引关键字的最大值作为所述检索结果关键字为止的处理,直到所述检索关键字大于所述检索结果关键字,
由此,求出与所述指定的上限关键字相对的所述配对节点树的上限值。
10.一种比特序列检索方法,其特征在于,
取得指定检索范围上限的上限关键字和指定检索范围下限的下限关键字,
根据所述指定的上限关键字,通过权利要求9所述的比特序列检索方法,求出配对节点树的上限值,并且根据所述指定的下限关键字,通过权利要求8所述的比特序列检索方法,求出所述配对节点树的下限值,
将该下限值作为检索关键字,并且将所述配对节点树的根节点作为所述检索开始节点,通过权利要求2所述的比特序列检索方法,检索所述检索结果关键字,取出相当于所述下限值的索引关键字,
如果所述上限值与所述取出的索引关键字不同,则进行所述堆栈的出栈动作,从该堆栈中读出数组编号,
反复进行所述堆栈的出栈动作,直到该数组编号成为存储有包含该数组编号的数组元素中存储的节点在内的节点对的数组编号中大的一方或小的一方为止,
将与通过反复进行所述出栈动作而读出的所述大的一方或小的一方的数组编号的数组元素中存储的节点成对的节点作为检索开始节点,通过权利要求4所述的比特序列检索方法,取出以所述检索开始节点为根节点的部分树的索引关键字的最小值,
反复进行从所述堆栈的出栈动作到所述部分树的索引关键字的最小值取出为止的处理,直到所述索引关键字的最小值和所述上限值相同,由此,在所指定的下限关键字和上限关键字的范围内以升序的方式取出存储在所述配对节点树中的索引关键字。
11.一种比特序列检索方法,其特征在于,
取得指定检索范围上限的上限关键字和指定检索范围下限的下限关键字,
根据所述指定的上限关键字,通过权利要求9所述的比特序列检索方法,求出配对节点树的上限值,并且根据所述指定的下限关键字,通过权利要求8所述的比特序列检索方法,求出所述配对节点树的下限值,
将该上限值作为检索关键字,并且将所述配对节点树的根节点作为所述检索开始节点,通过权利要求2所述的比特序列检索方法,检索所述检索结果关键字,取出相当于所述上限值的索引关键字,
如果所述下限值与所述取出的索引关键字不同,则进行所述堆栈的出栈动作,从该堆栈中读出数组编号,
反复进行所述堆栈的出栈动作,直到该数组编号成为存储有包含该数组编号的数组元素中存储的节点在内的节点对的数组编号中大的一方或小的一方为止,
将与通过反复进行所述出栈动作而读出的所述大的一方或小的一方的数组编号的数组元素中存储的节点成对的节点作为检索开始节点,通过权利要求4所述的比特序列检索方法,取出以所述检索开始节点为根节点的部分树的索引关键字的最大值,
反复进行从所述堆栈的出栈动作到所述部分树的索引关键字的最大值取出为止的处理,直到所述索引关键字的最大值和所述下限值相同,由此,在所指定的上限关键字和下限关键字的范围内以降序的方式取出存储在所述配对节点树中的索引关键字。
12.一种比特序列检索方法,其特征在于,
将为了进行比特序列的前方一致检索而指定的前方一致关键字的无关比特的值设为0,求出下限关键字,并且将所述无关比特的值设为1,求出上限关键字,
根据该上限关键字和下限关键字,进行权利要求10或权利要求11所述的比特序列检索方法,取出存储在所述配对节点树中的索引关键字,由此,进行基于所述前方一致关键字的前方一致检索。
13.一种比特序列检索方法,其特征在于,
将所述配对节点树的根节点作为所述检索开始节点,进行权利要求4所述的比特序列检索方法,
进行所述堆栈的出栈动作,从该堆栈中读出数组编号,
将与通过反复进行所述出栈动作而读出的所述数组编号的数组元素中存储的节点成对的节点作为检索开始节点,进行以该检索开始节点为根节点的权利要求4所述的比特序列检索方法,由此,进行所述配对节点树的索引关键字的检索。
14.一种程序,其特征在于,
该程序用于使计算机执行权利要求1~13中的任一项所述的比特序列检索方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP293619/2006 | 2006-10-30 | ||
JP2006293619A JP4271227B2 (ja) | 2006-10-30 | 2006-10-30 | ビット列検索装置、検索方法及びプログラム |
PCT/JP2007/001120 WO2008053583A1 (fr) | 2006-10-30 | 2007-10-16 | Procédé et programme de recherche de séquence de bits |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101535993A true CN101535993A (zh) | 2009-09-16 |
CN101535993B CN101535993B (zh) | 2011-11-09 |
Family
ID=39343937
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007800407904A Expired - Fee Related CN101535993B (zh) | 2006-10-30 | 2007-10-16 | 比特序列检索装置及检索方法 |
Country Status (6)
Country | Link |
---|---|
EP (1) | EP2085897B1 (zh) |
JP (1) | JP4271227B2 (zh) |
CN (1) | CN101535993B (zh) |
AT (1) | ATE516556T1 (zh) |
TW (1) | TW200821914A (zh) |
WO (1) | WO2008053583A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113794558A (zh) * | 2021-09-16 | 2021-12-14 | 烽火通信科技股份有限公司 | 一种XMSS算法中的L-tree计算方法、装置及系统 |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8150856B2 (en) | 2006-07-07 | 2012-04-03 | S. Grants Co., Ltd. | Bit string searching apparatus, searching method, and program |
JP4379894B2 (ja) | 2006-11-28 | 2009-12-09 | 株式会社エスグランツ | カップルドノードツリーの分割/結合方法及びプログラム |
JP4402120B2 (ja) | 2007-01-24 | 2010-01-20 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
JP4514771B2 (ja) | 2007-05-18 | 2010-07-28 | 株式会社エスグランツ | カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム |
JP4439013B2 (ja) | 2007-04-25 | 2010-03-24 | 株式会社エスグランツ | ビット列検索方法及び検索プログラム |
JP4514768B2 (ja) | 2007-04-19 | 2010-07-28 | 株式会社エスグランツ | カップルドノードツリーの退避/復元装置、退避/復元方法及びプログラム |
JP4527753B2 (ja) * | 2007-07-03 | 2010-08-18 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
EP2204744B1 (en) | 2007-09-14 | 2013-04-24 | Kousokuya, Inc. | Bit string search device, search method, and program |
JP4502223B2 (ja) * | 2007-12-05 | 2010-07-14 | 株式会社エスグランツ | ビット列のマージソート装置、方法及びプログラム |
JP4498409B2 (ja) * | 2007-12-28 | 2010-07-07 | 株式会社エスグランツ | データベースのインデックスキー更新方法及びプログラム |
JP4567754B2 (ja) | 2008-01-17 | 2010-10-20 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
JP4514810B2 (ja) | 2008-05-18 | 2010-07-28 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
JP5220483B2 (ja) * | 2008-06-06 | 2013-06-26 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 木構造のデータに対する集約計算を行うコンピュータ・システム、並びにその方法及びコンピュータ・プログラム |
EP2515245A1 (en) | 2009-11-30 | 2012-10-24 | S. Grants Co., Ltd. | Bit stream retrieval device, retrieval method, and program |
US9361578B2 (en) * | 2011-07-13 | 2016-06-07 | Palo Alto Research Center Incorporated | Memory efficient state-set representation for planning |
CN102819536B (zh) * | 2011-09-27 | 2015-08-19 | 金蝶软件(中国)有限公司 | 树型数据处理方法及装置 |
US9547729B2 (en) | 2014-05-30 | 2017-01-17 | International Business Machines Corporation | Adaptive query processor for query systems with limited capabilities |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6012061A (en) | 1997-11-25 | 2000-01-04 | International Business Machines Corp. | Method and apparatus for deleting nodes in Patricia trees |
EP1107126A2 (en) * | 1999-12-08 | 2001-06-13 | Hewlett-Packard Company, A Delaware Corporation | A fast, efficient, adaptive, hybrid tree |
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 | 日本電信電話株式会社 | 最長一致検索回路および方法およびプログラムおよび記録媒体 |
CN1645374A (zh) * | 2005-01-17 | 2005-07-27 | 徐文新 | 位标记字符串检索技术 |
-
2006
- 2006-10-30 JP JP2006293619A patent/JP4271227B2/ja not_active Expired - Fee Related
-
2007
- 2007-10-16 EP EP07827899A patent/EP2085897B1/en not_active Not-in-force
- 2007-10-16 AT AT07827899T patent/ATE516556T1/de not_active IP Right Cessation
- 2007-10-16 WO PCT/JP2007/001120 patent/WO2008053583A1/ja active Application Filing
- 2007-10-16 CN CN2007800407904A patent/CN101535993B/zh not_active Expired - Fee Related
- 2007-10-29 TW TW096140594A patent/TW200821914A/zh unknown
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113794558A (zh) * | 2021-09-16 | 2021-12-14 | 烽火通信科技股份有限公司 | 一种XMSS算法中的L-tree计算方法、装置及系统 |
CN113794558B (zh) * | 2021-09-16 | 2024-02-27 | 烽火通信科技股份有限公司 | 一种XMSS算法中的L-tree计算方法、装置及系统 |
Also Published As
Publication number | Publication date |
---|---|
ATE516556T1 (de) | 2011-07-15 |
JP2008112240A (ja) | 2008-05-15 |
CN101535993B (zh) | 2011-11-09 |
EP2085897B1 (en) | 2011-07-13 |
TW200821914A (en) | 2008-05-16 |
JP4271227B2 (ja) | 2009-06-03 |
EP2085897A1 (en) | 2009-08-05 |
WO2008053583A1 (fr) | 2008-05-08 |
EP2085897A4 (en) | 2010-03-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101535993B (zh) | 比特序列检索装置及检索方法 | |
CN101484895B (zh) | 比特序列检索装置以及检索方法 | |
CN101689204B (zh) | 比特序列检索方法以及程序 | |
CN101657818B (zh) | 配对节点树保存/复原方法、最长一致/最短一致检索方法、比特序列检索方法以及存储介质 | |
CN101542485B (zh) | 配对节点树的分割/结合方法和程序 | |
JP4502223B2 (ja) | ビット列のマージソート装置、方法及びプログラム | |
CN101589390B (zh) | 比特序列检索装置、检索方法 | |
JP5473893B2 (ja) | コード列検索装置、検索方法及びプログラム | |
JP2008287533A (ja) | カップルドノードツリーの最長一致/最短一致検索方法及びプログラム | |
JP2009157853A (ja) | データベースのインデックスキー更新方法及びプログラム | |
JP4439013B2 (ja) | ビット列検索方法及び検索プログラム | |
WO2009122651A1 (ja) | ビット列検索装置、検索方法及びプログラム | |
EP2149845A1 (en) | Coupled node tree save/restore method, longest consistence/shortest consistence retrieval method, bit retrieval method and memory medium | |
JP4567754B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP2011018296A (ja) | カップルドノードツリーのインデックスキー挿入/削除方法 | |
JP5220057B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP2009134744A (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: Expressway Co.,Ltd. Address before: Chiba County, Japan Patentee before: New leaf Co.,Ltd. |
|
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20111109 Termination date: 20211016 |