CN101884043B - 比特序列合并排序装置、方法以及程序 - Google Patents
比特序列合并排序装置、方法以及程序 Download PDFInfo
- Publication number
- CN101884043B CN101884043B CN200880119130XA CN200880119130A CN101884043B CN 101884043 B CN101884043 B CN 101884043B CN 200880119130X A CN200880119130X A CN 200880119130XA CN 200880119130 A CN200880119130 A CN 200880119130A CN 101884043 B CN101884043 B CN 101884043B
- Authority
- CN
- China
- Prior art keywords
- key word
- node
- array
- tree
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/22—Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
- G06F7/32—Merging, i.e. combining data contained in ordered sequence on at least two record carriers to produce a single carrier or set of carriers having all the original data in the ordered sequence merging methods in general
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
为了实现应用配对节点树的高速合并排序方法,从存储有由排序完毕的比特序列构成的关键字的多个排序完毕关键字存储区域中,分别取出最小关键字或最大关键字,并且附加对作为取出源的排序完毕关键字存储区域进行识别的处理源识别符,生成合并用配对节点树,反复执行配对节点树的基于最小值检索或最大值检索的关键字的向合并完毕关键字存储区域的写出和删除处理、以及从排序完毕关键字存储区域中取出关键字后的插入处理,由此实现合并排序。
Description
技术领域
本发明涉及比特序列合并排序装置和方法、以及使计算机执行该方法的程序。
背景技术
近年,社会的信息化不断发展,大规模的数据库在各处被利用起来。为了从这种大规模的数据库中检索记录,通常是将与存储有各记录的地址相对应的记录内的项目作为索引关键字来进行检索,检索出期望的记录。并且,全文检索中的字符串也可视为文档的索引关键字。
而且,由于这些索引关键字利用比特序列来表达,因而数据库的检索可归结于比特序列的检索。
另一方面,作为与数据库相关联的处理,如下述专利文献1以及下记专利文献2所述,进行数据库中的记录合并排序。该合并排序也归结于比特序列的合并排序。
基本的合并排序方法是将数据分割成2个对后进行排序,组合排序后的结果。即,分成前级处理和后级处理,该前级处理一边反复对排序对象数据的分割一边进行排序,来获得多个排序完毕的数据,该后级处理反复对排序完毕数据的合并,来进行排序对象数据整体的排序。
在专利文献2中,关于合并排序的后级处理公开了图1A所示的处理。
如图1A所示,例示了在区块1~区块N中存储有排序完毕的数据,区块1的最小值是13,区块2的最小值是8,其次大的数据是22。同样例示了区块3的最小值是53,区块4的最小值是24,区块N的最小值是9。
合并排序的后级处理是以上述区块1~区块N的存在为前提的,首先,生成基于各区块的最小值的数据列。在图1A的例示中生成了基于区 块1、区块2、区块3、区块4…区块N的最小值的数据列<13、8、53、24…9>。接着对该数据列进行排序,生成排序完毕的数据列<8、9、13、15…100>,输出最小值8。然后,从存储有该最小值8的区块2中取出下一数据22,求出将数据22插入到排序完毕的数据列的插入位置,然后插入数据22,输出排序完毕的数据列的下一最小值,通过反复上述步骤,来进行区块1~区块N所存储的数据的合并,完成数据整体的排序。
如上所述,在合并排序的后级处理中,需要求出将下一数据插入到排序完毕数据列的插入位置。为了求出该插入位置,将下一数据作为关键字与排序完毕数据列所包含的数据进行比较处理,伴随该比较处理的插入处理归结于将下一数据作为检索关键字的排序完毕数据列的检索处理、即比特序列的检索处理。
关于比特序列的检索处理方法,已知有各种方法。在这些方法之中,为了高速地进行比特序列的检索,一直以来对存储比特序列的数据结构进行了各种研究。作为这种研究之一,公知的是Patricia树这样的树结构。
图1B示出用于上述现有检索处理的Patricia树的一例。Patricia树的节点构成为包含索引关键字、检索关键字的检查比特位置、左右链接指针。虽未明示,但显然在节点中包含用于访问与索引关键字对应的记录的信息。
在图1B的例子中,保持索引关键字“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。
在图1B的例子中,形成这样的结构:随着从根节点1750a开始对树进行向下遍历,各节点的检查比特位置增大。
当使用某检索关键字进行检索时,从根节点开始依次检查由各节点所保持的检索关键字的检查比特位置,判定检查比特位置的比特值是1还是0,是1时搜索右链接,是0时搜索左链接。然后,当链接目的地节点的检查比特位置不大于链接源节点的检查比特位置时,即,链接目的地不是下方而是回到上方时(将图1B中虚线所示的该后退的链接称为反向链接),对链接目的地节点的索引关键字与检索关键字进行比较。能够保证在比较结果相同时检索成功,在比较结果不相同时检索失败。
如上所述,在使用Patricia树的检索处理中,有以下等优点:只通过必要比特的检查即可进行检索,以及关键字全体的比较只需一次,然而具有以下等缺点:由于必定有从各节点起的2个链接而使存储容量增大,由于反向链接的存在而使判定处理复杂化,由于从反向链接返回后才与索引关键字进行比较而造成的检索处理延迟以及追加删除等数据维护困难。
作为解决Patricia树的这些缺点的技术,例如有下述专利文献1所公 开的技术。在下述专利文献3所记载的Patricia树中,通过在连续的区域中存储下位的左右节点来削减指针的存储容量,并通过在各节点中设置表示下一链接是否是反向链接的比特来减轻反向链接的判定处理。
然而,在下述专利文献3所公开的技术中,由于1个节点必定占据索引关键字区域和指针区域,以将下位左右节点存储在连续区域的方式采用1个指针,因而对于例如图1B所示的作为Patricia树的最下段部分的左指针1740c、右指针1741h等部分,也需要分配与节点相同容量的存储区域,存储容量的削减效果不怎么好。并且,也没有改善反向链接引起的检索处理的延迟问题,很难进行追加删除等处理。
因此,当要执行超大量数据的排序合并时,会长时间占用大量的计算机资源,成本非常高。
专利文献1:日本特开2000-010761号公报
专利文献2:日本特开2006-163565号公报
专利文献3:日本特开2001-357070号公报
因此,本发明要解决的课题是应用高速的比特序列检索方法来提供高效的排序合并方法。
作为解决上述现有检索方法中的问题点的方案,本申请人在日本特愿2006-187827中提出了使用配对节点树的比特序列检索,该配对节点树是由根节点、和在相邻的存储区域中配置的分支节点和叶节点或者分支节点之间或叶节点之间的节点对构成的、用于比特序列检索的树,根节点是表示树的起点的节点,在该树的节点为一个时,根节点为叶节点,在树的节点为两个以上时,根节点为所述分支节点,所述分支节点包含进行比特序列检索的检索关键字的鉴别比特位置和表示链接目的地节点对中的一个节点的位置的位置信息,所述叶节点包含由检索对象比特序列构成的索引关键字。
在上述申请中,示出了根据给定的索引关键字的集合来生成配对节点树的方法、以及从配对节点树检索单个索引关键字的方法等使用配对节点树的基本检索方法。
并且,在比特序列的检索中,存在求出最小值、最大值,求出某个 范围的值等各种检索要求。因此,本申请人在日本特愿2006-293619中提出了求出配对节点树的任意部分树中包含的索引关键字的最大值/最小值的方法等。
此外,本申请人在日本特愿2007-114915中,提出了将索引关键字配置在与配对节点树不同的区域内,在叶节点中取代索引关键字而存储指向配置有索引关键字的区域的指针的配对节点树和使用该配对节点树的各种检索处理。
发明内容
本发明以实现应用该配对节点树的高速合并排序方法为目的。
本发明从存储有由以升序或降序方式排序完毕的比特序列构成的关键字的多个排序完毕关键字存储区域中,分别取出最小关键字或最大关键字作为索引关键字,并且附加对作为取出源的排序完毕关键字存储区域进行识别的处理源识别符,生成合并用配对节点树,反复执行配对节点树的基于最小值检索或最大值检索的关键字的向合并完毕关键字存储区域的写出和删除处理、以及从排序完毕关键字存储区域中取出关键字后的插入处理,由此实现合并排序。
根据本发明,通过将合并用关键字序列设为具有配对节点树的结构,能够使利用合并用关键字序列的最小值或最大值检索处理、关键字的删除和插入处理高速化,因此能够实现高速的合并排序方法。
附图说明
图1A是说明反复排序完毕数据的合并来进行整个排序对象数据的排序的合并排序的后级处理的图。
图1B是示出在现有检索中使用的Patricia树一例的图。
图2A是说明第1实施方式的存储在数组中的配对节点树的结构例的图。
图2B是概念性示出第1实施方式的配对节点树的树结构的图。
图3A是说明用于第1实施方式的硬件结构例的图。
图3B是说明第1实施方式的合并排序装置的功能区块结构例的图。
图4是示出第1实施方式的比特序列检索的基本动作的流程图。
图5A是示出第1实施方式的求出配对节点树所存储的索引关键字最小值的处理的流程图。
图5B是示出第1实施方式的求出配对节点树所存储的索引关键字最大值的处理的流程图。
图6A是示出第1实施方式的作为插入处理前级的检索处理的处理流程图。
图6B是说明第1实施方式的准备用于待插入节点对的数组元素的处理的处理流程图。
图6C是示出第1实施方式的求得插入节点对的位置、写入节点对的各节点的内容来完成插入处理的处理流程的图。
图7是说明第1实施方式的根节点插入处理的处理流程图。
图8A是示出第1实施方式的作为删除处理前级的检索处理的处理流程图。
图8B是说明第1实施方式的删除处理的后级处理流程的图。
图9是说明实施例1的概要的图。
图10A是说明实施例1的使用配对节点树的合并排序的初始处理的图。
图10B是说明实施例1的检索配对节点树的最小值来执行合并的处理的图。
图11A是利用配对节点树来说明图9所示的例子的第1图。
图11B是利用配对节点树来说明图9所示的例子的第2图。
图11C是利用配对节点树来说明图9所示的例子的第3图。
图11D是利用配对节点树来说明图9所示的例子的第4图。
图11E是利用配对节点树来说明图9所示的例子的第5图。
图11F是利用配对节点树来说明图9所示的例子的第6图。
图12A是说明实施例2的概要的图。
图12B是说明实施例3的概要的图。
图13A是说明实施例2和3的使用配对节点树的合并排序的初始处理的图。
图13B是说明实施例2的检索配对节点树的最小值来执行合并的处理的图。
图13C是说明实施例3的检索配对节点树的最小值来执行合并的处理的图。
图14A是说明实施例2和3的删除处理的图。
图14B是说明搜索路径堆栈的检索处理的图。
图15是说明第2实施方式的存储在数组中的配对节点树的结构例的图。
图16是概念性示出第2实施方式的配对节点树的树结构的图。
图17是说明用于第2实施方式的硬件结构例的图。
图18是示出第2实施方式的比特序列检索的基本动作的流程图。
图19A是示出第2实施方式的求出使用配对节点树的索引关键字最小值的处理的流程图。
图19B是示出第2实施方式的求出使用配对节点树的索引关键字最大值的处理的流程图。
图20A是示出第2实施方式的作为插入处理前级的检索处理的处理流程的图。
图20B是说明第2实施方式的准备用于待插入节点对的数组元素的处理的处理流程图。
图20C是示出第2实施方式的求得插入节点对的位置并写入节点对的各节点的内容以完成插入处理的处理流程的图。
图21是说明第2实施方式的根节点的插入处理的处理流程图。
图22A是示出第2实施方式的作为删除处理前级的检索处理的处理流程的图。
图22B是说明第2实施方式的删除处理后级的处理流程的图。
图23A是说明实施例4的使用配对节点树的合并排序的初始处理的图。
图23B是说明实施例4的通过配对节点树检索最小值来执行合并的处理流程的图。
图24A是说明实施例5和6的使用配对节点树的合并排序初始处理的图。
图24B是说明实施例5的通过配对节点树检索最小值来执行合并的处理流程的图。
图24C是说明实施例6的通过配对节点树检索最小值来执行合并的处理流程的图。
具体实施方式
首先,参照图2A以及图2B,对将第1实施方式的配对节点树存储在数组中的例子进行说明。分支节点保持的表示链接目的地位置的数据也可以作为存储装置的地址信息,不过通过使用由可存储分支节点或叶节点中的所占用区域的存储容量更大一方的数组元素构成的数组,可以用数组编号来表示节点位置,这样可以削减位置信息的信息量。
图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树描述的一样,当然在叶节点内包含有对与索引关键字对应的记录进行访问的信息,然而省略说明。
在节点[1]113中还具有处理源识别符119的区域,在图的例子中存储有″A″。与在先前申请即日本特愿2006-187827中提出的配对节点树的叶节点不同的是设有处理源识别符119的区域。在本实施方式中,在叶节点中设有处理源识别符119的区域,在该叶节点中作为索引关键字存储的比特序列用于识别从哪个排序完毕关键字的存储区域中取出而插入配对节点树。
另外,有时用节点[0]表示代表节点,用节点[1]表示与其成对的节点。此外,有时将存储在某个数组编号的数组元素中的节点称为该数组编号的节点,将存储有节点的数组元素的数组编号称为节点的数组编号。
省略了由存储在数组编号30和31的数组元素中的节点122和节点123构成的节点对121的内容。
分别赋予给存储有节点[0]112、节点[1]113、节点122以及节点123的数组元素的0或1表示在使用检索关键字进行检索的情况下链接到节点对的哪个节点。链接到将位于前级的分支节点的鉴别比特位置上的检索关键字的比特值0或1与代表节点编号相加所得到的数组编号的节点。
因此,通过将前级的分支节点的代表节点编号与检索关键字的鉴别比特位置的比特值相加,可求出存储有链接目的地节点的数组元素的数组编号。
另外,在上述例子中代表节点编号使用配置有节点对的数组编号中的小的一方,然而显然也可使用大的一方。
图2B是概念性地示出本实施方式的配对节点树的树结构的图。图示的6比特的索引关键字与图1B所例示的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”,处理源识别符270c中存储有“a”。另一方面,节点211c的节点类别261c是0,鉴别比特位置231c是2,在代表节点编号中存储有存储了节点对201d的代表节点210d的数组元素的数组编号221c。
节点210d的节点类别260d是0,鉴别比特位置230d是5,在代表节点编号中存储有存储了节点对201e的代表节点210e的数组元素的数组编号220d。与节点210d成对的节点211d的节点类别261d是1,在索引关键字251d中存储有“011010”,在处理源识别符271d中存储有″d″。
节点对201e的节点210e、211e的节点类别260e、261e都是1,表示双方都是叶节点,在各自的索引关键字250e、251e中存储有“010010”和“010011”作为索引关键字。另外,在各个处理源识别符270e、271e中存储有″c″、″b″。
在节点对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”。另外,在各个处理源识别符270g、271g中存储有″e″、″f″。
并且同样,节点对201h的代表节点即节点[0]210h和与其成对的节点[1]211h的节点类别260h、261h都是1,表示双方都是叶节点,在各自的索引关键字250h、251h中存储有“101011”和“101100”。另外,在各个处理源识别符270h、271h中存储有″g″、″h″。
以下,简单说明从上述的树中检索索引关键字“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”或“10110”作为检索关键字的情况下,也会到达节点211h,通过与索引关键字251h进行比较可知晓求得同一索引关键字的检索失败。
并且,例如在利用“100100”进行检索的情况下,在节点210a、211b、210f的链接路径上不使用检索关键字的第3比特和第4比特、并且由于“100100”的第5比特是0,所以与利用“100010”进行检索的情况同样,到达节点210g。这样,使用与存储在配对节点树中的索引关键字的比特结构对应的鉴别比特位置来进行分支。
图3A是说明用于本实施方式的硬件结构例的图。
本实施方式的合并排序是通过至少具有中央处理装置302以及缓存303的数据处理装置301使用数据存储装置308来实施的。数据存储装置308可以利用主存储装置305或外部存储装置306来实现,或者还可以使用经由通信装置307而连接的配置在远方的装置,该数据存储装置308具有:配置有配对节点树的合并数组309、存储在合并排序的前级处理中进行排序的关键字的多个排序完毕关键字数组312、存储合并完毕且全体排序完毕的关键字的合并完毕关键字数组313;以及用于保存如下数组元素的数组编号的搜索路径堆栈310,该数组元素存储有在检索中搜索到的节点。
在图3A的例示中,主存储装置305、外部存储装置306以及通信装置307通过一根总线304与数据处理装置301连接,不过连接方法不仅限于此。另外,还可以使主存储装置305在数据处理装置301内,或可以将搜索路径堆栈310实现为中央处理装置302内的硬件。或者,显然可以根据可使用的硬件环境、索引关键字集合的大小等,选择适当的硬件结构,例如,使排序完毕关键字数组312和合并完毕关键字数组313 保持在外部存储装置306内、使搜索路径堆栈310保持在主存储装置305内等。
并且,尽管未作特别图示,为了能在后面的处理中使用处理中途所获得的各种值,当然可以使用与各个处理对应的主存储装置305的临时存储区域。
图3B是说明第1实施方式的合并排序装置的功能区块结构例的图。如图所示,合并排序装置由下述构成:多个排序完毕关键字数组312,其存储有排序完毕关键字;合并树生成单元321,其从排序完毕关键字数组312中分别取出最小或最大关键字作为索引关键字,并且附加对作为取出源的排序完毕关键字数组312进行识别的处理源识别符,来生成合并用配对节点树(合并树),存储在合并数组(合并树存储单元)309中;合并单元323,其向合并完毕关键字数组313写出基于合并树的最小值或最大值检索的关键字,从合并树中删除所写出的关键字;以及下一关键字插入单元322,其从所写出的关键字的取出源的排序完毕关键字数组312中取出下一关键字插入到合并树。图中箭头表示各区块之间的访问或数据流向。
此外,在该图所示的例子中将存储数据的区域作为数组,但不需要将数据存储区域限于数组。
图4是示出使用了本实施方式的配对节点树的比特序列检索基本动作的流程图。相对于本申请人在上述日本特愿2006-293619中提出的流程图,追加了取出存储在叶节点中的处理源识别符的步骤。
首先,在步骤S401中取得检索开始节点的数组编号。与取得的数组编号对应的数组存储有构成配对节点树的任意节点。在后面说明的各种应用检索中对检索开始节点进行指定。
所取得的检索开始节点的数组编号被设定在未图示的检索开始节点设定区域中,该检索开始节点设定区域是先前所述的“为了在之后的处理中使用在处理中途取得的各种值而与各个处理对应的临时存储装置”之一。在以下的说明中,改变“设定在未图示的检索开始节点设定区域内”这样的表述,而记述成“取得检索开始节点的数组编号”、“设定为 检索开始节点”或简单记述成“设定成检索开始节点”。
接着,在步骤S402中,在搜索路径堆栈310中存储所取得的数组编号,在步骤S403中,读出与该数组编号对应的数组元素作为应参照的节点。然后,在步骤S404中,从读出的节点中取出节点类别,在步骤S405中,判定节点类别是否是分支节点。
在步骤S405的判定中,当读出的节点是分支节点时进入步骤S406,从节点中取出关于鉴别比特位置的信息,并且在步骤S407,从检索关键字中取出与取出的鉴别比特位置对应的比特值。然后,在步骤S408,从节点中取出代表节点编号,在步骤S409,将从检索关键字取出的比特值与代表节点编号相加,作为新的数组编号,然后返回步骤S402。
此后,重复从步骤S402到步骤S409的处理,直到在步骤S405的判定中判定为叶节点而进入步骤S410a为止。在步骤S410a中,从叶节点中取出索引关键字,在步骤S410b中,从叶节点中取出处理源识别符,结束处理。
如先前所述,在步骤S410a中不一定取出与检索关键字一致的索引关键字,这是因为,在配对节点树中不包含与检索关键字一致的索引关键字。即使在此情况下,在之后说明的各种处理中也有效利用在步骤S410a取出的索引关键字。
图5A是示出求得本实施方式的配对节点树所存储的索引关键字最小值的处理的流程图。相对于本申请人在上述日本特愿2006-293619中提出的示出求得配对节点树(包含部分树)的最小值的处理的流程图,追加了取出存储在叶节点中的处理源识别符的步骤。
[0070接下来说明的求出索引关键字最小值的处理相当于,根据如先前所述的索引关键字在树上的配置,在树上从检索开始节点到叶节点搜索节点[0]。
首先,从步骤S501的取得检索开始节点的数组编号到步骤S505的判定节点类别,分别与上述图4的步骤S401~步骤S405的处理相同。
当在步骤S505的节点类别判定中判定为节点类别是分支节点时,进到步骤S506,从节点中取出数组的代表节点编号,在步骤S507中,将所 取出的代表节点编号与值“0”相加,将其结果作为新的数组编号,返回步骤S502。然后,反复步骤S502~步骤S507的处理直到在步骤S505中判定为该节点是叶节点为止,在步骤S508a中,从叶节点中取出索引关键字,在步骤S508b中,从叶节点中取出处理源识别符,结束处理。
在上述图5A所示的处理中,为了搜索节点[0],而一律将代表节点编号与“0”相加。即,根据图5A的处理,链接目的地的节点必定是节点对中的节点[0],分支到存储有更小值的索引关键字的节点。由此,可以取出树结构如先前所述是顺序结构的配对节点树的最小索引关键字。
图5B是示出求得本实施方式的配对节点树所存储的索引关键字最大值的处理的流程图。相对于本申请人在上述日本特愿2006-293619中提出的示出求得配对节点树(包含部分树)最大值的处理的流程图,追加了取出存储在叶节点中的处理源识别符的步骤。
求出索引关键字最大值的处理相当于,针对树上节点中的节点[1],依次搜索到叶节点。以下,针对求出任意部分树的最大索引关键字的处理,与求出上述最小索引关键字的处理进行比较,并且以不同点为中心进行说明。
关于图5B所示的一连串处理中从步骤S511到步骤S516以及步骤S518a和步骤S518b,与图5A的从步骤501到步骤S506以及步骤S508a和步骤S508b一一对应,并执行同样的处理。与图5A的求出最小值的处理不同点是在步骤S517中将代表节点编号与值“1”相加。由此,始终链接代表节点编号所示的节点对中的节点[1],反复依次从步骤S512到步骤S517的处理直至叶节点,从而可以获得索引关键字的最大值。
如图4、图5A以及图5B所示,在检索索引关键字的基本动作及执行索引关键字的最小值/最大值的检索处理时,在搜索路径堆栈310中依次存储所参照的数组的数组编号。
此外,在参照上述图5A以及图5B的索引关键字的最小值/最大值的检索处理中,说明了配对节点树存储在数组内的情况,不过并非必须将配对节点树存储在数组内,显然也可以通过仅链接构成节点对的两个节点中的代表节点或配置在与代表节点相邻的存储区域内的节点直至叶节 点,来检索索引关键字的最小值/最大值。
接着,利用图6A~图6C、图7来说明本实施方式的配对节点树中的节点插入处理。图6A~图6C说明通常的插入处理,图7说明根节点的插入处理。因为通过根节点的插入处理和通常的插入处理来生成配对节点树,所以节点插入处理的说明也是配对节点树的生成处理说明。
与本申请人在上述日本特愿2006-187 827中提出的配对节点树的节点插入处理相比,不同点是在将插入关键字作为索引关键字的叶节点中存储用于对取出了插入关键字的排序完毕关键字数组进行识别的处理源识别符。
图6A是示出作为插入处理前级的检索处理的处理流程的图,相当于在图4所示的检索处理中将根节点作为检索开始节点,将插入关键字作为检索关键字。
在步骤S601中,在设定检索开始节点的数组编号的区域中设定根节点的数组编号,在步骤S602中,对检索关键字设定插入关键字。
接着,在步骤S610中,执行图4所示的检索处理获得检索结果的索引关键字,进到步骤S611。
在步骤S611中对插入关键字和在步骤S610获得的索引关键字进行比较,如果相等则插入关键字已经存在于配对节点树中,所以插入失败,结束处理。如果不相等,则进到接下来的处理即图6B的步骤S612以下的处理。
图6B是说明准备用于待插入节点对的数组元素的处理的处理流程图。
在步骤S612中,从数组中求出空节点对,取得该节点对中应成为代表节点的数组元素的数组编号。
进到步骤S613,对插入关键字和在步骤S610获得的索引关键字的大小进行比较,在插入关键字大时获得值1的布尔值,在插入关键字小时获得值0的布尔值。
进到步骤S614,获得在步骤S612取得的代表节点的数组编号与在步骤S613取得的布尔值相加所得的数组编号。
进到步骤S615,获得在步骤S612取得的代表节点的数组编号与在步骤S613取得的布尔值的逻辑非值相加所得的数组编号。
在步骤S614取得的数组编号是存储有将插入关键字作为索引关键字持有的叶节点的数组元素的数组编号,在步骤S615取得的数组编号是存储有与该叶节点成对的叶节点或分支节点的数组元素的编号。
即,根据在前级检索处理取得的存储在叶节点的索引关键字和插入关键字的大小,来决定在待插入节点对的哪个节点内存储保持插入关键字的叶节点。
例如,在图2B的配对节点树中插入″011011″的情况下,检索结果的索引关键字为存储在节点211d的″011010″。根据插入关键字″011011和存储在节点211d的索引关键字″011010″的大小比较来求出布尔值,在当前例中因为插入关键字较大所以获得布尔值1,在待插入节点对的代表节点编号与1相加所得的数组元素中存储保持插入关键字的叶节点。另一方面,索引关键字″011010″被存储在将利用大小比较而获得的布尔值进行逻辑反转后的值与代表节点编号相加后得到的数组编号的数组元素中。
此时,由于索引关键字“011010”与插入关键字“011011”在第5比特不同,因而节点211d成为如下的分支节点:鉴别比特位置为5、代表节点编号为所插入的节点对的代表节点的数组编号。
并且,在图2B的配对节点树中插入“011001”的情况下,检索结果的索引关键字成为存储在节点211d中的“011010”。在该情况下,由于插入关键字较小,因而得到布尔值0,在待插入节点对的代表节点编号加上0后得到的数组元素内存储保持插入关键字的叶节点。然后,由于索引关键字“011010”与插入关键字“011001”在第4比特不同,因而节点211d成为如下的分支节点:鉴别比特位置为4、代表节点编号为所插入的节点对的代表节点的数组编号。接着进入图6C的步骤S616以下的处理。
图6C是示出将节点存储在图6B中所准备的数组内并求出其插入位置、变更已有节点的内容来完成插入处理的处理流程的图。
步骤S616~步骤S623的处理是求出待插入节点对在配对节点树上 的位置的处理,步骤S624以下的处理是对各节点设定数据来完成插入处理的处理。
在步骤S616中,利用例如逻辑“异或”来进行插入关键字与步骤S610所得到的索引关键字之间的比特序列比较,得到差分比特序列。
进到步骤S617,根据步骤S616所得到的差分比特序列,得到从上位第0比特开始观察到的第一个不一致比特的比特位置。该处理可在例如具有优先编码器的CPU中向该优先编码器输入差分比特序列,来得到不一致的比特位置。并且,也能以软件方式进行与优先编码器同等的处理,得到第一个不一致比特的比特位置。
然后进到步骤S618,判定搜索路径堆栈的堆栈指针是否指向根节点的数组编号。如果指向根节点的数组编号则转到步骤S624,如果没有指向根节点的数组编号则进到步骤S619。
在步骤S619中,使搜索路径堆栈的堆栈指针后退1,取出堆栈在此的数组编号。
进到步骤S620,从数组中读出在步骤S619中取出的数组编号的数组元素,作为节点。
进到步骤S621,从在步骤S620中读出的节点中取出鉴别比特位置。
接着进入步骤S622,判定在步骤S621中取出的鉴别比特位置是否是比在步骤S617取得的比特位置上位的位置关系。这里所谓上位的位置关系是指比特序列的更左侧的位置,即比特位置的值较小的位置。
在步骤S622的判定结果是否定时,回到步骤S618,重复执行直到步骤S618的判定为肯定或者步骤S622的判定为肯定为止。当步骤S622的判定为肯定时,在步骤S623中使搜索路径堆栈的堆栈指针前进1,转到步骤S624以下的处理。
在上述步骤S616~步骤S623中所说明的处理是这样的处理:为了确定待插入节点对的插入位置,在待插入索引关键字与通过检索所取得的索引关键字之间进行比特序列比较,调查在比特序列比较中成为不同比特值的、开头的(最上位的)比特位置与存储在搜索路径堆栈中的分支节点的鉴别比特位置之间的相对位置关系,将鉴别比特位置为上位的 分支节点的下一分支节点的链接目的地设为待插入节点对的插入位置。
例如当在图2B的配对节点树中插入“111000”时,检索结果的索引关键字为存储在节点210h中的“101011”。通过插入关键字“111000”与存储在节点210h中的索引关键字“101011”之间的比特序列比较,得到成为不同比特值的最上位的比特位置1。依次对搜索路径堆栈进行反向搜索,直到所得到的比特位置1、与蓄积在搜索路径堆栈中的数组编号的数组元素所存储的分支节点的鉴别比特位置之间的位置关系成为鉴别比特位置在上位为止,此时到达根节点210a。在此,使搜索路径堆栈的指针前进1,得到节点211b的数组编号。把插入关键字“111000”插入到节点211b的链接目的地。
并且,即使对搜索路径堆栈进行反向搜索而到达根节点,与先前求出的在比特序列比较中成为不同比特值的、最上位的比特位置相比,根节点的鉴别比特位置也不是上位的比特位置是指以下的情况:在该配对节点树的索引关键字的上位比特中,与根节点的鉴别比特位置相比为上位的比特值全部相等。并且是指如下情况:在待插入的索引关键字中,一开始就存在与比根节点的鉴别比特位置上位的比特值不同的比特值。因此,待插入的节点对成为根节点的直接链接目的地,根节点的鉴别比特位置变成作为与已有索引关键字不同的值的插入关键字的最上位比特的位置。
下面,对步骤S624以下的在各节点中设定数据来完成插入处理的处理进行说明。
在步骤S624中,从搜索路径堆栈中取出堆栈指针所指的数组编号。
在步骤S625a中,在步骤S614得到的数组编号所指向的数组元素的节点类别中写入1(叶节点),在索引关键字中写入插入关键字。另外,存储对已取出插入关键字的排序完毕关键字数组进行识别的处理源识别符。
进到步骤S626,从数组中读出在步骤S624得到的数组编号的数组元素。
然后在步骤S627中,在步骤S615得到的数组编号的数组元素中写 入在步骤S626读出的内容。
最后在步骤S628中,在步骤S624得到的数组编号所指向的数组元素的节点类别中写入0(分支节点),在鉴别比特位置中写入在步骤S617得到的比特位置,在代表节点编号中写入步骤S612中得到的数组编号,结束处理。
在上述图2B的配对节点树中插入“111000”的例子中,在所取得的空节点对的节点[0]中写入节点211b的内容(步骤S627),将节点[1]设为保持插入关键字“111000”的叶节点(步骤S625)。然后,在节点211b的鉴别比特位置中存储通过比特序列比较而成为不同比特值的、最上位的比特位置1,将存储有所取得的节点对的代表节点的数组元素的数组编号存储在代表节点编号中(步骤S628)。
图7是说明新生成并登记本实施方式的配对节点树的处理即根节点的插入处理的图。
首先,在步骤S702中,从数组求得空节点对,取得该节点对中的应成为代表节点的数组元素的数组编号。然后在步骤S703中,求出对在步骤S702中得到的数组编号加上0后的数组编号(实际上,等于在步骤S702中取得的数组编号)。
然后在步骤S704a中,针对在步骤S703中得到的数组编号的数组元素,对待插入根节点的节点类别写入1(叶节点),对索引关键字写入插入关键字,对处理源识别符写入已取出插入关键字的排序完毕数组的识别符,在步骤S705中,登记在步骤S702取得的根节点的数组编号,结束处理。
如前所述,显然,当有索引关键字的集合时,从该集合中依次取出索引关键字,反复进行图7和图6A~图6C的处理,从而可以构建与索引关键字的集合对应的本发明的配对节点树。
接着参照图8A、图8B,说明删除本实施方式的配对节点树的索引关键字中的特定索引关键字的处理流程。
图8A是示出作为删除处理前级的检索处理的处理流程的图,相当于,在图4所示的检索处理中将检索开始节点作为根节点,将删除关键 字作为检索关键字。
在步骤S801中,在设定检索开始节点的数组编号的区域内设定根节点的数组编号,在步骤S802中,对检索关键字设定删除关键字。
接着在步骤S810中,执行图4所示的检索处理获得检索结果的索引关键字,并进到步骤S811。
在步骤S811中对删除关键字和索引关键字进行比较,如果不相等则在配对节点树中不存在要删除的索引关键字,所以删除失败,结束处理。如果相等则进到下一处理即图8B的步骤S812以下的处理。
图8B是说明删除处理后级的处理流程的图。
首先,在步骤S812判定在搜索路径堆栈中是否存储有2个以上的数组编号。所谓未存储有2个以上的数组编号,换句话说只存储有1个数组编号,该数组编号是存储了根节点的数组元素的数组编号。在该情况下,转到步骤S818,删除在步骤S801中设定的根节点的数组编号所涉及的节点对。然后进到步骤S819,删除所登记的根节点的数组编号,结束处理。
当在步骤S812中判定为在搜索路径堆栈内存储有两个以上数组编号时进到步骤S813,将在步骤S810执行的检索处理的在步骤S408中得到的代表节点编号加上步骤407中得到的比特值的反转值,得到相加后的数组编号。该处理求出与存储了删除对象索引关键字的叶节点成对的节点所配置的数组编号。
然后在步骤S814中,读出步骤S813中得到的数组编号的数组元素的内容,在步骤S815中使搜索路径堆栈的堆栈指针后退1,取出数组编号。
接着进到步骤S816,将步骤S814中读出的数组元素的内容重写到步骤S815中得到的数组编号的数组元素中。该处理将作为链接到存储有删除对象索引关键字的叶节点的链接源的分支节点置换成与上述叶节点成对的节点。
最后,在步骤S817中删除在步骤S810执行的检索处理的在步骤S408获得的代表节点编号所涉及的节点对,结束处理。
以上,说明了与在本实施方式的排序合并中使用的配对节点树有关的技术。
接着,参照图9~图11F来说明使用了第1实施方式的配对节点树的本发明的实施例1。
图9是说明本实施例概要的图。图9的(1)是说明合并处理的前级的图,图9的(2)是说明后级的图。
在图9(1)所示的例子中,在排序完毕关键字数组312a的关键字数组编号0的数组元素中存储了值为″001010″的关键字480a,在关键字数组编号1的数组元素中存储了值为″100011″的关键字481a,在关键字数组编号2的数组元素中存储了值为″010010″的关键字482a。另外,在排序完毕关键字数组312b的关键字数组编号0的数组元素中存储了值为″000111″的关键字480b,在关键字数组编号1的数组元素中存储了值为″011010″的关键字481b,在排序完毕关键字数组312c的关键字数组编号0的数组元素中存储了值为″010011″的关键字480c,在关键字数组编号1的数组元素中存储了值为″100010″的关键字481c。此外,图中的标号(A)~(H)示出合并处理的各个步骤。
相对于图9(1)所示的步骤(A)~(D)的处理,图9(2)所示的步骤(E)~(H)的处理示出合并处理后级的处理。
在最初的步骤(A)中,从排序完毕关键字数组312a、312b、312c中取出各自的最小值480a、480b、480c,存储在合并数组309a内。
在下一步骤(B)中,将存储在合并数组309a中的最小值即关键字480b存储到合并完毕关键字数组313的关键字数组编号0的数组元素内,从合并数组309a中删除关键字480b。然后,从已取出关键字480b的处理源的排序完毕关键字数组312b中,取出已取出关键字480b后的最小值即关键字481b,插入到合并数组309a而获得合并数组309b。
在下一步骤(C)中,将存储在合并数组309b中的最小值即关键字480a存储到合并完毕关键字数组313的关键字数组编号1的数组元素内,从合并数组309b中删除关键字480a。接着,从已取出关键字480a的处理源的排序完毕关键字数组312a中,取出已取出关键字480a后的最小值即关键字481a,插入到合并数组309b而获得合并数组309c。
在下一步骤(D)中,将存储在合并数组309c中的最小值即关键字480c存储到合并完毕关键字数组313的关键字数组编号2的数组元素内,从合并数组309c中删除关键字480c。从已取出关键字480c的处理源的排序完毕关键字数组312c中,取出已取出关键字480c后的最小值即关键字481c,插入到合并数组309c而获得合并数组309d。
在此阶段,如图9(1)所示,关于合并完毕关键字数组313,在关键字数组编号0~2的数组元素中分别存储有关键字480b″000111″、关键字480a″001010″以及关键字480c″010011″。于是,排序完毕关键字数组312b和排序完毕关键字数组312c的关键字已全部取出完毕,仅在排序完毕关键字数组312a中剩余未取出的关键字。
图9(2)所示的例子是从处理源的排序完毕关键字数组中取出了所有关键字后的处理例。
在步骤(E)中,将存储在合并数组309d内的最小值即关键字481b存储到合并完毕关键字数组313的关键字数组编号3的数组元素内,从合并数组309d中删除关键字481b,获得合并数组309e。
接着在步骤(F)中,将存储在合并数组309e中的最小值即关键字481c存储到合并完毕关键字数组313的关键字数组编号4的数组元素内,从合并数组309e删除关键字481c,获得合并数组309f。
在下一步骤(G)中,将存储在合并数组309f中的最小值即关键字481a存储到合并完毕关键字数组313的关键字数组编号5的数组元素内,从合并数组309f中删除关键字481a,合并数组为空。
在下一步骤(H)中,从剩余未取出关键字的排序完毕关键字数组312a中取出关键字482a,存储在合并完毕关键字数组313的关键字数组编号6的数组元素内,结束合并排序。
上述说明中的合并数组309a~309f具有本实施方式的配对节点树的数据结构。关于使用了配对节点树的处理,以下进行详细说明。此外在以下中,有时还将配对节点树称为合并数组。另外,有时还简称为树。
此外,为了便于说明步骤,对合并数组309a~309f赋予了不同的标 号,不过显然是一个合并数组。另外,在后面说明的合并数组中也是同样的。
图10A以及图10B是说明本实施例的使用配对节点树的合并排序处理流程的图。
图10A是说明将例如图9所示的合并数组309a生成为具有配对节点树结构的数组,在设定检索开始节点的数组编号的区域内设定已生成的配对节点树的根节点的数组编号为止的初始处理,图10B是说明其以后的检索最小值执行合并的处理的图。
一边适当参照图9以及图11A~图11F,一边通过图10A以及图10B来说明本实施例的处理流程。
如图10A所示,在步骤S1001中设定排序完毕关键字数组。此时,设对排序完毕关键字数组赋予了识别符。在图9所示的例子中,设定了排序完毕关键字数组312a、312b以及312c。用于设定各排序完毕关键字数组的排序方法可以是任意的,不受任何限制。
接着在步骤S1002中,判定是否在配对节点树中插入了所有排序完毕关键字数组的最小值。如果插入完毕,则在步骤S1010中,在设定检索开始节点的数组编号的区域内设定根节点数组编号,结束初始处理,进到图10B所示的步骤S1011以后的处理。
如果没有插入完毕则进到步骤S1003,根据数组的识别符来依次指定排序完毕关键字数组,在步骤S1004中从所指定的排序完毕关键字数组,取出关键字的最小值。
接着在步骤S1005中,将在步骤S1004取出的最小值设定为插入关键字,在步骤S1006中对处理源识别符设定在步骤S1003指定的排序完毕关键字数组的识别符。
在图11A(1)的例示中,指定排序完毕关键字数组312a,取出用箭头表示的指针所指向的最小值即关键字480a,设定为插入关键字,将识别符″a″设定为处理源识别符。
接着进到步骤S1007,判定是否登记了根节点。如果没有登记则进到步骤S1008,执行将包含插入关键字的叶节点作为根节点的图7所示的 插入根节点的处理,然后返回到步骤S1002。
如果已登记,则进到步骤S1009,执行图6A~图6C所示的插入处理,利用插入关键字在数组中插入节点,返回步骤S1002。
在图11A(1)的例示中,获得空节点对401a的代表节点编号420,在节点[0]中存储了根节点410a。在根节点410a的节点类别460a中存储了表示是叶节点的″1″,在处理源识别符470a中存储了排序完毕关键字数组312a的识别符″a″,在索引关键字450a中存储了排序完毕关键字数组312a的最小值″001010″。
另外,在图11A(2)的例示中,指定排序完毕关键字数组312b,取出用箭头表示的指针所指向的最小值即关键字480b,设定为插入关键字,将识别符″b″设定为处理源识别符。然后,在图11A(1)所示的配对节点树中插入包含关键字480b的值″000111″作为索引关键字的叶节点410b。
关于图11A(2)所示的配对节点树的根节点410a,是节点类别460a为″0″、鉴别比特位置430a为″2″、代表节点编号为420a的分支节点,插入了代表节点编号420a所指向的节点对401b。在节点位置是节点[0]的节点410b的节点类别460b中存储″1″,在处理源识别符470b中存储″b″,在索引关键字450b中存储″000111″,在节点位置为节点[1]的节点411b中,复制了图11A(1)所示的配对节点树的根节点410a的内容。
在图11A(3)的例示中,指定排序完毕关键字数组312c,取出用箭头表示的指针所指向的最小值即关键字480c设定为插入关键字,将识别符“c”设定为处理源识别符。然后,在图11A(2)所示的配对节点树中插入包含关键字480c的值″010011″作为索引关键字的叶节点411c。
关于图11A(3)所示的配对节点树的根节点410a,是节点类别460a为“0”、鉴别比特位置430a为“1”、代表节点编号为420a的分支节点,插入了代表节点编号420a所指向的节点对401c。在节点位置是节点[0]的节点410c中,复制了图11A(2)所示的配对节点树的根节点410a的内容。在节点位置是节点[1]的节点411c的节点类别461c中存储″1″,在处理源识别符471c中存储″c″,在索引关键字451c中存储″010011″。节点410c的代表节点编号420c所指向的节点对401b的内容与图11A(2)所示 的节点对401b的内容相同。
图11A(3)所示的配对节点树是针对图9所示的排序完毕关键字数组生成的状态,相当于图9所示的合并数组309a。
接着,参照图10B,来说明反复配对节点树的最小值检索和删除插入处理来执行合并排序的处理。
如图10B所示,在步骤S1011中,执行图5A所示的最小值检索,求出最小值和处理源识别符,在步骤S1012中,在合并完毕关键字数组中写出在步骤S1011获得的最小值。
接着进到步骤S1013,对删除关键字设定在步骤S1011获得的最小值,在步骤S1014中,执行图8A、图8B所示的删除处理,删除包含删除关键字的节点。
在图11A(3)、(4)所示的例子中,求出叶节点410b所存储的最小值″000111″,写出到用箭头表示的指针所指向的合并完毕关键字数组313的关键字数组编号0中。然后,从图11A(3)所示的树中删除节点410b,配对节点树如图11A(4)所示,将与节点410b成对的图11A(3)所示的节点411b的内容复制到节点411c。
接着在步骤S1015中,将在步骤S1011求出的处理源识别符作为排序完毕关键字数组的识别符,设定在排序完毕关键字数组识别符设定区域内。
接着在步骤S1016中,判定是否登记有根节点。在该判定中判定为没有登记根节点是,如图11E(3)、(4)所例示,包含合并数组的最小值的节点为根节点,在步骤S1014中消除合并数组、即删除根节点的数组编号并消除登记。
当在步骤S1016中判定为登记根节点时,转移至步骤S1017,在步骤S1015中从排序完毕关键字数组识别符设定区域内设定的识别符所指向的排序完毕关键字数组中,尝试取出下一关键字。
在图11B(1)所示的例子中,取出用箭头表示的指针所指向的排序完毕关键字数组312b的关键字数组编号1的数组元素中所存储的关键字481b,作为下一关键字。
在步骤S1017之后进到步骤S1018,判定在步骤S1017是否取出了下一关键字、即是否已取出了所有的关键字。
在图11E(1)的例示中,在取出下一关键字的排序完毕关键字312b的指针所指向的数组元素中没有存储关键字,所以此时,在步骤S1017中无法取出下一关键字,因此在步骤S1018的判定中,成为已取出了所有的关键字。
如果已取出了所有的关键字,则返回步骤S1011,如果尚未取出所有的关键字,则进到步骤S1019~步骤S1021的处理。
在步骤S1019中,对插入关键字设定在步骤S1017取出的关键字,在步骤S1020中,在用于插入处理的处理源识别符设定区域内,设定在步骤S1015设定的(即在步骤S1011求出的)处理源识别符。然后,在步骤S1021中,执行图6A~图6C所示的插入处理,返回步骤S1011。
如先前所述,在图11B(1)所示的例子中,取出用箭头表示的指针所指向的排序完毕关键字数组312b的关键字数组编号1的数组元素中存储的关键字481b,作为下一关键字,存储在插入到图11B(1)所示的配对节点树的节点411d的索引关键字451d中。
反复以上步骤S1011~步骤S1021的处理,直到在步骤S1016中判定为没有登记根节点为止,当判定为没有登记根节点时进到步骤S1022。
在步骤S1022中,根据在步骤S1015中设定在排序完毕关键字数组识别符设定区域内的识别符所指向的排序完毕关键字数组,取出下一关键字至关键字最大值,依次写出到合并完毕关键字数组,结束处理。
如先前所述,在步骤S1016中判定为没有登记根节点是因为,进行合并处理,渐渐地从各排序完毕关键字数组中取出了所有的关键字,不再有插入到合并数组的关键字,删除了最后剩余的根节点。并且,仅在根节点的处理源识别符所指向的排序完毕关键字数组中,有可能还剩余未取出的关键字。
因此,步骤S1022的处理是取出这些关键字然后依次写出到合并完毕关键字数组。
通过步骤S1022的处理,合并处理完成,完成了存储在所有排序完 毕关键字数组中的全部关键字的合并排序。
图11A~图11F是说明与赋予图9所例示的排序完毕关键字数组310a、310b、310c时的合并数组对应的配对节点树的生成、插入以及删除处理的图。虽然部分重复,但参照图11A~图11F,来说明在赋予图9所示的排序完毕关键字数组310a、310b、310c时的合并处理。
最初如图11A(1)所示,将从排序完毕关键字数组312a中取出的最小值480a登记到合并数组的根节点。如图所示,获得空节点对401a的代表节点编号420,在节点[0]中存储有根节点410a。在根节点410a的节点类别460a中存储了表示为叶节点的″1″,在处理源识别符471a中存储了排序完毕关键字数组312a的识别符″a″,在索引关键字450a中存储了排序完毕关键字数组312a的最小值″001010″。
接着,如图11A(2)所示,取出用箭头表示的指针所指向的排序完毕关键字数组312b的最小值即关键字480b,将包含关键字480b的值″000111″作为索引关键字的叶节点410b插入到图11A(1)所示的树,获得图11A(2)所示的树。
接着,如图11A(3)所示,取出用箭头表示的指针所指向的排序完毕关键字数组312c的最小值即关键字480c,将包含关键字480c的值″000111″作为索引关键字的叶节点410c插入到图11A(2)所示的树,获得图11A(3)所示的树。
由以上所述,所有排序完毕关键字数组的最小值都插入到了合并数组,所以如图11A(4)所示,接着将合并数组的最小值″000111″写出到合并完毕关键字数组313,从图11A(3)所示的树中删除包含最小值的叶节点410b而获得图11A(4)所示的树。
图11B(1)示出了合并数组309a的最小值的处理源识别符所指向的排序完毕关键字数组312b、和向图11A(4)所示的树插入包含用箭头表示的指针所指向的下一关键字481b作为索引关键字的叶节点的情况。即,从排序完毕关键字数组310中取出下一关键字,插入到合并数组。
接着如图11B(2)所示,将合并数组的最小值″001010″写出到合并完毕关键字数组313,删除包含最小值的叶节点410c。
因为叶节点410c的处理源识别符470c的值是″a″,所以如图11C(1)所示,接着从排序完毕关键字数组312a中取出下一关键字481a插入到合并数组。接着如图11C(2)所示,将合并数组的最小值″010011″写出到合并完毕关键字数组313,并删除包含最小值的叶节点410d。
因为叶节点410d的处理源识别符470d的值是″c″,所以如图11D(1)所示,接着从排序完毕关键字数组312c中取出下一关键字481c插入到合并数组。接着如图11D(2)所示,将合并数组的最小值″011010″写出到合并完毕关键字数组313,删除包含最小值的叶节点410e。
因为叶节点410e的处理源识别符470e的值是″b″,所以如图11E(1)所示,接着试图从排序完毕关键字数组312b中取出下一关键字,但已经从排序完毕关键字数组312b中取出了所有的关键字,因此在合并数组中不插入下一关键字。接着如图11E(2)所示,将合并数组的最小值″100010″写出到合并完毕关键字数组313,删除包含最小值的叶节点410f。
因为叶节点410f的处理源识别符470f的值是″c″,所以如图11E(3)所示,接着试图从排序完毕关键字数组312c中取出下一关键字,但已经从排序完毕关键字数组312c中取出了所有的关键字,所以在合并数组中不插入下一关键字。接着如图11E(4)所示,将合并数组的最小值″100011″写出到合并完毕关键字数组313,删除包含最小值的叶节点411b即根节点。
因为已删除了根节点,所以如图11F(1)所示,从叶节点411b的处理源识别符270b的值″a″所示的排序完毕关键字数组312a中取出剩余的关键字482a,写出到合并完毕关键字数组313,结束合并处理。
接着,参照图12A~图14A以及图14B,说明使用了第1实施方式的配对节点树的本发明的实施例2以及实施例3。
图12A、图13B以及图14B与实施例2相关,图12B、图13C与实施例3相关。图13A和图14A在两实施例中共用。
在实施例1中,将根节点作为检索开始节点进行最小值检索,反复在从合并数组中删除最小值之后插入下一关键字的处理。与此相对,在实施例2、3中,变更最小值检索、删除处理和插入处理的顺序,或者跳 过一部分处理,从而削减执行时的合并处理时间。
图12A是说明实施例2概要的图,图12A(1)是说明合并处理前级的图,图12A(2)是说明合并处理后级的图。
当将图12A与图9所示的实施例1的概要相比时,为了便于说明,在排序完毕关键字数组312a的关键字数组编号3中追加关键字483a。另外,步骤(A)以外的合并数组的部分不同。
之后参照图13B来详细说明,在实施例2中,基本上以最小值检索、插入处理以及删除处理的顺序进行处理。并且,通过将最小值检索的检索开始节点设为在之前删除处理中获得的删除节点的父节点,来削减最小值检索的执行步骤数。
在步骤(A)中的处理与图9所示的步骤(A)中的处理相同,生成合并数组309a。
在下一步骤(B)中,将存储在合并数组309a内的最小值即关键字480b存储在合并完毕关键字数组313的关键字数组编号0的数组元素中。然后,从已取出关键字480b的处理源的排序完毕关键字数组312b中取出已取出关键字480b后的最小值即关键字481b,并插入到合并数组309a来获得合并数组309b′。进而,将合并数组309b′的最小值即关键字480b从合并数组309b′中删除,在下一步骤(C)中获得插入下一关键字之前的合并数组309c′。
在下一步骤(C)中,将存储在合并数组309c′内的最小值即关键字480a存储到合并完毕关键字数组313的关键字数组编号1的数组元素内。然后,从已取出关键字480a的处理源的排序完毕关键字数组312a中取出已取出关键字480a后的最小值即关键字481a来插入到合并数组309c′。进而,将合并数组309c′的最小值即关键字480a从合并数组309c′中删除,在下一步骤(D)中获得插入下一关键字之前的合并数组309d′。
在下一步骤(D)中,将存储在合并数组309d′内的最小值即关键字480c存储到合并完毕关键字数组313的关键字数组编号2的数组元素内。然后,从已取出关键字480c的处理源的排序完毕关键字数组312c中取出已取出关键字480c之后的最小值即关键字481c,插入到合并数组 309d′。进而,将合并数组309d′的最小值即关键字480c从合并数组309d′中删除,并获得合并数组309e′。
在此阶段下,如图12A(1)所示,关于合并完毕关键字数组313,在关键字数组编号0~2的数组元素中分别存储有关键字480b″000111″、关键字480a″001010″以及关键字480c″010011″。并且,排序完毕关键字数组312b和排序完毕关键字数组312c的关键字被全部取出,仅在排序完毕关键字数组312a中剩余未取出的关键字。
图12A(2)所示的是从处理源的排序完毕关键字数组中取出了所有关键字后的处理例。
在步骤(E)中,将存储在合并数组309e′内的最小值即关键字481b存储到合并完毕关键字数组313的关键字数组编号3的数组元素中。因为已取出关键字481b的排序完毕关键字数组312b的关键字已被全部取出,所以没有要插入的关键字,从合并数组309d′中删除关键字481b,获得合并数组309f′。
接着在步骤(F)中,将存储在合并数组309f内的最小值即关键字481c存储到合并完毕关键字数组313的关键字数组编号4的数组元素中。与步骤(E)同样,从合并数组309f中删除关键字481c,在下一步骤(G)中,获得插入下一关键字之前的合并数组309g′。
在下一步骤(G)中,将存储在合并数组309g′内的最小值即关键字481a存储到合并完毕关键字数组313的关键字数组编号5的数组元素中。然后,从已取出关键字481a的处理源的排序完毕关键字数组312a中取出已取出关键字481a后的最小值即关键字482a,插入到合并数组309g′。进而,从合并数组309g′中删除合并数组309g′的最小值即关键字481a,获得合并数组309h′。
在下一步骤(H)中,将存储在合并数组309h′内的最小值即关键字482a存储到合并完毕关键字数组313的关键字数组编号6的数组元素中。从合并数组309h′中删除关键字482a,合并数组为空。
在最后的步骤(I)中,从剩余未取出关键字的排序完毕关键字数组312a中取出关键字483a,存储到合并完毕关键字数组313的关键字数组编号7的数组元素,结束合并排序。
接着,参照图13A、图13B、图14A以及图14B,说明使用本实施例的配对节点树的合并排序处理流程。
图13A是说明生成图12A例示的合并数组309a作为具有配对节点树结构的数组为止的初始处理的图,图13B是说明其以后的从合并数组中检索最小值写入到合并完毕数组的处理的图。
在图13A中,根据参照图12A的先前说明可知,当与实施例1的图10A的标记相比时,除了设定检索开始节点的步骤移到了图13B侧之外完全相同,所以省略说明,下面通过图13B,来说明本实施例的合并处理中的、从合并数组检索最小值写入到合并完毕数组的处理。
如图13B所示,在步骤S1310中对检索开始节点设定根节点。
接着,进到步骤S1311,执行图5A所示的最小值检索,求出最小值和处理源识别符,在步骤S1312中,将在步骤S1311获得的最小值写出到合并完毕关键字数组。
接着在步骤S1313中,将在步骤S1311求出的处理源识别符作为排序完毕关键字数组的识别符,设定在排序完毕关键字数组识别符设定区域内。
接着进到步骤S1314,从在步骤S1313设定到排序完毕关键字数组识别符设定区域内的识别符所指向的排序完毕关键字数组中,尝试取出下一关键字。
在步骤S1314之后进到步骤S1315,判定在步骤S1314中是否取出了下一关键字,即判定是否已取出了所有的关键字。
如果已取出了所有的关键字,则进到步骤S1319,如果尚未取出所有的关键字,则进到步骤S1316~步骤S1318b的处理。
在步骤S1316中,在用于插入处理的处理源识别符设定区域内,设定在步骤S1313设定的(即在步骤S1311求出的)处理源识别符,在步骤S1317中,对插入关键字设定在步骤S1314取出的关键字。然后,在 步骤S1318中,执行图6A~图6C所示的插入处理。在该插入处理的过程中,在图6C所示的步骤S624中,获得保持插入关键字作为索引关键字的在步骤S614取得的节点的紧接上位节点(以下称为插入节点。)的数组编号。此外,根据后面说明的理由,该用于插入处理的搜索路径堆栈不同于用于最小值检索的搜索路径堆栈。
接着在步骤S1318c中,利用在步骤S1318获得的插入节点的数组编号,检索在步骤S1311所执行的最小值检索的结果而获得的搜索路径堆栈。在后文中参照图14B来详细说明该搜索路径堆栈的检索。
接着进到步骤S1318d,根据在步骤S1318c中的检索结果,来判定在最小值检索的搜索路径堆栈中是否存在与插入节点的数组编号一致的数组编号。如果不存在则转移到步骤S1319,如果存在,则执行步骤S1318a~步骤S1318b的处理,然后进到步骤S1319。
在步骤S1318a中,对检索开始节点设定根节点,在步骤S1318b中,从根节点起执行图5A所示的最小值检索,求出最小值和处理源识别符。此外,在后文中说明检索作为在步骤S1311所执行的最小值检索的结果而获得的搜索路径堆栈、而在步骤S1318b中再次进行最小值检索的理由。
在步骤S1319中,在删除节点设定区域中设定包含在步骤S1318b求出的最小值的节点的数组编号,接着进到步骤S1320从合并数组将删除节点删除,并且获得删除节点的紧接上位的父节点。在该删除处理中,利用用于最小值检索的搜索路径堆栈。此外在后文中,参照图14A来详细说明步骤S1320的处理。
接着进到步骤S1321,判定是否登记了根节点。如果根节点还未被删除而处于登记状态时,进到步骤S1322,将在步骤S1320获得的父节点设定为检索开始节点,返回步骤S1311。
如果根节点已被删除而没有登记时,进到步骤S1323,从在步骤S1313设定在排序完毕关键字数组识别符设定区域内的识别符所指向的排序完毕关键字数组,取出下一关键字至关键字最大值,依次写出到合并完毕关键字数组中,结束处理。
如先前所述,在实施例2中,通过将最小值检索的检索开始节点设 为在上一次删除处理中获得的删除节点的父节点,来削减最小值检索的执行步骤数。但是,在插入下一关键字之前,无法确定下一最小值。
因此,如步骤S1318所示,先插入下一关键字。然后,从插入了下一关键字的树中,删除在插入下一关键字之前的树的、包含通过最小值检索而获得的最小值的节点。但是,在插入节点存在于最小值检索时的路径上的情况下,包含通过插入处理保持插入关键字的叶节点在内的节点对被插入在插入节点与包含最小值的叶节点之间。因此,在插入了下一关键字后从根节点到保持最小值的叶节点的路径,与插入下一关键字之前的路径不一致。这样一来,在接下来执行的删除处理中,无法正确地设定删除节点的父节点,也无法正确地进行删除处理本身,所以需要再次从根节点起检索最小值,更新用于最小值检索的搜索路径堆栈。
另一方面,在最小值检索时的路径上不存在插入节点的情况下,包含通过插入处理保持插入关键字的叶节点在内的节点对不被插入在插入节点与包含最小值的叶节点之间,所以在插入了下一关键字之后的从根节点到保持最小值的叶节点的路径,与插入下一关键字之前的路径一致。因此,即使是插入处理之后,在此情况下,也能在删除处理中正确设定删除节点的父节点,因此能正确地执行删除处理,从该父节点起检索下一最小值。
此外,如果为了明确起见而进行说明,则删除节点是包含最小值的节点,因此,根据配对节点树的顺序性,包含下一最小值的节点是删除节点的父节点的下位节点。因此,可以将父节点作为下一最小值检索的检索开始节点。
[0195接下来,参照图14A来说明从合并数组中删除删除节点并且获得父节点的处理。
如图14A所示,在步骤S1402中判定在搜索路径堆栈中是否存储有两个以上的数组编号。与在图8B的步骤S812中所说明的相同,没有存储两个以上数组编号的情况,换言之仅存储一个数组编号,该数组编号是存储了根节点的数组元素。在此情况下转移至步骤S1407,删除根节点数组编号所涉及的节点对。接着进到步骤S1408,删除已登记的根节点的数组编号,结束处理。
在步骤S1402中当判定为在搜索路径堆栈中存储有两个以上数组编号时,进到步骤S1403,求出与在图13B所示的步骤S1319或者在之后说明的图13C所示的步骤S1354中设定的删除节点成对的节点的数组编号,设定为对节点数组编号。
接着进到步骤S1404,使在图13B所示的步骤S1311的最小值检索中使用的搜索路径堆栈的堆栈指针后退1,取出数组编号,设定为父节点数组编号。
接着进到步骤S1405,读出在步骤S1403设定的对节点数组编号所指向的数组元素内容,存储到在步骤S1404设定的父节点数组编号所指向的数组元素中。
接着进到步骤S1406,将删除节点的数组编号所涉及的节点对删除,结束处理。
接着参照图14B,对搜索路径堆栈的检索处理进行说明。
如图14B所示,在步骤S1411中,设定在图13B所示的步骤S1311中执行的最小值检索的搜索路径堆栈的堆栈指针,作为检索用堆栈指针。
接着在步骤S1412中,在检索编号设定区域,将在图13B所示的步骤S1318获得的插入节点的数组编号设定为检索编号。
接着在步骤S1413中,判定检索用堆栈指针是否指向存储有根节点的数组元素的数组编号。如果检索用堆栈指针指向存储有根节点的数组元素的数组编号,则输出表示最小值检索的搜索路径堆栈所存储的数组编号与插入节点的数组编号不一致的情况,结束处理。
如果检索用堆栈指针未指向存储有根节点的数组元素的数组编号,则进到步骤S1414,使检索用堆栈指针后退1,取出数组编号。
接着在步骤S1415中,判定在步骤S1412设定的检索编号与在步骤S1414取出的数组编号是否一致。如果不一致,则返回步骤S1413。
如果一致,则输出表示在最小值检索的搜索路径堆栈所存储的数组编号中具有与插入节点的数组编号一致的数组编号的情况,结束处理。
接下来,说明实施例3。在后文中参照图13C进行详细说明,不过在实施例3中,基本上与实施例1相同,按照最小值检索、删除处理、 插入处理的顺序进行处理,但在删除处理后将删除节点的父节点作为检索开始节点中途进行最小值检索,将该最小值与之后从处理源取出的关键字进行大小比较,如果下一关键字小则跳过插入处理,直接写出到合并完毕关键字数组。
图12B是说明实施例3的概要的图,图12B(1)是说明合并处理前级的图,图12B(2)是说明合并处理后级的图。
当将图12B与图9所示的实施例1的概要进行比较时,为了便于说明,在排序完毕关键字数组312c的关键字数组编号2中追加了关键字482c。另外,步骤(A)以外的合并数组的部分不同。
在步骤(A)中的处理与图9所示的步骤(A)中的处理相同,生成了合并数组309a。
在下一步骤(B)中,将存储在合并数组309a内的最小值即关键字480b存储到合并完毕关键字数组313的关键字数组编号0的数组元素中,从合并数组309a中删除关键字480b。接着求出删除了关键字480b后的合并数组309a的下一最小值即关键字480a和处理源识别符。然后,从已取出关键字480b的处理源的排序完毕关键字数组312b中取出已取出关键字480b后的最小值即下一关键字481b,进行与关键字480a的大小比较。因为下一关键字481b大于合并数组309a的下一最小值即关键字480a,所以将关键字481b插入合并数组309a而获得合并数组309b′。
在下一步骤(C)中,将存储在合并数组309b′内的最小值即关键字480a存储到合并完毕关键字数组313的关键字数组编号1的数组元素中,从合并数组309b′中删除关键字480a。接着求出删除了关键字480a后的合并数组309b′的下一最小值即关键字480c和处理源识别符。然后,从已取出关键字480a的处理源的排序完毕关键字数组312a中取出已取出关键字480a后的最小值即下一关键字481a,进行与关键字480c的大小比较。因为下一关键字481a大于合并数组309b′的下一最小值即关键字480c,所以将关键字481a插入到合并数组309b′,获得合并数组309c′。
在下一步骤(D)中,将存储在合并数组309c′内的最小值即关键字480c存储到合并完毕关键字数组313的关键字数组编号2的数组元素中,从 合并数组309c′中删除。接着求出删除了关键字480c后的合并数组309c′的下一最小值即关键字481b和处理源识别符。然后,从已取出关键字480c的处理源的排序完毕关键字数组312c中取出已取出关键字480c后的最小值即下一关键字481c,进行与关键字481b的大小比较。因为下一关键字481c小于合并数组309c′的下一最小值即关键字481b,所以将下一关键字481c存储到合并完毕关键字数组313的关键字数组编号3的数组元素。在步骤(D)中,不存在要插入到合并数组合并数组309c′的下一关键字,删除了关键字480c后的合并数组309c′是图示的合并数组309d′。
在此阶段中,如图12B(1)所示,关于合并完毕关键字数组313,在关键字数组编号0~3的数组元素中分别存储有关键字480b″000111″、关键字480a″001010″、关键字480c″010011″以及关键字481c″011000″。并且,排序完毕关键字数组312b的关键字已被全部取出,在排序完毕关键字数组312a和排序完毕关键字数组312c中,剩余未取出的关键字。
在图12B(2)所示的步骤(E)中,从排序完毕关键字数组312c中取出已取出关键字481c后的最小值即下一关键字482c,进行与关键字481b的大小比较。因为下一关键字482c大于合并数组309d′的最小值即关键字481b,所以将关键字482c插入到合并数组309d′。
然后,将插入了关键字482c后的合并数组309d′的最小值即关键字481b存储到合并完毕关键字数组313的关键字数组编号4的数组元素中,从合并数组309d′中删除,获得合并数组309e′。
在下一步骤(F)中,因为在步骤(E)中删除的关键字481b的处理源的排序完毕关键字数组312b的关键字已被全部取出,所以没有要插入合并数组309e′的关键字。将存储在合并数组309e′内的最小值即关键字482c存储到合并完毕关键字数组313的关键字数组编号5的数组元素中,从合并数组309e′中删除关键字482c,获得合并数组309f′。
即使在下一步骤(G)中,因为在步骤(F)删除的关键字482c的处理源的排序完毕关键字数组312c的关键字已被全部取出,所以没有要插入合并数组309f′的关键字。将存储在合并数组309f′中的最小值即关键字481a存储到合并完毕关键字数组313的关键字数组编号6的数组元素内,从 合并数组309f′中删除关键字481a。然后,如图所示,合并数组为空,即配对节点树的根节点被删除。
在最后的步骤(H)中,从剩余未取出关键字的排序完毕关键字数组312a中取出关键字482a,存储在合并完毕关键字数组313的关键字数组编号7的数组元素内,结束合并排序。
接下来,对实施例3的合并处理流程进行说明。生成图12A例示的合并数组309a作为具有配对节点树结构的数组为止的初始处理,与图13A所示的实施例2的处理流程相同。因此,参照图13C说明其以后的从合并数组中检索最小值写入到合并完毕数组的处理。
如图13C所示,在步骤S1350中对检索开始节点设定根节点。
接着进到步骤S1351,执行图5A所示的最小值检索,求出最小值和处理源识别符,在步骤S1352中,将在步骤S1351获得的最小值写出到合并完毕关键字数组。
接着在步骤S1353中,将在步骤S1351求出的处理源识别符作为排序完毕关键字数组的识别符,设定在排序完毕关键字数组识别符设定区域。
接着进到步骤S1354,在删除节点设定区域内设定包含在步骤S1351或后述步骤S1358求出的最小值在内的节点的数组编号,接着在步骤S1355中,从合并数组将删除节点删除,并且获得删除节点的紧接上位的父节点。此外,步骤S1355的处理已参照先前的图14A进行了详细的说明。
接着进到步骤S1356,判定是否登记了根节点。如果根节点尚未被删除还登记着,则进到步骤S1357以后的处理,返回步骤S1352或步骤S1350。
如果根节点已被删除而没有登记,则进到步骤S1366,从在步骤S1353中设定到排序完毕关键字数组识别符设定区域内的识别符所指向的排序完毕关键字数组,取出下一关键字至关键字最大值,依次写出到合并完毕关键字数组中,结束处理。
在步骤S1357中,将在步骤S1355获得的父节点设定为检索开始节 点,进到步骤S1358,执行图5A所示的最小值检索,求出最小值和处理源识别符。
接着进到步骤S1359,从在步骤S1353中设定到排序完毕关键字数组识别符设定区域的识别符所指向的排序完毕关键字数组中,尝试取出下一关键字。
在步骤S1359之后进到步骤S1360,判定在步骤S1359中是否取出了下一关键字,即判定是否取出了所有的关键字。
如果取出了所有的关键字,则返回步骤S1352,如图12B的步骤(E)、步骤(F)所说明的那样,跳过插入处理,进行向合并完毕关键字数组的最小值写出和删除处理。
如果尚未取出所有的关键字,则进入步骤S1361。在步骤S1361中,判定在步骤S1359取出的下一关键字与在步骤S1358求出的最小值之间的大小关系。
如果下一关键字小于最小值,则即使将下一关键字插入合并数组进行最小值检索,所求出的也是该下一关键字,所以不进行插入处理,分支到步骤S1362,在合并完毕关键字数组中写出下一关键字,返回步骤S1359进一步取出下一关键字。
如果下一关键字不小于最小值,则执行步骤S1363~步骤S1365的将关键字插入合并数组的处理,返回步骤S1350。
在步骤S1363中,在用于插入处理的处理源识别符设定区域中,设定在步骤S1353设定的(即在步骤S1351求出的)处理源识别符,在步骤S1364中,对插入关键字设定在步骤S1359取出的关键字。然后,在步骤S1365中,执行图6A~图6C所示的插入处理,返回步骤S1350。
接着,参照图15~图24C,说明第2实施方式的合并排序。在本实施方式中,使用在先前所述的日本特愿2007-114915中提出的配对节点树,在该配对节点树中,索引关键字配置在与配对节点树不同的区域内,在叶节点中取代索引关键字而存储指向配置索引关键字的区域的指针。此时在本实施例中,可以通过存储索引关键字和处理源识别符,来适用于合并排序。
图15是说明第2实施方式的存储在数组中的配对节点树的结构例的图。当与图2A所示的第1实施方式的结构例进行比较时,不同点是,在作为叶节点的节点[1]中取代图2A所示的处理源识别符119和索引关键字118,存储表示存储有该索引关键字和处理源识别符的区域的参照指针118a,其它相同,因此省略说明。
图16(1)是概念性示出本实施方式的配对节点树的树结构的图,该图(2)是示出存储有参照指针所指向的由处理源识别符和索引关键字构成的关键字信息的关键字信息存储区域311的图。
图16(1)所示的配对节点树是利用参照指针280c、281d、280e、281e、280g、281g、280h、281h来置换图2B所例示的配对节点树的各叶节点的处理源识别符和索引关键字的树,在图16(2)所示的关键字信息存储区域311的各参照指针所指向的区域中存储有与图2A所示对应的关键字信息即处理源识别符和索引关键字。
图17是说明用于本实施方式的硬件结构例的图。当与用于图3A所示的第1实施方式的硬件结构例进行比较时,仅仅在数据存储装置308中加入了关键字信息存储区域311,因此省略说明。
图18是示出使用了本实施方式的配对节点树的比特序列检索的基本动作的流程图。
步骤S1801~步骤S1809的处理与表示图4所示的第1实施方式的比特序列检索基本动作的流程图的步骤S401~步骤S409相同,因此省略说明。
当在步骤S1805中判定为节点类别不是节点分支(即是叶节点)时,分支到步骤S1810a,从该叶节点中取出参照指针,在步骤S1810b中读出参照指针所指向的关键字信息。
然后,在步骤S1810c中从关键字信息取出索引关键字,在步骤S1810d中取出处理源识别符,结束处理。
图19A是示出求得本实施方式的配对节点树所存储的索引关键字的最小值的处理的流程图。
步骤S 1901~步骤S1907的处理与图5A所示的表示第1实施方式的 最小值检索的流程图的步骤S401~步骤S409相同,因此省略说明。
当在步骤S1905中判定为节点类别不是分支节点(即是叶节点时),分支到步骤S1908a,从该叶节点中取出参照指针,在步骤S1908b中读出参照指针所指向的关键字信息。
然后,在步骤S1908c中从关键字信息内取出索引关键字,在步骤S1908d中取出处理源识别符,结束处理。
图19B是示出求得本实施方式的配对节点树所存储的索引关键字的最大值的处理的流程图。
在步骤S1911~步骤S1918d处理中,除了步骤S1917的处理是对代表节点编号加上值1来获得数组编号之外,与图19A所示的步骤S1901~S1908d的处理相同,因此省略说明。
图20A~图20C、图21是说明本实施方式的配对节点树的节点插入处理的图。图20A~图20C说明通常的插入处理,图21说明根节点的插入处理。
图20A是示出作为插入处理前级的检索处理的处理流程的图。
在步骤S2001中,在设定检索开始节点数组编号的区域中设定根节点的数组编号,在步骤S2002中,对检索关键字设定插入关键字。
接着在步骤S2010中,执行图18所示的检索处理并获得检索结果的索引关键字,进到步骤S2011。
在步骤S2011中对插入关键字和在步骤S2010获得的索引关键字进行比较,如果相等则插入关键字已存在于配对节点树中,所以插入失败,处理结束。如果插入关键字和在步骤S2010获得的索引关键字不相等,则进到步骤S2011a,对关键字信息设定区域的索引关键字设定插入关键字。
接着,在步骤S2011b中对关键字信息设定区域的处理源识别符设定插入关键字的处理源识别符,进到图20B的步骤S2012。
图20B是说明准备用于待插入节点对的数组元素的处理的处理流程图。与图6B所示的第1实施方式的内容相比,除了图20A中的检索处理是图18所示的处理这一点之外都是相同的,因此省略说明。
图20C是示出在图20B所准备的数组中存储节点并且求出其插入位置、变更现有的节点内容来完成插入处理的处理流程图。图20C所示的步骤S2016~步骤S2024的处理与第1实施方式的图6C所示的步骤S616~步骤S624的处理相同,因此省略说明。
步骤S2024之后,在步骤S2025a中,取得指向关键字信息存储区域的空区域的指针。可根据关键字信息存储区域的管理方法,来取得指向该空区域的指针。
接着进到步骤S2025b,将在步骤S2011a、步骤S2011b设定的关键字信息写入到在步骤S2025a取得的指针所指向的关键字信息存储区域。
接着进到步骤S2025c,针对在步骤S2014获得的数组编号所指向的数组元素,对节点类别写入叶节点,对参照指针写入在步骤S2025a获得的指针。
在下一步骤S2026~步骤S2028的处理结束为止的处理与第1实施方式的图6C所示的步骤S626~步骤S628为止的处理相同,所以省略说明。
图21是说明本实施方式的新生成并登记配对节点树的处理即根节点的插入处理的图。
首先,在步骤S2102中,从数组中求出空的节点对,取得该节点对中应成为代表节点的数组元素的数组编号。接着在步骤S2103中,求出在步骤S2102获得的数组编号与0相加所得的数组编号。(实际上,与在步骤S2102取得的数组编号相等。)
接着在步骤S2103a中,取得指向关键字信息存储区域的空区域的指针,在步骤S2103b中,针对取得的指针所指向的存储区域的关键字信息,对处理源识别符写入已取出插入关键字的排序完毕数组的识别符,对索引关键字写入插入关键字。
进而,在步骤S2104中,针对在步骤S2103获得的数组编号的数组元素,对节点类别写入1(叶节点),对参照指针写入在S2103a获得的指针,然后进到步骤S2105。
在步骤S2105中,登记在步骤S2102取得的根节点的数组编号,结 束处理。
图22A和图22B是说明本实施方式的从配对节点树的索引关键字中删除特定索引关键字的处理流程的图。
图22A是示出作为删除处理前级的检索处理的处理流程的图,与图8A所示的第1实施方式的内容相比,除了检索处理是图18所示的处理这一点之外都相同,所以省略说明。
图22B是说明删除处理后级的处理流程的图。图22B所示的步骤S2212~步骤S2219的处理与图8B所示的第1实施方式的相同,所以省略说明。
在本实施例中使用关键字信息存储区域,所以作为最后的处理,在步骤S2220中,释放在步骤S2210获得的参照指针所指向的存储区域,结束处理。
以上,说明在本实施方式的排序合并中使用的配对节点树和关键字信息存储区域。
接着,参照图23A、图23B来说明使用了第2实施方式的配对节点树的本发明的实施例4。
本实施例在使用了第1实施方式的配对节点树的实施例1中,使用第2实施方式的配对节点树。
图23A以及图23B是说明使用本实施例的配对节点树的合并排序处理流程的图。
图23A说明例如生成图9所示的合并数组309a作为具有配对节点树结构的数组、在设定检索开始节点数组编号的区域中设定所生成的配对节点树的根节点的数组编号为止的初始处理,图23B是说明其以后的检索最小值来执行合并的处理的图。
当图23A所示的步骤S2301~步骤S2310的处理与图10A所示的实施例1的处理相比时,除了步骤2309的插入处理是第2实施方式的图20A~图20C所示的处理、以及步骤S2308的根节点的插入处理是第2实施方式的图21所示的处理之外,都与图10A所示的步骤S1001~步骤S1010相同,因此省略说明。
另外,当图23B所示的步骤S2311~S2322的处理与图10B所示的实施例1的处理相比时,除了步骤S2311的检索处理是第2实施方式的图19所示的处理、步骤S2314的删除处理是第2实施方式的图22A、图22B所示的处理以及步骤2321的插入处理是第2实施方式的图20A~图20C所示的处理之外,都与图10B所示的步骤S1011~步骤S1022相同,因此省略说明。
接着,参照图24A、图24B,说明使用了第2实施方式的配对节点树的本发明的实施例5。
本实施例在使用了第1实施方式的配对节点树的实施例2中,使用第2实施方式的配对节点树。
图24A以及图24B是说明本实施例的使用配对节点树的合并排序处理流程的图。
图24A说明生成例如图12B所示的合并数组309a作为具有配对节点树结构的数组、在设定检索开始节点的数组编号的区域中设定所生成的配对节点树的根节点的数组编号为止的初始处理,图24B是说明其以后的检索最小值执行合并的处理的图。
根据参照图12B的先前说明可知,图24A与实施例4的图23A的标记完全相同,因此省略说明。
另外,当图24B所示的步骤S2410~S2423的处理与图13B所示的实施例2的处理相比时,除了步骤S2411的检索处理是第2实施方式的图19所示的处理、步骤2418的插入处理是第2实施方式的图20A~图20C所示的处理以及在步骤S2420的删除处理之后插入步骤S2420a并释放在步骤S2410获得的参照指针所指向的存储区域之外,都与图13B所示的步骤S1310~步骤S1323相同,从而省略重复说明。
接着,说明使用了第2实施方式的配对节点树的本发明的实施例6。本实施例在使用了第1实施方式的配对节点树的实施例中,使用第2实施方式的配对节点树。
图24A以及图24C是说明本实施例的使用配对节点树的合并排序处理流程的图。合并排序的初始处理与实施例5完全相同,图24A所示的 处理是共用的。
对初始处理以后的检索最小值来执行合并的处理进行说明的图24C,也与实施例3的对初始处理以后的检索最小值来执行合并的处理进行说明的图13C相同。
当图24C所示的步骤S2450~S2466的处理与图13C所示的实施例3的处理相比时,除了步骤S2451和步骤S2458的检索处理是第2实施方式的图19所示的处理、步骤2465的插入处理是第2实施方式的图20A~图20C所示的处理以及在步骤S2455的删除处理之后插入步骤S2455a并释放在步骤S2451获得的参照指针所指向的存储区域之外,都与图13C所示的步骤S1350~步骤S1366相同,从而省略重复说明。
对于用于实施以上本发明的优选方式,以升序的排序合并为例进行了详细说明,不过显然也可以通过修改升序的排序合并来实施降序的排序合并。另外,对于本领域技术人员来说,本发明的实施方式不限于上述内容,可进行各种变形。此外显然,还可以通过使计算机执行本发明的比特序列合并排序方法的程序,从而在计算机上构建本发明的比特序列合并排序装置。
因此,本发明的实施方式包含上述程序、以及存储程序的计算机可读存储介质。此外,在本发明的实施方式还包含本发明的配对节点树的数据结构。
Claims (11)
1.一种比特序列合并排序方法,该方法从存储有由以升序或降序方式排序完毕的比特序列构成的关键字的多个排序完毕关键字存储区域中,分别取出作为最小值或最大值的关键字来生成合并用关键字序列,从该合并用关键字序列取出该合并用关键字序列中作为最小值或最大值的关键字,存储到合并完毕关键字存储区域,从已取出存储到该合并完毕关键字存储区域的关键字的所述排序完毕关键字存储区域中,取出作为下一最小值或下一最大值的下一关键字,插入到所述合并用关键字序列,反复从该合并用关键字序列取出该合并用关键字序列中作为最小值或最大值的关键字而存储到所述合并完毕关键字存储区域的处理,直到从所述多个排序完毕关键字存储区域取出所有关键字而存储到所述合并完毕关键字存储区域为止,由此以升序或降序方式对所述多个排序完毕关键字存储区域所存储的所有关键字进行排序,其中,
将所述合并用关键字序列的关键字保持为配对节点树上的索引关键字,该配对节点树是用于比特序列检索的树,由根节点、以及配置在相邻存储区域中的分支节点和叶节点、或者分支节点之间或叶节点之间的节点对构成,所述根节点是表示树的起点的节点,当该树的节点为一个时所述根节点是所述叶节点,当树的节点为两个以上时所述根节点是所述分支节点,所述分支节点包含进行比特序列检索的检索关键字的鉴别比特位置、和表示作为链接目的地节点对中的一个节点的代表节点的位置的位置信息,所述叶节点包含由检索对象比特序列构成的索引关键字,以所述树的任意节点作为检索开始节点,依次反复下述动作:在所述分支节点中根据该分支节点中包含的鉴别比特位置的检索关键字的比特值,来链接到链接目的地节点对的代表节点或配置在与其相邻的存储区域中的节点,直至到达所述叶节点为止,由此将存储在所述叶节点中的索引关键字作为检索结果关键字,该检索结果关键字是所述树的以所述检索开始节点为根节点的任意部分树的、基于所述检索关键字的检索结果,并且所述叶节点包含对存储有所述关键字的所述排序完毕关键字存储区域进行识别的处理源识别符,
该比特序列合并排序方法具有以下步骤:
合并树生成步骤,从存储有所述排序完毕关键字的多个排序完毕关键字存储区域中分别取出最小关键字或最大关键字,生成所述配对节点树;
合并步骤,使用该配对节点树进行最小值检索或最大值检索,取得作为检索结果的最小值的最小关键字、或作为检索结果的最大值的最大关键字以及所述处理源识别符,将该最小关键字或最大关键字存储到所述合并完毕关键字存储区域;
关键字删除步骤,从所述配对节点树中删除该最小关键字或最大关键字;
下一关键字取出步骤,从在所述合并步骤中取得的处理源识别符所指示的所述排序完毕关键字存储区域中,取出作为所述最小关键字的下一最小值的下一关键字、或作为所述最大关键字的下一最大值的下一关键字;以及
下一关键字插入步骤,将该取出的下一关键字插入到所述配对节点树,
反复所述合并步骤、所述关键字删除步骤、所述下一关键字取出步骤以及所述下一关键字插入步骤,直到从所述多个排序完毕关键字存储区域中取出所有关键字而存储到所述合并完毕关键字存储区域,
由此,以升序或降序方式将所述多个排序完毕关键字存储区域所存储的关键字存储在所述合并完毕关键字存储区域中。
2.根据权利要求1所述的比特序列合并排序方法,其中,
所述下一关键字取出步骤包含下一关键字取出判定步骤,该下一关键字取出判定步骤判定是否能从所述取得的处理源识别符所指示的所述排序完毕关键字存储区域中取出所述下一关键字,
当在该下一关键字取出判定步骤中判定为不能取出所述下一关键字时,跳过所述下一关键字插入步骤。
3.根据权利要求2所述的比特序列合并排序方法,其中,
所述关键字删除步骤包含根节点登记判定步骤,该根节点登记判定步骤在从所述配对节点树中删除了所述最小关键字或最大关键字之后,判定是否登记了所述配对节点树的所述根节点,
该比特序列合并排序方法还具有最终合并步骤,该最终合并步骤在所述根节点登记判定步骤中判定为没有登记所述根节点时,从存在未取出关键字的所述排序完毕关键字存储区域中,依次取出关键字直到最大或最小关键字,存储在所述合并完毕关键字存储区域中。
4.根据权利要求1所述的比特序列合并排序方法,其中,
将所述关键字删除步骤、所述下一关键字取出步骤和所述下一关键字插入步骤的执行顺序设为所述下一关键字取出步骤、所述下一关键字插入步骤和所述关键字删除步骤的执行顺序。
5.根据权利要求4所述的比特序列合并排序方法,其中,
将包含所述删除的最小值或最大值的节点的紧接上位节点设为所述合并步骤中的最小值检索或最大值检索的检索开始节点。
6.根据权利要求5所述的比特序列合并排序方法,其中,
该比特序列合并排序方法还具有以下步骤:
插入节点检索步骤,判定包含所述插入的下一关键字作为索引关键字的节点的紧接上位节点的插入节点,是否存在于所述最小值检索或最大值检索中从根节点到包含该最小值或最大值的叶节点的检索路径中;以及
再检索步骤,当在所述插入节点检索步骤中判定为该插入节点存在于所述检索路径时,将根节点作为检索开始节点,再次进行最小值检索或最大值检索。
7.根据权利要求1所述的比特序列合并排序方法,其中,
该比特序列合并排序方法还具有:
中间检索步骤,在所述关键字删除步骤之后,将包含在该关键字删除步骤中删除的最小值或最大值的节点的紧接上位节点作为检索开始节点,进行最小值检索或最大值检索;以及
下一关键字大小判定步骤,在所述下一关键字取出步骤之后,判定在该下一关键字取出步骤中取出的所述下一关键字是否小于在所述中间检索步骤中求出的最小值、或大于在所述中间检索步骤中求出的最大值,
在所述下一关键字小于所述最小值或大于所述最大值时,将该下一关键字存储在所述合并完毕关键字存储区域中,再次执行所述下一关键字取出步骤,
在所述下一关键字大于所述最小值或小于所述最大值时,执行所述下一关键字插入步骤。
8.根据权利要求7所述的比特序列合并排序方法,其中,
所述下一关键字取出步骤包含下一关键字取出判定步骤,该下一关键字取出判定步骤判定是否能从所述取得的处理源识别符所指示的所述排序完毕关键字存储区域中取出所述下一关键字,
在该下一关键字取出判定步骤中判定为不能取出所述下一关键字时,跳过所述下一关键字插入步骤和将根节点作为检索开始节点进行最小值检索或最大值检索的检索步骤。
9.根据权利要求1~8中任一项所述的比特序列合并排序方法,其中,
在所述配对节点树的叶节点中,代替处理源识别符和索引关键字,存储指向配置有该处理源识别符和索引关键字的区域的指针,经由该指针来取得处理源识别符和索引关键字。
10.一种比特序列合并排序装置,该装置从存储有由以升序或降序方式排序完毕的比特序列构成的关键字的多个排序完毕关键字存储区域中,分别取出作为最小值或最大值的关键字来生成合并用关键字序列,从该合并用关键字序列取出该合并用关键字序列中作为最小值或最大值的关键字,存储到合并完毕关键字存储区域,从已取出存储到该合并完毕关键字存储区域的关键字的所述排序完毕关键字存储区域中,取出作为下一最小值或下一最大值的下一关键字,插入到所述合并用关键字序列,反复从该合并用关键字序列取出该合并用关键字序列中作为最小值或最大值的关键字而存储到所述合并完毕关键字存储区域的处理,直到从所述多个排序完毕关键字存储区域中取出所有关键字而存储到所述合并完毕关键字存储区域为止,由此以升序或降序方式对所述多个排序完毕关键字存储区域所存储的所有关键字进行排序,其中,该比特序列合并排序装置具有:
合并树存储单元,其将所述合并用关键字序列的关键字保持为配对节点树上的索引关键字,该配对节点树是用于比特序列检索的树,由根节点、以及配置在相邻存储区域中的分支节点和叶节点、或者分支节点之间或叶节点之间的节点对构成,所述根节点是表示树的起点的节点,当该树的节点为一个时所述根节点是所述叶节点,当树的节点为两个以上时所述根节点是所述分支节点,所述分支节点包含进行比特序列检索的检索关键字的鉴别比特位置、和表示作为链接目的地节点对中的一个节点的代表节点的位置的位置信息,所述叶节点包含由检索对象比特序列构成的索引关键字以及对存储有所述关键字的所述排序完毕关键字存储区域进行识别的处理源识别符,以所述树的任意节点作为检索开始节点,依次反复下述动作:在所述分支节点中根据该分支节点中包含的鉴别比特位置的检索关键字的比特值,来链接到链接目的地节点对的代表节点或配置在与其相邻的存储区域中的节点,直至到达所述叶节点为止,由此将存储在所述叶节点中的索引关键字作为检索结果关键字,该检索结果关键字是所述树的以所述检索开始节点为根节点的任意部分树的、基于所述检索关键字的检索结果;
合并树生成单元,从存储有所述排序完毕关键字的多个排序完毕关键字存储区域中分别取出最小关键字或最大关键字,生成所述配对节点树,存储在所述合并树存储单元中;
合并单元,其使用该配对节点树进行最小值检索或最大值检索,取得作为检索结果的最小值的最小关键字、或作为检索结果的最大值的最大关键字以及所述处理源识别符,将该最小关键字或最大关键字存储到所述合并完毕关键字存储区域,并且从所述配对节点树中删除该最小关键字或最大关键字;以及
下一关键字插入单元,其从由所述合并单元取得的处理源识别符所指示的所述排序完毕关键字存储区域中,取出作为所述最小关键字的下一最小值的下一关键字、或作为所述最大关键字的下一最大值的下一关键字,并且将该取出的下一关键字插入到所述配对节点树,
通过所述合并单元和所述下一关键字插入单元,从所述多个排序完毕关键字存储区域中取出所有关键字,存储在所述合并完毕关键字存储区域中,
由此,以升序或降序方式将所述多个排序完毕关键字存储区域所存储的关键字存储到所述合并完毕关键字存储区域中。
11.根据利要求10所述的比特序列合并排序装置,其中,
所述合并单元具有中间检索部,该中间检索部将包含该删除的最小值或最大值的节点的紧接上位节点作为检索开始节点,进行最小值检索或最大值检索,
并且,所述下一关键字插入单元具有下一关键字大小判定部,该下一关键字大小判定部判定所述已取出的下一关键字是否小于所述中间检索部求出的最小值、或大于所述中间检索部求出的最大值,
当所述下一关键字大小判定部判定为所述下一关键字小于所述最小值、或大于所述最大值时,所述合并单元将该下一关键字存储在所述合并完毕关键字存储区域中,所述下一关键字插入单元再次取出所述下一关键字,
当所述下一关键字大小判定部判定为所述下一关键字大于所述最小值或小于所述最大值时,所述下一关键字插入单元将该下一关键字插入到所述配对节点树。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007314782A JP4502223B2 (ja) | 2007-12-05 | 2007-12-05 | ビット列のマージソート装置、方法及びプログラム |
JP2007-314782 | 2007-12-05 | ||
PCT/JP2008/003116 WO2009072233A1 (ja) | 2007-12-05 | 2008-10-30 | ビット列のマージソート装置、方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101884043A CN101884043A (zh) | 2010-11-10 |
CN101884043B true CN101884043B (zh) | 2012-07-04 |
Family
ID=40717419
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200880119130XA Expired - Fee Related CN101884043B (zh) | 2007-12-05 | 2008-10-30 | 比特序列合并排序装置、方法以及程序 |
Country Status (5)
Country | Link |
---|---|
US (1) | US8332410B2 (zh) |
EP (1) | EP2244192A4 (zh) |
JP (1) | JP4502223B2 (zh) |
CN (1) | CN101884043B (zh) |
WO (1) | WO2009072233A1 (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8495701B2 (en) * | 2008-06-05 | 2013-07-23 | International Business Machines Corporation | Indexing of security policies |
US8515976B2 (en) | 2008-12-22 | 2013-08-20 | KOUSOKUYA, Inc. | Bit string data sorting apparatus, sorting method, and program |
JP4921453B2 (ja) * | 2008-12-22 | 2012-04-25 | 株式会社エスグランツ | ビット列データソート装置、方法及びプログラム |
CN101968807A (zh) * | 2010-10-15 | 2011-02-09 | 北京思在信息技术有限责任公司 | 一种内容检索的方法及装置 |
US8527546B2 (en) | 2010-11-25 | 2013-09-03 | International Business Machines Corporation | Generating a checkpoint image for use with an in-memory database |
US9155320B2 (en) * | 2011-07-06 | 2015-10-13 | International Business Machines Corporation | Prefix-based leaf node storage for database system |
US9904721B1 (en) * | 2013-01-25 | 2018-02-27 | Gravic, Inc. | Source-side merging of distributed transactions prior to replication |
CN104424204B (zh) * | 2013-08-21 | 2017-08-11 | 华为技术有限公司 | 索引机制合并方法、搜索方法、装置及设备 |
US9588978B2 (en) | 2013-09-30 | 2017-03-07 | International Business Machines Corporation | Merging metadata for database storage regions based on overlapping range values |
JP6016215B2 (ja) | 2013-12-20 | 2016-10-26 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | トライ木構造を有するレコード群を高い効率でマージソートする方法、装置及びコンピュータプログラム |
WO2015097834A1 (ja) * | 2013-12-26 | 2015-07-02 | 株式会社東芝 | 通信制御装置、通信制御方法およびプログラム |
US9519687B2 (en) | 2014-06-16 | 2016-12-13 | International Business Machines Corporation | Minimizing index maintenance costs for database storage regions using hybrid zone maps and indices |
CN105468603B (zh) * | 2014-08-22 | 2019-04-02 | 腾讯科技(深圳)有限公司 | 数据选择方法及装置 |
US10042887B2 (en) | 2014-12-05 | 2018-08-07 | International Business Machines Corporation | Query optimization with zone map selectivity modeling |
JP6380952B2 (ja) | 2014-12-12 | 2018-08-29 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | 多数の要素からなる配列をソートする装置、方法およびプログラム |
CN109271132B (zh) * | 2018-09-19 | 2023-07-18 | 中南大学 | 一种基于机器学习模型的排序方法 |
US11048756B2 (en) * | 2019-01-31 | 2021-06-29 | EMC IP Holding Company LLC | Inserting datasets into database systems utilizing hierarchical value lists |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5287494A (en) * | 1990-10-18 | 1994-02-15 | International Business Machines Corporation | Sorting/merging tree for determining a next tournament champion in each cycle by simultaneously comparing records in a path of the previous tournament champion |
CN1152365A (zh) * | 1994-06-06 | 1997-06-18 | 诺基亚电信公司 | 一种存储和检索数据的方法和一种存储器配置 |
EP1107126A2 (en) * | 1999-12-08 | 2001-06-13 | Hewlett-Packard Company, A Delaware Corporation | A fast, efficient, adaptive, hybrid tree |
US6931424B1 (en) * | 2000-03-21 | 2005-08-16 | Alantro Communications, Inc. | Storage efficient minimization logic |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5852826A (en) * | 1996-01-26 | 1998-12-22 | Sequent Computer Systems, Inc. | Parallel merge sort method and apparatus |
JP3344559B2 (ja) | 1998-06-19 | 2002-11-11 | 三菱電機株式会社 | マージソート処理装置 |
US6571244B1 (en) * | 1999-10-28 | 2003-05-27 | Microsoft Corporation | Run formation in large scale sorting using batched replacement selection |
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 | 日本電気株式会社 | 情報検索方法及び装置 |
EP1648060B1 (en) | 2004-10-14 | 2008-07-23 | Samsung Electronics Co.,Ltd. | Funnel structure vertical external cavity surface-emitting laser (VECSEL) |
JP4408078B2 (ja) * | 2004-12-03 | 2010-02-03 | 三菱電機株式会社 | ソート処理装置及びソート処理方法及びプログラム |
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 | コンピュータ装置及びログ出力プログラム |
JP2007114915A (ja) | 2005-10-19 | 2007-05-10 | Kazumi Sonomoto | 自己診断チェックシステムを活用したユーザー側に設置されている通報装置からの情報送出による自動メンテチェックシステム。 |
JP4271227B2 (ja) * | 2006-10-30 | 2009-06-03 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
JP4271214B2 (ja) * | 2006-07-07 | 2009-06-03 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
JP4379894B2 (ja) * | 2006-11-28 | 2009-12-09 | 株式会社エスグランツ | カップルドノードツリーの分割/結合方法及びプログラム |
JP4402120B2 (ja) | 2007-01-24 | 2010-01-20 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
JP4514768B2 (ja) | 2007-04-19 | 2010-07-28 | 株式会社エスグランツ | カップルドノードツリーの退避/復元装置、退避/復元方法及びプログラム |
EP2149845B1 (en) * | 2007-04-19 | 2013-06-12 | Kousokuya, Inc. | Coupled node tree backup/restore apparatus, backup/restore method, and program |
-
2007
- 2007-12-05 JP JP2007314782A patent/JP4502223B2/ja not_active Expired - Fee Related
-
2008
- 2008-10-30 EP EP08856620A patent/EP2244192A4/en not_active Withdrawn
- 2008-10-30 WO PCT/JP2008/003116 patent/WO2009072233A1/ja active Application Filing
- 2008-10-30 CN CN200880119130XA patent/CN101884043B/zh not_active Expired - Fee Related
-
2010
- 2010-06-03 US US12/801,319 patent/US8332410B2/en not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5287494A (en) * | 1990-10-18 | 1994-02-15 | International Business Machines Corporation | Sorting/merging tree for determining a next tournament champion in each cycle by simultaneously comparing records in a path of the previous tournament champion |
CN1152365A (zh) * | 1994-06-06 | 1997-06-18 | 诺基亚电信公司 | 一种存储和检索数据的方法和一种存储器配置 |
EP1107126A2 (en) * | 1999-12-08 | 2001-06-13 | Hewlett-Packard Company, A Delaware Corporation | A fast, efficient, adaptive, hybrid tree |
US6931424B1 (en) * | 2000-03-21 | 2005-08-16 | Alantro Communications, Inc. | Storage efficient minimization logic |
Also Published As
Publication number | Publication date |
---|---|
WO2009072233A1 (ja) | 2009-06-11 |
US20100250560A1 (en) | 2010-09-30 |
CN101884043A (zh) | 2010-11-10 |
US8332410B2 (en) | 2012-12-11 |
JP2009140161A (ja) | 2009-06-25 |
EP2244192A1 (en) | 2010-10-27 |
EP2244192A4 (en) | 2011-11-23 |
JP4502223B2 (ja) | 2010-07-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101884043B (zh) | 比特序列合并排序装置、方法以及程序 | |
CN101589390B (zh) | 比特序列检索装置、检索方法 | |
CN101911060B (zh) | 数据库的索引关键字更新方法 | |
CN101657818B (zh) | 配对节点树保存/复原方法、最长一致/最短一致检索方法、比特序列检索方法以及存储介质 | |
CN101535993B (zh) | 比特序列检索装置及检索方法 | |
CN101689204B (zh) | 比特序列检索方法以及程序 | |
CN101484895B (zh) | 比特序列检索装置以及检索方法 | |
CN101542485B (zh) | 配对节点树的分割/结合方法和程序 | |
JP4439013B2 (ja) | ビット列検索方法及び検索プログラム | |
CN101802822B (zh) | 比特序列检索装置、检索方法以及程序 | |
CN102741841A (zh) | 比特序列检索装置、检索方法以及程序 | |
CN101911068B (zh) | 比特序列检索装置、检索方法 | |
EP2149845A1 (en) | Coupled node tree save/restore method, longest consistence/shortest consistence retrieval method, bit retrieval method and memory medium | |
JP2011018296A (ja) | カップルドノードツリーのインデックスキー挿入/削除方法 | |
JP5220057B2 (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: 20120704 Termination date: 20141030 |
|
EXPY | Termination of patent right or utility model |