CN101911068B - 比特序列检索装置、检索方法 - Google Patents
比特序列检索装置、检索方法 Download PDFInfo
- Publication number
- CN101911068B CN101911068B CN200880124936.8A CN200880124936A CN101911068B CN 101911068 B CN101911068 B CN 101911068B CN 200880124936 A CN200880124936 A CN 200880124936A CN 101911068 B CN101911068 B CN 101911068B
- Authority
- CN
- China
- Prior art keywords
- node
- key
- retrieval
- bit
- tree
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 64
- 238000003780 insertion Methods 0.000 claims description 32
- 230000037431 insertion Effects 0.000 claims description 32
- 238000012217 deletion Methods 0.000 claims description 26
- 230000037430 deletion Effects 0.000 claims description 26
- 238000012966 insertion method Methods 0.000 claims description 6
- 238000012545 processing Methods 0.000 description 48
- 238000007689 inspection Methods 0.000 description 15
- 241000712062 Patricia Species 0.000 description 9
- 238000010276 construction Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 4
- 230000000052 comparative effect Effects 0.000 description 3
- 238000013500 data storage Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000012423 maintenance Methods 0.000 description 3
- 238000004321 preservation Methods 0.000 description 2
- 238000011160 research Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
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)
Abstract
在应用了配对节点树的检索方法中,为了能够处理重复关键字,将以末尾关键字为唯一关键字的多个关键字作为关键字序列进行组合来构成索引关键字,检索关键字是组合多个关键字作为关键字序列、且关键字序列的末尾关键字唯一的检索关键字序列。分支节点中具有表示进行比特序列检索的检索关键字序列中的、进行比特序列比较的关键字的位置信息的第1鉴别位置和该关键字的第2鉴别位置,另外还包含表示作为链接目的地节点对中的一个节点的代表节点的位置的位置信息。从检索关键字序列中取出分支节点的第1鉴别位置的关键字,根据该关键字的第2鉴别位置的比特值,链接到链接目的地节点对的一个节点,进行上述处理直至到达与索引关键字对应的叶节点为止,检索到索引关键字。
Description
技术领域
本发明涉及从比特序列的集合中检索期望比特序列的检索装置、检索方法以及程序,尤其涉及对存储比特序列的数据结构进行研究来提高检索速度等的技术领域。
背景技术
近年来,随着社会信息化的进展,在各个场所都利用大规模的数据库。为了从这样大规模的数据库中检索记录,通常是将与存储有各记录的地址相对应的记录内的项目作为索引关键字进行检索,搜索出期望的记录。另外,也可以将全文检索中的字符串视为文档的索引关键字。
并且,由于这些索引关键字用比特序列来表现,因此可以将数据库的检索归结为比特序列的检索。
一直以来,为了高速地进行上述比特序列的检索,对存储比特序列的数据结构进行了各种研究。作为这样的结构之一,已知有Patricia树这样的树结构。
图1示出上述现有检索处理所使用的Patricia树的一例。Patricia树的节点构成为包含索引关键字、检索关键字的检查比特位置、左右链接指针。虽未明示,但显然节点中包含用于对与索引关键字对应的记录进行访问的信息。
在图1的例子中,保持索引关键字″100010″的节点1750a是根节点,其检查比特位置是0。节点1750a的左链接1740a与节点1750b连接,右链接1741a与节点1750f连接。
节点1750b所保持的索引关键字是″010011″,检查比特位置2030b是1。节点1750b的左链接1740b与节点1750c连接,右链接1741b与节点1750d连接。节点1750c所保持的索引关键字是″000111″,检查比特位置是3。节点1750d所保持的索引关键字是″011010″,检查比特位置是2。
从节点1750c起用实线连接的部分表示节点1750c的左右链接指针,未进行虚线连接的左指针1740c表示其栏为空栏。进行了虚线连接的右指针1741c的虚线连接目的地表示指针所示的地址,此时表示右指针指定节点1750c的情况。
节点1750d的右指针1741d指向节点1750d自身,左链接1740d与节点1750e连接。节点1750e保持的索引关键字是“010010”,检查比特位置是5。节点1750e的左指针1740e指向节点1750b,右指针1741e指向节点1750e。
并且,节点1750f保持的索引关键字是“101011”,检查比特位置1730f是2。节点1750f的左链接1740f与节点1750g连接,右链接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对1地对应的项目的值作为索引关键字进行检索,还将构成记录的任意项目的值作为检索关键字进行检索。因为该项目的值根据记录不一定是唯一的,所以在多个记录中进行重复关键字的检索。在下述专利文献2中记载了使用这种重复关键字的一例。
专利文献1:日本特开2001-357070号公报
专利文献2:日本特开平11-96058号公报
因此,本发明要解决的课题是提供一种能进行重复关键字的检索且所需的存储容量小、检索速度为高速、具有容易进行数据维护的数据结构的比特序列检索装置以及检索方法。
作为解决上述现有检索方法中的问题点的方法,本申请人在日本特愿2006-187827中提出了采用配对节点树的比特序列检索,该配对节点树是由根节点、以及配置在相邻存储区域中的分支节点和叶节点、或者分支节点之间或叶节点之间的节点对构成的用于比特序列检索的树,根节点是表示树的起点的节点,当该树的节点为一个时根节点是叶节点,当树的节点为两个以上时根节点是上述分支节点,上述分支节点包含进行比特序列检索的检索关键字的鉴别比特位置和表示链接目的地节点对的一个节点的代表节点的位置的位置信息,上述叶节点包含由检索对象的比特序列构成的索引关键字。
在上述申请中,示出根据所赋予的索引关键字集合来生成配对节点树的方法和从配对节点树中检索单一索引关键字的方法等采用了配对节点树的基本检索方法。
另外,在比特序列的检索中,存在求出最小值、最大值、求出某范围的值等各种检索要求。因此,本申请人在日本特愿2006-293619中提出了求出配对节点树的任意部分树所包含的索引关键字的最大值/最小值的方法等。
此外,本申请人在日本特愿2007-114915中提出了下述配对节点树以及采用该配对节点树的各种检索处理,对于该配对节点树,将索引关键字配置在不同于配对节点树的区域内,在叶节点中取代索引关键字而存储有表示配置索引关键字的存储区域的位置的信息。
但是,上述配对节点树的结构基于索引关键字彼此间的比特值不同的位置即差分比特位置,因此在这种状态下无法处理重复关键字。
发明内容
本发明的目的在于能够在应用了该配对节点树的高速检索方法中处理重复关键字。
根据本发明的一个方式,通过组合多个关键字作为关键字序列,使关键字序列的末尾关键字成为不重复的唯一关键字,由此将由多个关键字的关键字序列构成的索引关键字构成为唯一关键字。并且,在上述配对节点树的叶节点中存储第2位置信息,该第2位置信息表示配置有该唯一关键字的存储区域的位置。检索关键字是组合多个关键字作为关键字序列、且关键字序列的末尾关键字唯一的检索关键字序列。在分支节点中,具有第1鉴别位置和第2鉴别位置,该第1鉴别位置表示进行比特序列检索的检索关键字序列中的、进行比特序列比较的关键字的位置信息,该第2鉴别位置表示该关键字的鉴别比特位置。另外,分支节点包含第1位置信息,该第1位置信息表示作为链接目的地节点对的一个节点的代表节点的位置。
采用具有以上这样的数据结构的配对节点树,从检索关键字序列中取出分支节点的第1鉴别位置的关键字,根据该关键字的第2鉴别位置(鉴别比特位置)的比特值,链接到链接目的地节点对中的某一节点,进行上述处理直至到达叶节点为止,利用存储在叶节点内的表示存储区域位置的信息,取得配置在该存储区域内的索引关键字,由此实施基于上述检索关键字序列的检索。
根据本发明,能对重复关键字进行处理,并且能进行更高速的比特序列数据的检索。而且还能容易地执行比特序列数据的追加删除。
附图说明
图1是示出在现有检索中采用的Patricia树的一例的图。
图2A是说明存储在数组中的配对节点树的结构例的图。
图2B是概念性示出配对节点树的树结构的图。
图3是说明用于实施本发明的硬件结构例的图。
图4是说明本发明一实施方式的检索处理的流程图。
图5是说明本发明一实施方式的作为插入处理前级的检索处理的处理流程的图。
图6是说明准备用于本发明一实施方式的插入处理的待插入节点对的数组元素的处理流程的图。
图7是说明求取插入节点对的位置、写入节点对的各节点的内容来完成插入处理的处理流程的图。
图8A是说明本发明一实施方式的包含根节点插入处理的叶节点插入处理整体的处理流程的图。
图8B是说明本发明一实施方式的关键字序列比较处理的处理流程的图。
图9是说明本发明一实施方式的作为删除处理前级的检索处理的处理流程的图。
图10是说明本发明一实施方式的删除处理后级的处理流程的图。
图11A是例示说明删除处理前的配对节点树和删除关键字序列的图。
图11B是说明删除处理后的配对节点树的图。
图12A是例示说明插入处理前的配对节点树和插入关键字序列的图。
图12B是说明插入处理后的配对节点树的图。
具体实施方式
以下,作为用于实施本发明的优选方式,说明在数组中存储配对节点树的例子。作为分支节点所保持的表示链接目的地代表节点的位置的数据,还可以为存储装置的地址信息,可以通过采用由可存储分支节点或叶节点中占有区域的存储容量大的一方的数组元素构成的数组,由此利用数组编号来表示节点位置,可削减表示代表节点位置的位置信息的信息量。
图2A是说明本发明一实施方式的存储在数组内的配对节点树的结构例的图。
参照图2A,节点101配置在数组100的数组编号10的数组元素内。节点101由节点类别102、第1鉴别位置103a、第2鉴别位置103以及代表节点编号104构成。节点类别102是0,表示节点101是分支节点。在第1鉴别位置103a中存储0,表示对检索关键字序列的第0位置的关键字进行比特序列比较。在第2鉴别位置103中存储1。在代表节点编号104中存储链接目的地的节点对的代表节点的数组编号20。此外,以下为了简化表述,有时将存储在代表节点编号内的数组编号称为代表节点编号。另外,有时还利用对该节点赋予的标号或者对节点对赋予的标号来表示存储在代表节点编号内的数组编号。此外,还将第1鉴别位置或第2鉴别位置所存储的值简称为第1鉴别位置或第2鉴别位置。
在数组编号20的数组元素中存储有节点对111的代表节点即节点[0]112。并且在相邻的下一数组元素(数组编号20+1)中存储与代表节点成对的节点[1]113。节点[0]112与节点101同样是分支节点。在节点[0]112的节点类别114中存储0,在第1鉴别位置115a中存储1,在第2鉴别位置115中存储3,在代表节点编号116中存储30。另外,节点[1]113由节点类别117和参照指针118a构成。在节点类别117中存储1,表示节点[1]113是叶节点。在参照指针118a中存储参照索引关键字的存储区域的指针。参照指针118a所存储的数据是上述第2位置信息的具体例。以下为了简化表述,有时还将参照指针所存储的数据称为参照指针。
关于Patricia树与先前叙述的相同,显然还需要用于对与索引关键字对应的记录进行访问的访问目的地信息。例如,可以通过在与存储索引关键字的存储区域相邻的存储区域中,存储与该索引关键字对应的访问目的地信息,来进行索引关键字和访问目的地信息的对应。以下,省略说明访问目的地信息。
此外,有时用节点[0]来表示代表节点,用节点[1]来表示与代表节点成对的节点。另外,有时将存储在某数组编号的数组元素中的节点称为该数组编号的节点,有时还将存储有节点的数组元素的数组编号称为节点的数组编号。
省略由存储在数组编号30和31的数组元素中的节点122和节点123构成的节点对121的内容。
对存储有节点[0]112、节点[1]113、节点122以及节点123的数组元素分别赋予的0或1,表示在利用检索关键字序列进行检索时链接到节点对的哪个节点。对代表节点编号加上检索关键字序列中位于前级分支节点的第1鉴别位置的关键字(以下,有时称为检索关键字。)的位于第2鉴别位置(以下,有时称为鉴别比特位置。)的比特值0或1,链接到相加后所得到的数组编号的节点。
因此,可以通过对前级分支节点的代表节点编号加上位于前级分支节点的第1鉴别位置的检索关键字的、位于鉴别比特位置的比特值,来求出存储有链接目的地节点的数组元素的数组编号。
此外,在上述例中代表节点编号采用配置有节点对的数组编号中较小的一方,显然也可以采用较大的一方。
图2B是概念性示出本实施方式的配对节点树的树结构和关键字序列(以下,有时称为索引关键字。)的存储区域的图。图2B(1)所示的是配对节点树的树结构。用标号210a示出的是根节点。在图示的例中,根节点210a是配置在数组编号220中的节点对201a的代表节点。
作为树结构,在根节点210a的下方配置有节点对201b,在节点对201b的下层配置有节点对201c和节点对201f,在节点对201f的下层配置有节点对201h和节点对201g。在节点对201c的下方配置有节点对201d,并且在节点对201d的下方配置有节点对201e。
在各节点的前方赋予的0或1的标号与在图2A中说明的数组元素的前方赋予的标号相同。根据检索关键字的鉴别比特位置的比特值来搜索树,找到与检索对象的索引关键字对应的叶节点。
在所图示的例子中示出,根节点210a的节点类别260a为0表示是分支节点,第1鉴别位置240a示出0,鉴别比特位置230a示出0。代表节点编号是220a,其是存储有节点对201b的代表节点210b的数组元素的数组编号。
节点对201b由节点210b和211b构成,这些节点的节点类别260b、261b都是0,表示为分支节点。在节点210b的第1鉴别位置240b中存储0,在鉴别比特位置230b中存储1,在链接目的地的代表节点编号中存储有存储节点对201c的代表节点210c的数组元素的数组编号220b。
在节点210c的节点类别260c中存储1,所以该节点是叶节点,因此,含有参照指针250c。在图示的例子中,在参照指针250c中存储下述指针,该指针参照存储有由第1关键字290c和第2关键字290c′构成的索引关键字的存储区域。参照指针250c所存储的数据也称为参照指针,用标号280c来表示。其它叶节点也同样,将参照指针和参照指针所存储的数据都用参照指针这样的表达来描述。
图2B(2)示出了连续设置多个索引关键字的存储区域的例子,将这些连续的存储区域整体示作索引关键字存储区域311,不过索引关键字也可以不存储在连续的区域内。另外,树结构上叶节点彼此间的关系也可以与索引关键字存储区域311中的索引关键字的配置顺序无关。
返回到节点对201c的说明,与代表节点210c成对的另一个节点211c的节点类别261c是0,第1鉴别位置241c是1,鉴别比特位置231c是0,在代表节点编号中存储有存储节点对201d的代表节点210d的数组元素的数组编号221c。
节点210d的节点类别260d是0,第1鉴别位置240d是1,鉴别比特位置230d是2,在代表节点编号中存储有存储节点对201e的代表节点210e的数组元素的数组编号220d。与节点210d成对的节点211d的节点类别261d是1,在参照指针251d中存储参照指针281d,该参照指针281d表示存储有″011010″、″1000″这样的关键字序列291d、291d′的存储区域。
节点对201e的节点210e、211e的节点类别260e、261e都是1,表示双方都是叶节点。在节点210e、211e的参照指针250e、251e中分别存储有参照指针280e、281e,参照指针280e指向存储有″011010″、″0101″这样的关键字序列290e,参照指针281e指向存储有″011010″、″0110″这样的关键字序列291e′。
在节点对201b的另一个节点即节点211b的第1鉴别位置241b中存储0,在鉴别比特位置231b中存储2,在链接目的地的代表节点编号中存储有存储节点对201f的代表节点210f的数组元素的数组编号221b。
节点对201f的节点210f、211f的节点类别260f、261f都是0,双方都是分支节点。在第1鉴别位置240f、241f中分别存储有0、1,在鉴别比特位置230f、231f中存储有5、2。在节点210f的代表节点编号中存储有存储节点对201g的代表节点210g的数组元素的数组编号220f,在节点211f的代表节点编号中存储有存储节点对201h的代表节点即节点[0]210h的数组元素的数组编号221f。
节点对201g的节点210g、211g的节点类别260g、261g都是1,表示双方都是叶节点。在节点210g、211g各自的参照指针250g、251g中存储有参照指针280g、281g,参照指针280g指向存储有″100010″、″0100″这样的关键字序列290g、290g′的存储区域,参照指针281g指向存储有″100011″、″0011″这样的关键字序列291g、291g′的存储区域。
另外示出,相同的节点对201h的代表节点即节点[0]210h和与其成对的节点[1]211h的节点类别260h、261h都是1,表示双方都是叶节点。在节点210h、211h各自的参照指针250h、251h中存储有参照指针280h、281h,参照指针280h指向存储有″101100″、″0001这样的关键字序列290h、290h′的存储区域,参照指针281h指向存储有″101100″、″0010″这样的关键字序列291h、291h′的存储区域。
以下,简单说明从上述树中检索索引关键字″1011000010″的处理的流程。上述索引关键字是由第1关键字″101100″和第2关键字″0010″构成的关键字序列。第1鉴别位置以及第2鉴别位置(鉴别比特位置)从左开始为0、1、2、...。
首先,将比特序列″1011000010″作为检索关键字序列从根节点210a起开始处理。因为根节点210a的第1鉴别位置240a是0,鉴别比特位置230a是0,所以当观察检索关键字序列的第1关键字″101100″的鉴别比特位置为0的比特值时该值是1。因此链接到对存储在代表节点编号中的数组编号220a加1得到的数组编号的数组元素所存储的节点211b。因为在节点211b的第1鉴别位置241b上存储0、在鉴别比特位置231b上存储2,所以当观察第1关键字″101100″的鉴别比特位置为2的比特值时该值是1,因此链接到对存储在代表节点编号的数组编号221b加1得到的数组编号的数组元素所存储的节点211f。
因为在节点211f的第1鉴别位置241f上存储1、在鉴别比特位置231f上存储2,所以当观察第2关键字″0010″的鉴别比特位置为2的比特值时该值是1,因此链接到对存储在代表节点编号中的数组编号221f加1得到的数组编号的数组元素所存储的节点211h。
节点211h的节点类别261h是1表示为叶节点,所以参照由参照指针281h示出的存储区域,读出在该存储区域中存储的索引关键字即关键字序列291h、291h′。通过这种方式来进行采用了配对节点树的检索。当将读出的关键字序列与检索关键字比较时,可知在上述例的情况下是一致的。
此外,在上述说明中,将识别检索关键字序列中的关键字位置的第1鉴别位置,以从左起0、1、2、...这样的方式设为与关键字的排列顺序对应的关键字位置编号,但不限于此,例如也可以通过设检索关键字序列整体的离开开头比特的偏移值、或者交替使用0和1来表示关键字位置切换的方式,由此识别关键字的位置。
接着,参照图2B对配对节点树结构的意思进行说明。
配对节点树的结构是由索引关键字的集合规定的。在图2B的例子中,根节点的第1鉴别位置240a为0反映了下述情况:在索引关键字的第1关键字中存在不同的值,即不是所有的第1关键字都重复。根节点210a的鉴别比特位置230a为0是因为,在索引关键字的开头关键字即第1关键字中具有第0比特为0的值和第0比特为1的值。第1关键字的第0比特为0的索引关键字的组被分类于节点210b之下,第0比特为1的索引关键字的组被分类于节点211b之下。
节点211b的鉴别比特位置231b是2反映了下述索引关键字集合的性质:其下位的叶节点211h、210h、211g、210g所对应的索引关键字的第1关键字的第1比特全部为0而相等,从第2比特起才不同。
节点211b的紧接下位的节点对201f的节点211f的第1鉴别位置为1反映了节点211f下位的叶节点211h、210h所对应的索引关键字的第1关键字290h、291h重复,表示接着通过第2关键字290h′、291h′的比特序列来确定配对节点树上的节点位置。并且,节点211f的鉴别比特位置231f为2是因为,第2关键字290h′、291h′从开头起在第2比特成为不同的值,反映其比特值在与各个索引关键字对应的位置上配置有叶节点211h、210h。
另一方面,在第1关键字的第2比特为0的索引关键字中,第3比特和第4比特都相等而在第5比特不同,因此在节点210f的鉴别比特位置230f中存储5。在索引关键字中第1关键字的第5比特为1的值和第5比特为0的值分别仅有1个,因此节点210f的链接目的地的节点210g、211g是叶节点,在参照指针250g和251g中分别存储参照指针280g、281g,参照指针280g指向存储有关键字序列290g、290g′的存储区域,参照指针281g指向存储有关键字序列291g、291g′的存储区域。
即使在索引关键字的集合内包含″1011010001″或″1011100001″来取代″1011000001″,由于第1关键字到第3比特为止以及第2关键字与″1011000001″相等,因而只是由节点210h的参照指针280h指示的存储区域所存储的索引关键字的值改变,树结构本身不会改变。但是,当除了″1011000001″之外还包含″1011000000″时,节点210h成为分支节点,其鉴别比特位置成为3。
如以上说明的那样,配对节点树的结构是由索引关键字集合中包含的各索引关键字的各比特位置的比特值所确定的。
进一步说来,针对成为不同比特值的每个比特位置,分支成比特值为“1”的节点、和比特值为“0”的节点,所以当优先节点“1”侧和树的深度方向来搜索叶节点时,存储在节点中的索引关键字成为与节点211h对应的索引关键字″1011000010″、与节点210h对应的索引关键字″1011000001″...、与节点210c对应的索引关键字″0001110111″,以降序的方式排序。
即,在配对节点树中,索引关键字以排序的方式配置在树上。
当利用检索关键字序列进行检索时,搜索在配对节点树上配置有索引关键字的路径,例如,如果检索关键字序列是″1011000001″则可到达节点210h。并且,根据上述说明还可以想到,即使在将″1011000000″作为检索关键字序列的情况下,也会到达节点210h,获得由参照指针280h指示的存储区域所存储的索引关键字,作为检索结果关键字序列。
另外,例如在利用″1001001001″进行检索的情况下,在节点210a、211b、210f的链接路径中,不使用检索关键字序列的第1关键字的第3比特和第4比特,第1关键字的″100100″的第5比特为0,因此与利用″1000100100″进行检索的情况相同,到达节点210g。这样,采用与存储在配对节点树中的索引关键字的比特结构对应的第1鉴别位置和第2鉴别位置(鉴别比特位置)来进行分支。
图3是说明用于实施本发明的硬件结构例的图。
利用至少具有中央处理装置302以及缓存存储器303的数据处理装置301采用数据存储装置308来实施本发明的检索装置的检索处理以及数据维护。数据存储装置308可利用主存储装置305或外部存储装置306来实现,或者还可以采用经由通信装置307连接的配置于远方的装置,数据存储装置308具有:配置有配对节点树的数组309、对存储有在检索中搜索到的节点的数组元素的数组编号进行存储的搜索路径堆栈310以及索引关键字存储区域311。图2A的数组100是数组309的一例。另外,与图2B相同,索引关键字存储区域311以连续区域的方式进行了图示,但显然也可以是不连续的区域。此外,因为以在数组内配置配对节点树进行说明,所以虽然说明了在搜索路径堆栈310内存储对在检索中搜索到的节点进行了存储的数组元素的数组编号,但一般情况下,对存储有节点的存储区域的地址等表示节点位置的信息进行存储。
在图3的例示中,主存储装置305、外部存储装置306以及通信装置307利用一根总线304与数据处理装置301连接,但连接方法不限于此。另外,可以将主存储装置305作为数据处理装置301内的装置,或者还可以将搜索路径堆栈310实现为中央处理装置302内的硬件。或者,显然可以根据可使用的硬件环境、索引关键字集合的大小等来适当选择硬件结构,例如将数组309保持在外部存储装置306内,将搜索路径堆栈310保持在主存储装置305内等。
另外,虽未特别图示,但显然为了在之后的处理中使用在处理中途获得的各种值而采用与各个处理对应的临时存储区域。在以下的说明中,与先前所述的第1鉴别位置等的情况相同,有时利用临时存储区域的名字来称呼临时存储区域所存储或设定的值。
如图3所示,由存储有配对节点树的节点的数组元素构成的数组309和索引关键字存储区域311是不同的区域。因此,与在存储有叶节点的数组元素中包含索引关键字的情况相比,在图3的结构中,通常1个数组元素所需的存储区域的量较少。即,通过从存储配对节点树的数组309中分离索引关键字存储区域311,由此可以在对缓存存储器303读入配对节点树的过程中,增加每个缓存块所存储的节点数。由此,在后述的检索处理等中,缓存未命中的频率减少,更高速地进行处理。
接着,依次详细说明本发明一实施方式的采用配对节点树的基本操作即检索、插入、删除。
图4是示出一实施方式的比特序列检索处理的流程图。
首先,在步骤S401a中,取得检索开始节点的数组编号。与所取得的数组编号对应的数组存储有构成配对节点树的任意节点。在之后说明的各种应用检索中进行检索开始节点的指定。
所取得的检索开始节点的数组编号被设定在未图示的检索开始节点设定区域内,该检索开始节点设定区域是先前所述的“为了在之后的处理中使用在处理中途获得的各种值而与各个处理对应的临时存储区域”之一。在以下的说明中,有时还改变“设定在未图示的检索开始节点设定区域”这样的表述,而记述为“获得检索开始节点的数组编号。”、“设定为检索开始节点”或者简述为“设定成检索开始节点”。
接着在步骤S401b中,之后对保存第1鉴别位置的值的临时存储区域即保存鉴别位置设定初始值。由于索引关键字开头关键字序列的第1鉴别位置设为0,因此在初始值中设定负值。
接着,在步骤S402中,在搜索路径堆栈中存储所取得的数组编号,在步骤S403中,读出与该数组编号对应的数组元素作为应参照的节点。然后,在步骤S404中,从所读出的节点中取出节点类别,在步骤S405中,判定节点类别是否是分支节点。
在步骤S405的判定中,所读出的节点是分支节点的情况下,进到步骤S406a。在步骤S406a中从节点取出第1鉴别位置,在下一步骤S406b中,判定在步骤S406a取出的第1鉴别位置是否与保存鉴别位置一致。
在第1鉴别位置与保存鉴别位置一致的情况下,转到步骤S406,在不一致的情况下进到步骤S406c,从检索关键字序列中取出在步骤S406a取出的第1鉴别位置所指的关键字,设定为检索关键字。
接着,在步骤S406d中对保存鉴别位置设定步骤S406a中取出的第1鉴别位置,进到步骤S406。
在步骤S406中,从在步骤S403读出的节点中取出第2鉴别位置(鉴别比特位置),进而在步骤S407中,从检索关键字中取出与所取出的鉴别比特位置对应的比特值。然后,在步骤S408中,从在步骤S403读出的节点中取出代表节点编号,在步骤S409中,将从检索关键字取出的比特值与代表节点编号相加,作为新的数组编号返回步骤S402。
以后,反复从步骤S402到步骤S409的处理,直到在步骤S405的判定中判定为叶节点而进到步骤S410a为止。在步骤S410a中,从叶节点取出参照指针,结束检索。
接着,利用图5~图8A来说明配对节点树中的节点插入处理。图5~图7是说明通常的插入处理的图,图8A是说明根节点的插入处理的图。由于通过根节点的插入处理和通常的插入处理生成配对节点树,所以节点插入处理的说明也是配对节点树的生成处理的说明。
图5是示出作为插入处理前级的检索处理的处理流程的图,相当于在图4所示的检索处理中,将插入关键字序列作为检索关键字序列、将检索开始节点作为根节点。
首先,在步骤S501a中对检索开始节点设定根节点的数组编号,在步骤S501b中把插入关键字序列设定为检索关键字序列。作为插入处理的前提条件,预先取得索引关键字存储区域的指针,插入关键字序列存储在该存储区域内。插入关键字序列末尾的关键字在全部索引关键字中取唯一的值。
接着,在步骤S510a中,利用检索关键字序列从检索开始节点起进行图4所示的检索处理,取得参照指针,在步骤S510b中取出该参照指针指向的关键字序列,设定为比较关键字序列。
接着在步骤S510c中,依次比较插入关键字序列的关键字和比较关键字序列的关键字。比较的结果是,输出表示比较关键字序列与插入关键字序列是否完全一致的信息。在不完全一致的情况下,将第一个不一致关键字的位置设定为第1鉴别位置,并且将插入关键字序列中的该第1鉴别位置的关键字设定为插入关键字,将比较关键字序列中的该第1鉴别位置的关键字设定为比较关键字。步骤S510c的详细在后文中参照图8B进行说明。
接着在步骤S511a中,作为步骤S510c的比较结果,判定插入关键字序列的关键字与比较关键字序列的关键字是否完全相等,如果相等则插入关键字序列已经存在于配对节点树的参照指针所指向的存储区域内,所以插入失败,处理结束。如果不相等则进到下一处理、图6的步骤S512以下的处理。
图6是说明准备用于待插入节点对的数组元素的处理的处理流程图。
在步骤S512中,从数组中求出空的节点对,取得在该节点对中应成为代表节点的数组元素的数组编号。
进到步骤S513a,比较在步骤S510c中获得的插入关键字和比较关键字的大小,在插入关键字大时获得值1的布尔值,在插入关键字小时获得值0的布尔值。
进到步骤S514,将在步骤S512获得的代表节点的数组编号与在步骤S513获得的布尔值相加,得到相加后的数组编号。
进到步骤S515,将在步骤S512获得的代表节点的数组编号与在步骤S513获得的布尔值的逻辑非值相加,得到相加后的数组编号。
在步骤S514取得的数组编号是存储具有下述参照指针的叶节点的数组元素的数组编号,该参照指针指向存储插入关键字序列作为索引关键字的存储区域,在步骤S515取得的数组编号是存储与该叶节点构成节点对的节点的数组元素的编号。
即,根据在前级检索处理中获得的叶节点所对应的索引关键字与插入关键字序列的大小,来确定在待插入节点对中的哪个节点中存储保持指向插入关键字序列的参照指针的叶节点。
例如在图2B的配对节点树中插入插入关键字序列″0110111001″的情况下,检索结果的索引关键字为与节点211d对应的关键字序列″0110101000″。当依次比较插入关键字序列和检索结果的关键字序列的关键字时,第1关键字不一致,通过第1关键字彼此间的大小比较来求出布尔值,在当前的例子中插入关键字序列的第1关键字大,所以获得布尔值1,在待插入节点对的代表节点的数组编号与1相加所得的数组元素中,存储保持指向插入关键字序列的参照指针的叶节点。另一方面,指向索引关键字″0110101000″的参照指针281d存储在将利用大小比较获得的布尔值逻辑反转后得到的值与代表节点的数组编号相加所得的数组编号的数组元素中。
此时,因为检索结果的索引关键字的第1关键字291d″011010″与插入关键字序列的第1关键字″011011″在第5比特不同,所以节点211d成为鉴别比特位置设为5、代表节点编号设为待插入节点对的代表节点的数组编号的分支节点。
另外,要在图2B的配对节点树内插入″0110011010″的情况下,检索结果也为与节点211d对应的″0110101000″的值的索引关键字。在该情况下插入关键字序列与检索结果的关键字序列的第1关键字也不一致,在该情况下,因为插入关键字序列的第1关键字小所以获得布尔值0,在待插入节点对的代表节点的数组编号与0相加所得的数组元素中,存储保持指向插入关键字序列的参照指针的叶节点。而且,因为索引关键字的第1关键字291d″011010″与插入关键字序列的第1关键字″011001″在第4比特不同,所以节点211d成为鉴别比特位置设为4、代表节点编号设为待插入节点对的代表节点的数组编号的分支节点。
接下去,在步骤S516中,例如利用逻辑“异或”对在步骤S510c获得的插入关键字与比较关键字进行比特序列比较,获得差分比特序列。
进到步骤S517,从在步骤S516获得的差分比特序列中,获得从上位第0比特起观察到的第一个不一致比特的比特位置(以下,有时称为差分比特位置。)。对于处理,例如可在具有优先编码器的CPU中,向该优先编码器输入差分比特序列,获得不一致的比特位置。另外,也可以软件的方式进行与优先编码器等同的处理,获得第一个不一致比特的比特位置。
在步骤S517之后,进行图7所示的步骤S518以下的处理。
图7是示出在图6中准备的数组元素内存储节点并且求出其插入位置、变更现有节点的内容来完成插入处理的处理流程的图。
步骤S518~步骤S523的处理是求出待插入节点对在配对节点树上的位置的处理,步骤S524以下的处理是在各节点中设定数据来完成插入处理的处理。
在步骤S518中,判定搜索路径堆栈的堆栈指针是否指向根节点的数组编号。如果指向则转到步骤S524,如果没有指向则进到步骤S519。
在步骤S519中,使搜索路径堆栈的堆栈指针后退1,取出堆栈在此的数组编号。
进到步骤S520,从数组中读出在步骤S519取出的数组编号的数组元素作为节点。
进到步骤S520a,从在步骤S520读出的节点中取出第1鉴别位置,在步骤S520b中,对在步骤S520a取出的第1鉴别位置″A″与在步骤S510c取得的第1鉴别位置″B″进行大小比较。
如果A>B,则返回步骤S518,如果A=B,则进到步骤S521,如果A<B,则进到步骤S523。
在步骤S521中,从在步骤S520读出的节点中取出第2鉴别位置(鉴别比特位置),进到步骤S522,判定在步骤S521取出的鉴别比特位置是否是比在步骤S517取得的差分比特位置上位的位置关系。这里所谓上位的位置关系是指比特序列的更左侧的位置、即比特位置的值较小的位置。
如果步骤S522的判定结果是否定的,则返回步骤S518进行反复,直到在步骤S518中的判定为肯定、或者在步骤S520b中判定为A<B、或者在步骤S522中的判定为肯定为止。当在步骤S522的判定为肯定时,进到步骤S523。
在步骤S523中,搜索路径堆栈的堆栈指针前进1,转到步骤S524以下的处理。
关于在上述步骤S518~步骤S523中说明的处理,为了确定待插入节点对的插入位置,调查数组编号存储在搜索路径堆栈中的分支节点的第1鉴别位置(A)与在步骤S510c取得的第1鉴别位置(B)之间的相对位置关系,如果A<B则将分支节点的链接目的地设为待插入节点对的插入位置;如果A=B,针对利用待插入索引关键字(插入关键字)与通过检索取得的索引关键字(比较关键字)之间的比特序列比较成为不同比特值的差分比特位置,调查该差分比特位置与数组编号存储在搜索路径堆栈中的分支节点的鉴别比特位置之间的相对位置关系,将鉴别比特位置为上位的分支节点的下一分支节点的链接目的地作为待插入节点对的插入位置。
另外,在对搜索路径堆栈进行反向搜索而到达根节点时,根节点的链接目的地成为插入位置。
例如在图2B的配对节点树中插入″1110000000″时,检索结果的索引关键字成为对应于节点210h的″1011000001″。在此例的情况下,第1鉴别位置(A)是1(第1鉴别位置241f)、第1鉴别位置(B)是0,所以A>B,当链接路径返回节点211b时,第1鉴别位置241b是0,所以A=B。在当前例的情况下,插入关键字″111000″与比较关键字″101100″的差分比特位置是1,鉴别比特位置231b是2,因此进一步追溯到根节点210a。
根节点210a的鉴别比特位置230a是0,比差分比特位置1上位,所以堆栈指针指向220a+1。因此,插入位置是节点211b的链接目的地。当插入节点对时,如后所述,分支节点211b的鉴别比特位置成为差分比特位置的值1。
此外,A<B例如是对第1关键字不重复的索引关键字插入包含重复的第1关键字的插入关键字序列的情况,在图2B的例子中,当赋予插入关键字序列″1000101001″时,第1鉴别位置(A)是第1鉴别位置240f,值是0,第1鉴别位置(B)的值是1,A<B成立,节点210g成为插入位置,为待插入节点对的紧接上位的分支节点。
接下来,说明步骤S524以下对各节点设定数据来完成插入处理的处理。
在步骤S524中从搜索路径堆栈内取出堆栈指针所指向的数组编号。
进到步骤S525d,针对在步骤S514取得的数组编号所指向的数组元素,对节点类别写入叶节点,对参照指针写入插入关键字序列的指针。
进到步骤S526,从数组中读出在步骤S524取得的数组编号的数组元素。
接着在步骤S527中,在步骤S515取得的数组编号的数组元素中写入在步骤S526读出的内容。
最后在步骤S528a中,针对在步骤S524取得的数组编号所指向的数组元素,对节点类别写入分支,对第1鉴别位置写入在步骤S510c取得的第1鉴别位置,对第2鉴别位置写入在步骤S517取得的比特位置,对代表节点编号写入在步骤S512取得的数组编号,结束处理。
在将插入关键字序列″1110000000″插入到上述图2B的配对节点树的例子中,在步骤S525d中,将取得的空节点对的节点[1]作为保持指向插入关键字序列″1110000000″的参照指针的叶节点,在步骤S527中,在节点[0]中写入节点211b的内容。然后,在步骤S528a中,在节点211b的节点类别中存储0,在第1鉴别位置中存储0,在鉴别比特位置中存储通过比特序列比较而获得的差分比特位置1,在代表节点编号中存储存储有所取得的节点对的代表节点的数组元素的数组编号。
图8A是说明本发明一实施方式的包含根节点插入处理的叶节点的插入处理整体的处理流程的图。
在步骤S551中,判定是否登记了要取得的配对节点树的根节点的数组编号。如果登记完毕,则进行采用图5~图7说明的通常插入处理。
如果步骤S551中的判定不是登记完毕,则开始全新的配对节点树的登记、生成。即使在该情况下,作为插入处理的前提条件,预先取得索引关键字的存储区域的指针,插入关键字序列存储在该存储区域内。
首先,在步骤S552中,从数组中求出空的节点对,取得该节点对中应成为代表节点的数组元素的数组编号。接着在步骤S553中,求出将在步骤S552取得的数组编号与0相加所得的数组编号。(实际上,等于在步骤S552取得的数组编号。)接着,在步骤S554d中,针对在步骤S553取得的数组编号的数组元素、即与待插入的根节点对应的数组元素,对节点类别写入叶节点,对参照指针写入插入关键字序列的指针。然后,在步骤S556中,登记在步骤S553取得的根节点的数组编号,结束处理。
如先前所述,显然在具有索引关键字集合时,通过从该集合中依次取出索引关键字,反复图8A以及图5~图7的处理,由此可以构建与索引关键字集合对应的本发明的配对节点树。
接着,参照图8B说明在先前所述的图5所示的步骤S510c中执行的本发明一实施方式的关键字序列比较处理的处理流程。
如图所示,在步骤S101中,对鉴别位置设定值″0″作为初始值。
在步骤S102中,判定序列中的所有关键字是否处理完毕,如果处理完毕则输出完全一致的信息,结束处理,如果没有处理完毕则进到步骤S103。
在步骤S103中,从插入关键字序列中取出鉴别位置所指向的关键字,设定为插入关键字。
进到步骤S104,从在图5所示的步骤S510b设定的比较关键字序列中取出鉴别位置所指向的关键字,设定为比较关键字。
接着进到步骤S105,判定插入关键字与比较关键字是否一致。如果一致则在步骤S106中更新设定为鉴别位置的值,返回步骤S102,如果不一致,则转入步骤S107将鉴别位置设定为第1鉴别位置,并且输出非完全一致,结束处理。
接下来,参照图9、图10,说明本发明一实施方式的从配对节点树中删除与特定索引关键字对应的叶节点的处理流程。
图9是示出作为删除处理前级的检索处理的处理流程的图,相当于在图4所示的检索处理中,将删除关键字序列作为检索关键字序列、将检索开始节点作为根节点。
首先,在步骤S901a中把根节点的数组编号设定为检索开始节点,在步骤S901b中把删除关键字序列设定为检索关键字序列。
接着,在步骤S910a中,利用检索关键字序列从检索开始节点起进行图4所示的检索处理,取得参照指针,在步骤S910b中取出该参照指针所指向的关键字序列,设定为比较关键字序列。
接着在步骤S910c中,设定删除关键字序列末尾的关键字作为删除关键字,在步骤S910d中,设定比较关键字序列末尾的关键字作为索引关键字。
在步骤S911中比较在步骤S910c设定的删除关键字和在步骤S910d设定的索引关键字,如果不相等,则在配对节点树中不存在要删除的索引关键字,因此删除失败,处理结束。如果相等则进到下一处理即图10的步骤S912以下的处理。此外,之所以比较上述关键字序列中末尾关键字是因为,末尾关键字是不重复的唯一关键字。
图10是说明删除处理后级的处理流程的图。
首先,在步骤S912中判定在搜索路径堆栈内是否存储有2个以上的数组编号。所谓没有存储2个以上的数组编号换言之就是仅有1个,该数组编号是存储有根节点的数组元素的编号。在该情况下转至步骤S918,删除在步骤S901a取得的根节点的数组编号所涉及的节点对,删除在步骤S919中登记的根节点的数组编号,结束处理。
在步骤S912中判定为在搜索路径堆栈内存储有2个以上的数组编号时,进到步骤S913a,将在步骤S910a中执行的图4所示的检索处理的步骤S408中取得的代表节点编号,加上同样在步骤S910a中执行的图4所示的检索处理的步骤S407中取得的比特值被反转后的值,得到相加所得的数组编号。该处理求出配置有与删除对象的叶节点成对的节点的数组编号。
接着在步骤S914中,读出在步骤S913取得的数组编号的数组元素的内容,在步骤S915中使搜索路径堆栈的堆栈指针后退1来取出数组编号。
接着进到步骤S916,将在步骤S914读出的数组元素的内容重写到在步骤S915取得的数组编号的数组元素中。该处理将作为链接到删除对象的叶节点的链接源的分支节点置换为与上述叶节点成对的节点。
接着在步骤S917中,删除在步骤S910a中执行的图4所示的检索处理的步骤S408中取得的代表节点编号所涉及的节点对,结束处理。
图11A以及图11B是说明在图2B所例示的配对节点树中将″0110101000″作为删除关键字序列进行删除处理的例子的图。
图11A所示的配对节点树中,对节点对201f以下的节点省略了叙述。删除关键字序列″0110101000″是由第1关键字″011010″和第2关键字″1000″构成的关键字序列,存储在作为临时存储区域的删除关键字270内。
在搜索路径堆栈310中存储数组编号,其堆栈指针指向数组编号221c+1。在图中用粗框包围的节点是在检索处理中搜索到的节点,在搜索路径堆栈310中堆积有其数组编号为根节点210a的编号到叶节点211d的编号。
在基于删除关键字序列″0110101000″的检索处理中,首先最先取得根节点210a的数组编号220,将其存储在搜索路径堆栈310内。因为根节点210a的第1鉴别位置240a是0,所以取出删除关键字序列的第1关键字″011010″设定为检索关键字,鉴别比特位置230a是0、检索关键字的比特位置0的比特值是0,所以在搜索路径堆栈310中存储将代表节点编号220a与比特值0相加所得的数组编号220a。
接着,读出数组编号220a所指向的节点210b,判定为分支节点。因为第1鉴别位置240b是0与第1鉴别位置240a没有变化,所以从先前设定的检索关键字中取得与鉴别比特位置230b的值1对应的该比特位置的比特值1,将该比特值1与代表节点编号220b相加而获得数组编号220b+1,将该数组编号220b+1存储在搜索路径堆栈310内。
接着,读出节点211c,第1鉴别位置241c是1更新了1个,因此将删除关键字序列的第2关键字″1000″设定为检索关键字。因为鉴别比特位置231c是0,检索关键字的比特位置0的比特值是1,所以如图所示在搜索路径堆栈310内存储代表节点编号221c与1相加所得的数组编号221c+1。
在数组编号为221c+1的数组元素内所存储的节点211d的节点类别261d是1,表示为叶节点。与该叶节点对应的索引关键字(关键字序列291d、291d′)存储在由参照指针281d示出的存储区域内。该存储区域是索引关键字存储区域311的一部分。因此,当取出参照指针281d所参照的索引关键字的末尾关键字即第2关键字291d′时,其值是″1000″,与存储在删除关键字270内的第2关键字一致。
在图11A所示的状态下,读出与删除对象的节点211d成对的节点210d的内容,将该内容写入到使搜索路径堆栈310的堆栈指针后退1时所存储的数组编号220b+1的数组元素(节点211c)中。然后删除节点对201d。删除了节点对的数组元素为空,可再次利用。
图11B所示的配对节点树是删除处理结束后的树。在节点211c的节点类别261c、第1鉴别位置241c、鉴别比特位置231c、代表节点编号221c中,如括弧所示,按原样存储有存储在节点210d中的值。另外,搜索路径堆栈310的堆栈指针指向数组编号220b+1。
接着,参照图12A以及图12B来说明插入处理的具体例。
如图12A所示的是具有参照比特序列″01000001″、″00010010″、″00000011″作为索引关键字的参照指针1281b、1281c、1280c的配对节点树。
在参照指针1281b所指向的存储区域中,存储有由第1关键字1291b″0100″和第2关键字1291b′″0001″构成的关键字序列。同样,在参照指针1281c指向的存储区域中,存储有由第1关键字1291c″0001″和第2关键字1291c′″0010″构成的关键字序列,在参照指针1280c指向的存储区域中存储有由第1关键字1290c″0000″和第2关键字1290c′″0011″构成的关键字序列。
在图示的例子中,接下来要插入的插入关键字序列是″00000100″。如先前所述,前提是:取得索引关键字存储区域的指针1281d,将存储在指针1281d所指向的区域的序列作为插入关键字序列,插入关键字序列的末尾关键字即第2关键字″0100″取在所有索引关键字中唯一的值。
图示的树由节点对1201a、1201b、1201c构成。
节点对1201a的代表节点是根节点1210a,在第1鉴别位置上保持0,在鉴别比特位置上保持1。节点对1201a下位的节点对1201b的代表节点1210b是分支节点,在第1鉴别位置上保持0,在鉴别比特位置上保持3,与代表节点1210b成对的节点1211b是叶节点,保持指向关键字序列1291b、1291b′的参照指针1281b。作为分支节点的节点1210b链接到节点对1201c。
构成节点对1201c的节点1210c和1211c都是叶节点,分别存储指向关键字序列1290c、1290c′的参照指针1280c和指向关键字序列1291c、1291c′的参照指针1281c。
插入关键字序列的第1关键字1291d与参照指针1280c指向的存储区域所存储的关键字序列的第1关键字重复。因此在图示的例子的情况下,当利用插入关键字序列进行检索时,到达存储有参照指针1280c的叶节点1210c,设定第2关键字1290c′作为比较关键字,设插入关键字序列的第2关键字1291d′作为插入关键字,进行大小关系的判定和比特序列比较。这样一来,插入关键字大于比较关键字,第一个不一致比特的位置为1。
图12B是示出插入了插入关键字序列″00000100″的配对节点树的图。新的节点对1201d被插入到节点对1201c的下位。节点对1201d的节点[1]1211d生成为包含插入关键字序列的指针作为参照指针1281d叶节点,在节点[0]1210d中写入如图12A所示的节点1210c的内容。并且,在图12B所示的分支节点1210c的第1鉴别位置中存储有表示是第2关键字的1,在第2鉴别位置中存储有作为插入关键字和比较关键字的第一个不一致比特的位置的1,在代表节点编号中存储有配置了节点对1201d的代表节点1210d的数组元素的数组编号。
以上,对用于实施本发明的优选方式进行了详细说明,但本发明的实施方式不限于此,可进行各种变形,这对本领域技术人员而言是显而易见的。例如对于叶节点,可取代表示存储有索引关键字的存储区域的位置的信息,而包含索引关键字本身,这对本领域技术人员而言是显而易见的。另外,虽然将识别检索关键字序列中的关键字位置的第1鉴别位置以从左起0、1、2、...这样的方式设为与关键字的排列顺序相应的关键字的位置编号,但不限于此,例如可以通过设检索关键字序列整体的离开开头比特的偏移值、或者交替使用0和1来表示关键字位置切换的方式,由此识别关键字的位置,这对本领域技术人员而言是显而易见的。
另外可知,执行本发明的比特序列检索方法的装置可通过存储配对节点树的存储单元和使计算机执行图4所示的处理的程序而构建在计算机上。
此外可知,可通过使计算机执行图5~图7、图8A、图8B所示的插入处理及其等同物的程序,来实现本发明的插入方法,还可通过使计算机执行图9以及图10所示的删除处理及其等同物的程序,来实现本发明的删除方法。并且,可利用这些程序在计算机上实现分支节点与叶节点的识别单元、根据分支节点的鉴别比特位置来链接到链接目的地的节点对的某一方的单元等。
因此,本发明的实施方式包含上述程序以及存储有程序的计算机可读存储介质。此外,在本发明的实施方式还包含本发明的配对节点树的数据结构。
通过采用以上详细说明的作为本发明提供的新数据结构的配对节点树,可对重复关键字进行处理,并且能够更高速地检索比特序列数据。而且还能够容易地执行比特序列数据的追加删除。
Claims (12)
1.一种使用配对节点树的比特序列检索方法,该配对节点树是用于比特序列检索的树,由根节点、以及配置在相邻存储区域中的分支节点和叶节点、或者分支节点之间或叶节点之间的节点对构成,
所述根节点是表示树的起点的节点,当该树的节点为一个时所述根节点是所述叶节点,当树的节点为两个以上时所述根节点是所述分支节点,
所述分支节点包含第一位置信息,该第一位置信息表示作为链接目的地节点对中的一个节点的代表节点的位置,所述叶节点包含第二位置信息,该第二位置信息表示存储有由检索对象比特序列构成的索引关键字的存储区域的位置,
该比特序列检索方法的特征在于,
所述索引关键字是一个以上的关键字的序列,该关键字序列的末尾关键字是不重复的唯一关键字,所述分支节点还包含第1鉴别位置和第2鉴别位置,该第1鉴别位置识别进行比特序列检索的检索关键字序列中的关键字的位置,该第2鉴别位置是该关键字的鉴别比特位置,
将所述配对节点树的任意节点作为检索开始节点,依次反复下述动作:在所述分支节点中,根据所述检索关键字序列中的、由该分支节点所包含的第1鉴别位置所识别的位置的关键字的所述鉴别比特位置的比特值,来链接到链接目的地节点对中的代表节点或配置在与该代表节点相邻的存储区域内的节点,直至到达所述叶节点为止,由此将存储在所述叶节点所包含的所述第二位置信息所示的存储区域内的索引关键字作为检索结果关键字序列,该检索结果关键字序列是所述配对节点树的以所述检索开始节点为根节点的任意部分树的、基于所述检索关键字序列的检索结果。
2.根据权利要求1所述的比特序列检索方法,其特征在于,
所述配对节点树存储在数组中,所述第一位置信息是所述数组的存储有与该第一位置信息对应的所述代表节点的数组元素的数组编号。
3.根据权利要求2所述的比特序列检索方法,其特征在于,
在堆栈内依次保持存储有所述检索开始节点的数组元素的数组编号、以及存储有从所述检索开始节点到所述叶节点的链接目的地节点的数组元素的数组编号。
4.一种叶节点插入方法,该叶节点插入方法对在权利要求1所述的比特序列检索方法中使用的配对节点树,插入包含表示存储有新的索引关键字的存储区域的位置的所述第二位置信息的叶节点,其特征在于,该叶节点插入方法包含以下步骤:
检索结果关键字序列取得步骤,将所述新的索引关键字作为所述检索关键字序列,将所述配对节点树的根节点作为检索开始节点,在存储从根节点到叶节点的链接路径的同时,利用权利要求1所述的比特序列检索方法来取得所述检索结果关键字序列;
第1鉴别位置取得步骤,从开头关键字起依次比较所述检索关键字序列与所述检索结果关键字序列的关键字,取得第一个成为不同值的关键字位置;
比较步骤,在所述检索关键字序列与所述检索结果关键字序列的、位于在所述第1鉴别位置取得步骤中取得的关键字位置的关键字之间,进行大小比较和比特序列比较;
插入位置确定步骤,根据所述链接路径上的分支节点的第1鉴别位置与在所述第1鉴别位置取得步骤中取得的所述关键字位置之间的相对位置关系、以及在所述比较步骤的比特序列比较中成为不同比特值的第一个比特位置与所述链接路径上的分支节点的第2鉴别位置之间的相对位置关系,来确定由待插入的所述叶节点和另一个节点构成的节点对的插入位置;
节点位置确定步骤,根据所述比较步骤中的所述大小比较的结果,来确定将待插入的所述叶节点设为待插入的所述节点对中的哪个节点;以及
叶节点生成步骤,将表示存储所述新的索引关键字的存储区域的位置的信息作为所述第二位置信息,存储在所述叶节点中。
5.根据权利要求4所述的叶节点插入方法,其特征在于,
所述配对节点树存储在数组中,所述第一位置信息是所述数组的存储有与该第一位置信息对应的所述代表节点的数组元素的数组编号。
6.根据权利要求5所述的叶节点插入方法,其特征在于,
在堆栈内依次保持存储有所述根节点的数组元素的数组编号以及存储有从所述根节点到所述叶节点的链接目的地节点的数组元素的数组编号。
7.一种叶节点删除方法,该叶节点删除方法从在权利要求1所述的比特序列检索方法中使用的配对节点树中,删除包含表示存储有所指定的所述索引关键字的存储区域的位置的所述第二位置信息的叶节点,
该叶节点删除方法的特征在于,
将所述指定的索引关键字作为检索关键字序列,将所述配对节点树的根节点作为检索开始节点,利用权利要求1所述的比特序列检索方法来取得所述检索结果关键字序列,
针对包含表示存储所述检索结果关键字序列的存储区域的位置的信息作为所述第二位置信息的叶节点,将与该叶节点成对的另一个节点存储到该叶节点的链接源的分支节点中,由此删除所述叶节点。
8.根据权利要求7所述的叶节点删除方法,其特征在于,
所述配对节点树存储在数组中,所述第一位置信息是所述数组的存储有与该第一位置信息对应的所述代表节点的数组元素的数组编号。
9.根据权利要求8所述的叶节点删除方法,其特征在于,
在堆栈内依次保持存储有所述根节点的数组元素的数组编号以及存储有从所述根节点到所述叶节点的链接目的地节点的数组元素的数组编号。
10.一种使用配对节点树的比特序列检索装置,该配对节点树是用于比特序列检索的树,由根节点、以及配置在相邻存储区域中的分支节点和叶节点、或者分支节点之间或叶节点之间的节点对构成,
所述根节点是表示树的起点的节点,当该树的节点为一个时所述根节点是所述叶节点,当树的节点为两个以上时所述根节点是所述分支节点,
所述分支节点包含第一位置信息,该第一位置信息表示作为链接目的地节点对中的一个节点的代表节点的位置,所述叶节点包含第二位置信息,该第二位置信息表示存储有由检索对象比特序列构成的索引关键字的存储区域的位置,
该比特序列检索装置的特征在于,
所述索引关键字是一个以上的关键字的序列,该关键字序列的末尾关键字是唯一关键字,所述分支节点还包含第1鉴别位置和第2鉴别位置,该第1鉴别位置识别进行比特序列检索的检索关键字序列中的关键字的位置,该第2鉴别位置是该关键字的鉴别比特位置,
将所述配对节点树的任意节点作为检索开始节点,依次反复下述动作:在所述分支节点中,根据所述检索关键字序列中的、由该分支节点所包含的第1鉴别位置所识别的位置的关键字的在所述鉴别比特位置的比特值,来链接到链接目的地节点对中的代表节点或配置在与该代表节点相邻的存储区域内的节点,直至到达所述叶节点为止,由此将存储在所述叶节点所包含的所述第二位置信息所示的存储区域内的索引关键字作为检索结果关键字序列,该检索结果关键字序列是所述配对节点树的以所述检索开始节点为根节点的任意部分树的、基于所述检索关键字序列的检索结果。
11.根据权利要求10所述的比特序列检索装置,其特征在于,
该比特序列检索装置具有数组,所述配对节点树存储在该数组中,所述第一位置信息是所述数组的存储有与该第一位置信息对应的所述代表节点的数组元素的数组编号。
12.根据权利要求11所述的比特序列检索装置,其特征在于,
该比特序列检索装置具有堆栈,在所述堆栈中依次保持存储有所述检索开始节点的数组元素的数组编号以及存储有从所述检索开始节点到所述叶节点的链接目的地节点的数组元素的数组编号。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008-007690 | 2008-01-17 | ||
JP2008007690A JP4567754B2 (ja) | 2008-01-17 | 2008-01-17 | ビット列検索装置、検索方法及びプログラム |
PCT/JP2008/003264 WO2009090697A1 (ja) | 2008-01-17 | 2008-11-11 | ビット列検索装置、検索方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101911068A CN101911068A (zh) | 2010-12-08 |
CN101911068B true CN101911068B (zh) | 2012-07-25 |
Family
ID=40885108
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200880124936.8A Expired - Fee Related CN101911068B (zh) | 2008-01-17 | 2008-11-11 | 比特序列检索装置、检索方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8195667B2 (zh) |
EP (1) | EP2249257B1 (zh) |
JP (1) | JP4567754B2 (zh) |
CN (1) | CN101911068B (zh) |
WO (1) | WO2009090697A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9400817B2 (en) * | 2013-12-31 | 2016-07-26 | Sybase, Inc. | In-place index repair |
JP5960863B1 (ja) * | 2015-03-11 | 2016-08-02 | エヌ・ティ・ティ・コミュニケーションズ株式会社 | 検索装置、検索方法、プログラム、及び記録媒体 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1152365A (zh) * | 1994-06-06 | 1997-06-18 | 诺基亚电信公司 | 一种存储和检索数据的方法和一种存储器配置 |
CN1271442A (zh) * | 1997-07-21 | 2000-10-25 | 艾利森电话股份有限公司 | 数据库结构 |
US20040193632A1 (en) * | 2003-03-27 | 2004-09-30 | Mccool Michael | Computer implemented compact 0-complete tree dynamic storage structure and method of processing stored data |
WO2008004335A1 (fr) * | 2006-07-07 | 2008-01-10 | S.Grants Co., Ltd. | dispositif de recherche de séquence de bits, procédé de recherche et programme |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH01239632A (ja) * | 1988-03-19 | 1989-09-25 | Hitachi Ltd | 情報検索方式 |
JPH05265821A (ja) * | 1992-03-17 | 1993-10-15 | Hitachi Ltd | データベースのインデックス管理方式 |
JP3184008B2 (ja) * | 1993-06-28 | 2001-07-09 | エヌイーシーソフト株式会社 | 索引ファイルの入出力方法 |
JP3622443B2 (ja) * | 1997-09-22 | 2005-02-23 | 日本電信電話株式会社 | T木インデックス構築方法及び装置及びt木インデックス構築プログラムを格納した記憶媒体 |
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 | 日本電気株式会社 | 情報検索方法及び装置 |
JP2006187827A (ja) | 2005-01-05 | 2006-07-20 | Toyo Tire & Rubber Co Ltd | 研磨パッド |
JP2006293619A (ja) | 2005-04-08 | 2006-10-26 | Toshiba Tec Corp | コンピュータ装置及びログ出力プログラム |
JP2007114915A (ja) | 2005-10-19 | 2007-05-10 | Kazumi Sonomoto | 自己診断チェックシステムを活用したユーザー側に設置されている通報装置からの情報送出による自動メンテチェックシステム。 |
JP4271227B2 (ja) | 2006-10-30 | 2009-06-03 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
US8150856B2 (en) * | 2006-07-07 | 2012-04-03 | S. Grants Co., Ltd. | Bit string searching apparatus, searching method, and program |
JP4439013B2 (ja) | 2007-04-25 | 2010-03-24 | 株式会社エスグランツ | ビット列検索方法及び検索プログラム |
-
2008
- 2008-01-17 JP JP2008007690A patent/JP4567754B2/ja not_active Expired - Fee Related
- 2008-11-11 WO PCT/JP2008/003264 patent/WO2009090697A1/ja active Application Filing
- 2008-11-11 EP EP08871045.4A patent/EP2249257B1/en not_active Not-in-force
- 2008-11-11 CN CN200880124936.8A patent/CN101911068B/zh not_active Expired - Fee Related
-
2010
- 2010-07-16 US US12/805,183 patent/US8195667B2/en not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1152365A (zh) * | 1994-06-06 | 1997-06-18 | 诺基亚电信公司 | 一种存储和检索数据的方法和一种存储器配置 |
CN1271442A (zh) * | 1997-07-21 | 2000-10-25 | 艾利森电话股份有限公司 | 数据库结构 |
US20040193632A1 (en) * | 2003-03-27 | 2004-09-30 | Mccool Michael | Computer implemented compact 0-complete tree dynamic storage structure and method of processing stored data |
WO2008004335A1 (fr) * | 2006-07-07 | 2008-01-10 | S.Grants Co., Ltd. | dispositif de recherche de séquence de bits, procédé de recherche et programme |
Also Published As
Publication number | Publication date |
---|---|
EP2249257A1 (en) | 2010-11-10 |
EP2249257B1 (en) | 2013-04-24 |
CN101911068A (zh) | 2010-12-08 |
JP4567754B2 (ja) | 2010-10-20 |
US20100287193A1 (en) | 2010-11-11 |
US8195667B2 (en) | 2012-06-05 |
WO2009090697A1 (ja) | 2009-07-23 |
JP2009169715A (ja) | 2009-07-30 |
EP2249257A4 (en) | 2011-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101484895B (zh) | 比特序列检索装置以及检索方法 | |
CN101911060B (zh) | 数据库的索引关键字更新方法 | |
CN101535993B (zh) | 比特序列检索装置及检索方法 | |
CN101657818B (zh) | 配对节点树保存/复原方法、最长一致/最短一致检索方法、比特序列检索方法以及存储介质 | |
JP4439013B2 (ja) | ビット列検索方法及び検索プログラム | |
CN101689204B (zh) | 比特序列检索方法以及程序 | |
CN101884043B (zh) | 比特序列合并排序装置、方法以及程序 | |
CN101589390B (zh) | 比特序列检索装置、检索方法 | |
JP4514771B2 (ja) | カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム | |
CN101911068B (zh) | 比特序列检索装置、检索方法 | |
JP4514810B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
WO2009122651A1 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP2011018296A (ja) | カップルドノードツリーのインデックスキー挿入/削除方法 | |
JP4813575B2 (ja) | ビット列検索装置 | |
WO2009093290A1 (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: 20120725 Termination date: 20141111 |
|
EXPY | Termination of patent right or utility model |