JP5165662B2 - ビット列キー分類・分配装置、分類・分配方法及びプログラム - Google Patents

ビット列キー分類・分配装置、分類・分配方法及びプログラム Download PDF

Info

Publication number
JP5165662B2
JP5165662B2 JP2009246868A JP2009246868A JP5165662B2 JP 5165662 B2 JP5165662 B2 JP 5165662B2 JP 2009246868 A JP2009246868 A JP 2009246868A JP 2009246868 A JP2009246868 A JP 2009246868A JP 5165662 B2 JP5165662 B2 JP 5165662B2
Authority
JP
Japan
Prior art keywords
key
classification
node
link
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
Application number
JP2009246868A
Other languages
English (en)
Other versions
JP2011095849A (ja
JP2011095849A5 (ja
Inventor
敏男 新庄
光裕 國分
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kousokuya Inc
Original Assignee
Kousokuya Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kousokuya Inc filed Critical Kousokuya Inc
Priority to JP2009246868A priority Critical patent/JP5165662B2/ja
Priority to PCT/JP2010/006305 priority patent/WO2011052181A1/ja
Publication of JP2011095849A publication Critical patent/JP2011095849A/ja
Priority to US13/456,955 priority patent/US20120209855A1/en
Publication of JP2011095849A5 publication Critical patent/JP2011095849A5/ja
Application granted granted Critical
Publication of JP5165662B2 publication Critical patent/JP5165662B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • G06F16/322Trees

Landscapes

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

Description

本発明は、分類対象のビット列キーを分類する技術と、分類されたキーを出力先に分配する技術に関する。
近年、社会の情報化が進展し、大規模なデータベースが各所で利用されるようになってきている。このような大規模なデータベースからレコードを検索するには、各レコードの記憶されたアドレスと対応づけられたレコード内の項目をインデックスキーとして検索をし、所望のレコードを探し出すことが通例である。また、全文検索における文字列も、文書のインデックスキーと見なすことができる。
そして、それらのインデックスキーはビット列で表現されることから、データベースの検索はビット列データの検索に帰着されるということができる。
一方、データベースに関連した処理として、下記特許文献1及び下記特許文献2に記載されているように、データベース中のレコードのマージソートが行われている。このマージソートもビット列データのマージソートに帰着される。
基本的なマージソートの手法は、データを2個の対まで分割してそれを並び替え、並び替えられたものを組み合せて行くものである。つまり、ソート対象データの分割を繰り返しながらソートして複数のソート済みのデータを得る前段の処理と、ソート済みのデータのマージを繰り返してソート対象データ全体のソートを行う後段の処理に分かれる。
特許文献2には、マージソートの後段の処理について図1に示す処理が開示されている。
図1に示すように、ブロック1〜ブロックNにはソート済みのデータが格納されており、ブロック1の最小値は13、ブロック2の最小値は8で、次に大きいデータは22であることが例示されている。同様に、ブロック3の最小値が53、ブロック4の最小値が24、ブロックNの最小値が9であると例示されている。
マージソートの後段の処理は、上記ブロック1〜ブロックNの存在を前提としたものである。したがって、図1に示すマージソートを実行するためには、データをN個のブロックに分類することが必要である。
そして、図1に示すように、各ブロックから最小値を取り出し、各ブロックの最小値によるデータ列を生成することによりマージソートを実現している。
ところで、図1に示すように、従来のデータをN個のブロックに分類する手法では、各ブロックに分類されるデータの範囲に重複がある。したがって、各ブロックのサイズをキャッシュメモリに収まるものとすることにより、各ブロック内のソートを高速に実行できるとしても、後段の各ブロック内のデータをマージソートする処理では、ソート対象データ全体のソートを行うため、キャッシュメモリを用いた高速な処理とすることはできない。
一方、ビット列データの検索に用いられるデータ構造として、下記特許文献3にカップルドノードツリーの配列に格納された例が開示されている。配列にカップルドノードツリーを格納するのは、ノードの位置を配列番号で表すことができ、代表ノードの位置を示す位置情報の情報量を削減することができるからである。
また、下記特許文献4には、カップルドノードツリーの任意の部分木の最小値や最大値を検索する手法や、カップルドノードツリーの任意の部分木から昇順あるいは降順でインデックスキーを取り出す手法が開示されている。
以下、図2A及び図2Bを参照して、本発明の背景技術の一つとして、カップルドノードツリーについて説明する。
図2Aは、特許文献3に記載された配列に格納されたカップルドノードツリーの構成例を説明する図である。図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はノード101と同様にブランチノードである。ノード[0]112のノード種別114には0が、弁別ビット位置115には3が、代表ノード番号116には30が格納されている。またノード[1]113は、ノード種別117と参照ポインタ118aで構成されている。ノード種別117には1が格納されており、ノード[1]113がリーフノードであることを示している。参照ポインタ118aには、インデックスキーの記憶領域を参照するポインタが格納されている。以下では表記の簡略化のため、参照ポインタに格納されたデータのことも参照ポインタという。
配列番号30及び31の配列要素に格納されたノード122とノード123からなるノード対121の内容は省略されている。なお、代表ノードをノード[0]で表し、それと対になるノードをノード[1]で表すことがある。また、ある配列番号の配列要素に格納されたノードを、その配列番号のノードということがあり、ノードの格納された配列要素の配列番号を、ノードの配列番号ということもある。さらに、あるリーフノードと、そのリーフノードの参照ポインタが示す記憶領域に格納されたインデックスキーとの関係を示すために、リーフノードに対応するインデックスキーということもあり、インデックスキーに対応するリーフノードということもある。
ノード[0]112、ノード[1]113、ノード122、及びノード123の格納された配列要素にそれぞれ付された0あるいは1は、検索キーで検索を行う場合にノード対のどちらのノードにリンクするかを示すものである。前段のブランチノードの弁別ビット位置にある検索キーのビット値である0か1を代表ノード番号に加えた配列番号のノードにリンクする。したがって、前段のブランチノードの代表ノード番号に、検索キーの弁別ビット位置のビット値を加えることにより、リンク先のノードが格納された配列要素の配列番号を求めることができる。
図2Bは、カップルドノードツリーのツリー構造を概念的に示すとともにとインデックスキーの記憶領域の例を示す図である。
符号410aで示すのが図2Bに例示するカップルドノードツリー400のルートノードである。図示の例では、ルートノード410aは配列番号420に配置されたノード対401aの代表ノードとしている。ツリー構造としては、ルートノード410aの下にノード対401bが、その下層にノード対401cとノード対401fが配置され、ノード対401fの下層にはノード対401hとノード対401gが配置されている。ノード対401cの下にはノード対401dが、さらにその下にはノード対401eが配置されている。
各ノードの前に付された0あるいは1の符号は、図2Aにおいて説明した配列要素の前に付された符号と同じである。検索キーの弁別ビット位置のビット値に応じてツリーをたどり、検索対象のインデックスキーに対応するリーフノードを見つけることになる。
図示された例では、ルートノード410aのノード種別460aは0でブランチノードであることを示し、弁別ビット位置430aは0を示している。代表ノード番号は420aであり、それはノード対401bの代表ノード410bの格納された配列要素の配列番号である。
ノード対401bはノード410bと411bで構成され、それらのノード種別460b、461bはともに0であり、ブランチノードであることを示している。ノード410bの弁別ビット位置430bには1が格納され、リンク先の代表ノード番号にはノード対401cの代表ノード410cの格納された配列要素の配列番号420bが格納されている。
ノード410cのノード種別460cには1が格納されているので、このノードはリーフノードであり、したがって、参照ポインタ450cを含んでいる。参照ポインタ450cには、インデックスキー270cが格納されている記憶領域を参照するポインタを格納する。参照ポインタ450cに格納されたデータのことも参照ポインタといい、符号480cにより表す。他のリーフノードでも同様に、参照ポインタと参照ポインタに格納されたデータを同じ参照ポインタという語で表す。図2Bに例示するインデックスキーの記憶領域311の参照ポインタ480cが指す領域には、インデックスキー270cとして“000111”が記憶されている。
ノード対401cのもう一方のノード411cのノード種別461cは0、弁別ビット位置431cは2であり、代表ノード番号にはノード対401dの代表ノード410dの格納された配列要素の配列番号421cが格納されている。
ノード410dのノード種別460dは0、弁別ビット位置430dは5であり、代表ノード番号にはノード対401eの代表ノード410eの格納された配列要素の配列番号420dが格納されている。ノード410dと対をなすノード411dのノード種別461dは1であり、参照ポインタ451dには、“011010”というインデックスキー271dを格納した記憶領域を示す参照ポインタ481dが格納されている。
ノード対401eのノード410e、411eのノード種別460e、461eはともに1であり双方ともリーフノードであることを示している。ノード410e、411eの参照ポインタ450e、451eにはそれぞれ、値が“010010”であるインデックスキー270eと、“010011”であるインデックスキー271eを格納した記憶領域への参照ポインタ480e、481eが格納されている。
ノード対401bのもう一方のノードであるノード411bの弁別ビット位置431bには2が格納され、リンク先の代表ノード番号にはノード対401fの代表ノード410fの格納された配列要素の配列番号421bが格納されている。
ノード対401fのノード410f、411fのノード種別460f、461fはともに0であり双方ともブランチノードである。それぞれの弁別ビット位置430f、431fには5、3が格納されている。ノード410fの代表ノード番号にはノード対401gの代表ノード410gの格納された配列要素の配列番号420fが格納され、ノード411fの代表ノード番号にはノード対401hの代表ノードであるノード[0]410hの格納された配列要素の配列番号421fが格納されている。
ノード対401gのノード410g、411gのノード種別460g、461gはともに1であり双方ともリーフノードであることを示す。ノード410g、411gのそれぞれの参照ポインタ450g、451gには値が“100010”と“100011”であるインデックスキー270g、271gを格納した記憶領域への参照ポインタ480g、481gが格納されている。
また同じくノード対401hの代表ノードであるノード[0]410hとそれと対をなすノード[1]411hのノード種別460h、461hはともに1であり双方ともリーフノードであることを示している。ノード410h、411hのそれぞれの参照ポインタ450h、451hには値がそれぞれ“101011”と“101100”であるインデックスキー270h、271hを格納した記憶領域への参照ポインタ480h、481hが格納されている。
上述のカップルドノードツリー400からインデックスキー“100010”を検索する処理の流れを簡単に説明する。弁別ビット位置は、左から0、1、2、・・・とする。まず、ビット列“100010”を検索キーとしてルートノード410aから処理をスタートする。ルートノード410aの弁別ビット位置430aは0であるので、検索キー“100010”の弁別ビット位置が0のビット値をみると1である。そこで代表ノード番号の格納された配列番号420aに1を加えた配列番号の配列要素に格納されたノード411bにリンクする。ノード411bの弁別ビット位置431bには2が格納されているので、検索キー“100010”の弁別ビット位置が2のビット値をみると0であるから、代表ノード番号の格納された配列番号421bの配列要素に格納されたノード410fにリンクする。
ノード410fの弁別ビット位置430fには5が格納されているので、検索キー“100010”の弁別ビット位置が5のビット値をみると0であるから、代表ノード番号の格納された配列番号420fの配列要素に格納されたノード410gにリンクする。
ノード410gのノード種別460gは1でありリーフノードであることを示しているので、参照ポインタ480gにより示される記憶領域を参照し、そこに格納されたインデックスキー270gを読み出して検索キーと比較する。すると、インデックスキー270gと検索キーの両方とも値が“100010”であって一致している。このようにしてカップルドノードツリーを用いた検索が行われる。
上述のカップルドノードツリー400を用いた検索は、8個のインデックスキーをそれぞれ8個のリーフノードに対応するグループに分類する処理と見ることができる。すなわち、特許文献3には、ブロック内のインデックスキーが1個であるインデックスキーの分類手法が開示されていると考えることもできる。
しかしながら、上述のマージソートの後段の処理の前提となる、ブロック内のインデックスキーが複数であるインデックスキーの分類手法は開示されていない。
特開2000−010761号公報 特開2006−163565号公報 特開2008−269503号公報 特開2008−112240号公報
そこで、本発明が解決しようとする課題は、ビット列からなるデータ(以下、ビット列キー、あるいは単にキーということがある。また、インデックスキーということもある。)を複数のブロックに分類するとき、キーの値の範囲に重複のない分類手法と分類されたビット列キーを出力先に分配する手法を、カップルドノードツリーの技術を応用して提供することである。
本発明によるN個のブロックへのビット列キーの分類手法は、分類対象のキーを記憶するキー記憶手段からキーを順次分類キーとして選択し、分類キーによりカップルドノードツリーを応用した分類ツリーを生成し、そのリーフノードをそれぞれN個のブロックに分類されるキーと対応付けることにより行う。分類ツリーの段数は、ブロックの個数Nに応じて制限される。
本発明の一つの態様によれば、分類ツリーのリーフノードは、キー記憶手段に記憶されている分類キーの位置情報を取得するために用いるキーアクセス情報を含む。そして、キーアクセス情報を用いてキーの位置情報を取得するためのキー位置検索表を生成する。
分類ツリーの段数nは、2の(n−1)乗がブロックの個数Nと等しいかそれより大きい最小の値に制限される。例えばN=8であれば、n=4となる。
本発明の一つの態様によれば、分類対象のキーすべてにより生成された分類ツリーから、順次リーフノードを取り出し、リーフノードから読み出したキーアクセス情報を用いてキー位置検索表よりリーフノードに対応するブロックに分類されたキーの位置情報を得て、キー記憶手段からキーを読み出して出力先に出力する。
カップルドノードツリーの特徴により、あるリーフノードの直近上位のブランチノードの弁別ビット位置までの上位のビット値は、同一のブロックに分類されるどのキーでも一致し、リーフノードの直近上位のブランチノードの弁別ビット位置までに異なるビット値のあるキーは、他のブロックに分類される。したがって、本発明によれば、カップルドノードツリーの構造を持つ分類ツリーを生成することにより、分類対象のキーの値の範囲に重複がないように、キーを効率的に分類することができる。
ソート済みのデータのマージを繰り返してソート対象データ全体のソートを行う処理を説明する図である。 配列に格納されたカップルドノードツリーの構成例を説明する図である。 カップルドノードツリーのツリー構造を概念的に示す図である。 本発明の一実施の形態における分類処理の概念を説明する図である。 本発明を実施するためのハードウェア構成例を説明する図である。 本発明の一実施の形態に係る分類ツリーのツリー構造を概念的に示すとともに、インデックスキーの管理領域を説明する図である。 分類キー“010011”を挿入する前の状態を説明する図である。 分類キー“010011”の挿入後であって分類キー“010010”を挿入する前の状態を説明する図である。 分類キー“010010”の挿入後であって分類キー“000111”を挿入する前の状態を説明する図である。 ノード対を挿入するため挿入位置のリーフノードのキーリンク表にインデックスキーを連結した状態を説明する図である。 挿入位置のリーフノードのキーリンク表にインデックスキーを連結した後であって分類キー“000111”を挿入した状態を説明する図である。 本発明の一実施の形態における分類処理の処理フロー例を示す図である。 本発明の一実施の形態における分配処理の処理フロー例を示す図である。 本発明の一実施の形態における分類キーにより分類ツリーを生成する処理フロー例を説明する図である。 本発明の一実施の形態における分類キーを分類ツリーに挿入する処理の初段の処理フロー例を示す図である。 本発明の一実施の形態における分類キーを分類ツリーに挿入する処理の中段の処理フロー例を示す図である。 本発明の一実施の形態における分類キーを分類ツリーに挿入する処理の後段の処理フロー例を示す図である。 本発明の一実施の形態における分類キーを挿入位置に挿入する処理フロー例を示す図である。 本発明の一実施の形態における分類キーを、リーフノードのキーリンク表に連結する処理フロー例を示す図である。 本発明の一実施の形態における分類ツリーを探索してリーフノードのキーリンク表に分類キーを連結する処理フロー例を説明する図である。 本発明の一実施の形態におけるインデックスキーの最小値を含むノードを検索する処理フロー例を説明する図である。 本発明の一実施の形態におけるリーフノードのノード対の分類参照ポインタを連結する処理フロー例を説明する図である。 本発明の一実施の形態における、インデックスキーの最小値を含むリーフノードを求め、リーフノードのキーリンク表に連結したインデックスキーを順次取り出す処理の前段の処理フロー例を説明する図である。 本発明の一実施の形態における、インデックスキーの最小値を含むリーフノードを求め、リーフノードのキーリンク表に連結したインデックスキーを順次取り出す処理の後段の処理フロー例を説明する図である。 本発明の一実施の形態におけるビット列キー分類・分配装置の機能ブロック構成例を説明する図である。
図3は、本発明の一実施の形態における分類処理の概念を説明する図である。図3に例示するものは、4つのブロックにキーを分類するものである。したがって、分類ツリーは段である。本発明によるキーの分類は、弁別ビット位置に基づいて、分類ツリーの第1段目から第2段目へ、第2段目から第3段目へと実行されるため、分類処理としては段数2の分類となる。
図3には、分類対象であるキーからなるキー列110が示されている。図3の例示では、キー列110に含まれるキーの存在するキーの位置であるキー位置が110a(以下、キー位置110aのように表記する。)である記憶領域にはキー“1111”が存在する。また、キー位置110b、110c、110d、110eには、それぞれキー“0011”、“1010”、“0001”
、“1110”が存在する。
図3に示す例では、キー列110に含まれるキーを分類済みキー列130a、130b、130c、130dの4つのブロックに分類するため、弁別ビット位置による分類(段数2の分類)140により、分類される。仮に3つのブロックに分類する場合でも、弁別ビット位置による分類(段数2の分類)140により4つのブロックに分類してから隣接する2つのブロックに分類されたものを1つのブロックに分類されたものとして扱えばよいから、ブロック数を2のn乗のものとしても一般性を失わない。
弁別ビット位置による分類(段数2の分類)140の第1段の弁別ビット位置による分類141aで分類に用いる弁別ビット位置142aは0である。インデックスキーのうち、ビット位置0のビット値143aの値が0のものは、点線の矢印の組150aが示すように、第2段の弁別ビット位置による分類141bでさらに分類される。
一方、インデックスキーのうち、ビット位置0のビット値143aの値が1のものは、点線の矢印の組151aが示すように、第2段の弁別ビット位置による分類141cでさらに分類される。
第2段の弁別ビット位置による分類141bで分類に用いる弁別ビット位置142bは2である。第2段の弁別ビット位置による分類141bの分類対象である分類キーのうち、ビット位置2のビット値143bの値が0のインデックスキー“0001”は、点線の矢印150bが示すように、分類済みキー列130aに分類済みキー131aとして格納される。また、第2段の弁別ビット位置による分類141bの分類対象であるインデックスキーのうち、ビット位置2のビット値143bの値が1のインデックスキー“0011”は、点線の矢印151bが示すように、分類済みキー列130bに分類済みキー131bとして格納される。
一方、第2段の弁別ビット位置による分類141cで分類に用いる弁別ビット位置142cは1である。第2段の弁別ビット位置による分類141cの分類対象であるインデックスキーのうち、ビット位置1のビット値143cの値が0のインデックスキー“1010”は、点線の矢印150cが示すように、分類済みキー列130cに分類済みキー131cとして格納される。また、第2段の弁別ビット位置による分類141cの分類対象であるインデックスキーのうち、ビット位置1のビット値143cの値が1の分類キー“1111”と“1110”は、点線の矢印の組151dが示すように、分類済みキー列130dに、それぞれ分類済みキー131d、131eとして格納される。
図4は、本実施形態のためのハードウェア構成例を説明する図である。
図4には、ビット列キー分類・分配装置300がネットワーク347を介してビット列キーソート装置340a、340b、・・・、340mに接続されたシステムが例として記載されている。ビット列キー分類・分配装置300による分類済みのビット列キーの分配先がビット列キーソート装置であるのは1つの例であり、集計処理等の他のアプリケーションにも適用可能である。
また、分配先の装置も、ネットワークを介して接続されたものに限らず、例えばマルチプロセッサシステムの中央処理装置とすることもできる。
本実施形態によるキーの分類は中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。また、例示されたビット列ソート装置340a、340b、・・・、340mへの分類済みキーの分配も、データ処理装置301によりデータ格納装置308を用いて実施される。分類ツリーが記憶される配列309、分類ツリーを検索中にたどるノードが配置された配列要素の配列番号を格納する探索経路スタック310、分類対象であるキーが記憶されているインデックスキーの記憶領域311、及び各ブロックに分類されるキーの位置情報を検索するデータを記憶するインデックスキーの管理領域320を有するデータ格納装置308は、主記憶装置305または外部記憶装置306で実現することができる。
ビット列ソート装置340a、340b、・・・、340mはそれぞれ分配された分類済みキーを並列にソートする。これらの構成例として、ビット列ソート装置340aの構成例が示されている。図4に示すように、ビット列ソートは、中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301aによりデータ格納装置308aを用いて実施される。配列309a、インデックスキーの記憶領域310aを有するデータ格納装置308aは、主記憶装置305aまたは外部記憶装置306aで実現することができる。
図4の例示では、ビット列分類・分配装置300の主記憶装置305、外部記憶装置306及び通信装置307が一本のバス304によりデータ処理装置301に接続されているが、接続方法はこれに限るものではない。また、主記憶装置305をデータ処理装置301内のものとすることもできるし、探索経路スタック310を中央処理装置302内のハードウェアとして実現することも可能である。あるいは、インデックスキーの記憶領域311は外部記憶装置306に、探索経路スタック310とインデックスキーの管理領域320を主記憶装置305に持つなど、使用可能なハードウェア環境、インデックスキー集合の大きさ等に応じて適宜ハードウェア構成を選択できることは明らかである。
なお、特に図示されてはいないが、処理の途中で得られた各種の値や初期設定値等を後の処理で用いるためにそれぞれの処理に応じた主記憶装置305の一時記憶領域が用いられることは当然である。
また、ビット列ソート装置340a、340b、・・・、340mにおける各装置の接続方法やデータ格納装置の構成についても同様である。
図5は、本発明の一実施の形態に係る分類ツリーのツリー構造を概念的に示すとともに、インデックスキーの管理領域を説明する図である。
図5に例示する分類ツリー200は、図2Bに例示するインデックスキーの記憶領域311に記憶されたインデックスキーを4つのブロックに分類するためのものである。
図5に示すインデックスキーの管理領域320には、キー分類表321とキーリンク表322が格納されている。キー分類表321とキーリンク表で、先に述べたキー位置検索表の例を構成しており、キー分類表321のエントリを指す分類参照ポインタは、先に述べたキーアクセス情報の例である。
図5のインデックスキーの管理領域320に記載された370h等の符号は、図2Bのインデックスキーの記憶領域311に記載された270h等の符号で示すインデックスキー“101011”等に対応している。
符号210aで示すのが図5に例示する分類ツリー200のルートノードである。図示の例では、ルートノード210aは配列番号220に配置されたノード対201aの代表ノードとしている。ツリー構造としては、ルートノード210aの下にノード対201bが、その下層にノード対201cとノード対201fが配置されている。
図示された例では、ルートノード210aのノード種別260aは0でブランチノードであることを示し、弁別ビット位置230aは0を示している。代表ノード番号は220aであり、それはノード対201bの代表ノード210bの格納された配列要素の配列番号である。
ノード対201bはノード210bと211bで構成され、それらのノード種別260b、261bはともに0であり、ブランチノードであることを示している。ノード210bの弁別ビット位置230bには1が格納され、リンク先の代表ノード番号にはノード対201cの代表ノード210cの格納された配列要素の配列番号220bが格納されている。
ノード210cのノード種別260cには1が格納されているので、このノードはリーフノードである。分類ツリーのリーフノードは、分類参照ポインタ250cを含んでいる。分類参照ポインタ250cには、インデックスキーの管理領域320に含まれるキー分類表のエントリを指すポインタが格納される。分類参照ポインタ250cに格納されたデータも分類参照ポインタといい、符号280cにより表す。他のリーフノードでも同様に、分類参照ポインタと分類参照ポインタに格納されたデータを同じ分類参照ポインタという語で表す。
ノード対201cのもう一方のノードであるノード211cのノード種別261cにも1が格納されているので、このノードもリーフノードである。ノード211cの分類参照ポインタ251cには、分類参照ポインタ280eが格納されている。
ノード対201bのもう一方のノードであるノード211bの弁別ビット位置231bには2が格納され、リンク先の代表ノード番号にはノード対201fの代表ノードであるノード[0]210fの配置された配列要素の配列番号221bが格納されている。
ノード対201fの代表ノードであるノード[0]210fとそれと対をなすノード[1]211fのノード種別260f、261fはともに1であり双方ともリーフノードである。ノード210f、211fの分類参照ポインタ250f、251fには、それぞれ分類参照ポインタ280g、280hが格納されている。
図5に示すように、分類キーを4つのブロックに分類するための分類ツリー200は、第1段のブランチノードであるルートノード210aと第2段のブランチノードであるノード210bとノード211b、及び第3段目のノードとして、各ブロックに対応する4つのリーフノード210c、211c、210f、211fを含む。以下の説明において、リーフノードに対応するブロックに分類されるインデックスキーを、リーフノードに含まれるインデックスキーということがある。
一方、インデックスキーの管理領域320は、キー分類表321とキーリンク表322を含む。図5に示すインデックスキーの管理領域320の各データの記憶状況は、図2Bに示すインデックスキーの記憶領域311に記憶された全てのインデックスキーを4つのブロックに分類したときのものである。
キー分類表321は、インデックスキーを分類するブロック数に対応して4つのエントリを有する。各エントリの先頭アドレスは、分類ツリー200の4つのリーフノード210c、211c、210f、211fの分類参照ポインタ280c、280e、280g、280hでそれぞれ示される。
また、キー分類表321は、図の例では、各エントリに最小値キー312a、最大値キー312b、キーの出力先312e、先頭リンク312c、及び末尾リンク312dを含む。図に示す例では、分類参照ポインタ280cの指すエントリの先頭リンク312cと末尾リンク312dには、どちらにもキーリンク表322のエントリを指すキー管理ポインタ370cが格納されている。分類参照ポインタ280eの指すエントリの先頭リンク312cと末尾リンク312dには、それぞれキー管理ポインタ370eとキー管理ポインタ371dが格納されている。分類参照ポインタ280gの指すエントリの先頭リンク312cと末尾リンク312dには、それぞれキー管理ポインタ370gとキー管理ポインタ371gが格納されている。分類参照ポインタ280hの指すエントリの先頭リンク312cと末尾リンク312dには、それぞれキー管理ポインタ370hとキー管理ポインタ371hが格納されている。
最小値キー312a、最大値キー312b、キーの出力先312eに格納される値の記載については省略されている。最小値キー312aと最大値キー312bの値は分類ツリー200が生成される途中で書き込まれ、更新されるが、キーの出力先312eは、分類ツリーの生成が終了した後に書き込まれる。なお、キーの出力先については、キー分類表とは別に、分類対象のキーを分類するブロック対応に設定しておくこともできる。
キーリンク表322は、同一のリーフノードに対応付けられるインデックスキーを順次たどることを可能とするためのインデックスキー間のリンク関係を書き込むものであり、分類対象のインデックスキーの数に対応したエントリを有する。例えば、インデックスキーの記憶領域が図2Bに示すものであれば、8つのエントリを有する。各エントリの先頭アドレスは、キー管理ポインタ370c、370e、371e、371d、370g、371g、370h、371hで示されており、それぞれインデックスキー270c、270e、271e、271d、270g、271g、270h、271hに対応付けられている。
キーリンク表322は、図の例では、各エントリにキー参照ポインタ313aとリンク313bを含む。キー参照ポインタ313aは、そのエントリを指すキー管理ポインタに対応付けられたインデックスキーの記憶領域を指す。したがって、インデックスの記憶領域が図2Bに示すものであれば、キー管理ポインタ370c、370e、371e、371d、370g、371g、370h、371hの指すキーリンク表322のキー参照ポインタ313aには、参照ポインタ480c、480e、481e、481d、480g、481g、480h、481hが格納されるが、図5ではキー参照ポインタ313aの記載は省略されている。
キー管理ポインタの指すキーリンク表322のリンク313bには、キー管理ポインタに対応付けられたインデックスキーと同一ブロックに分類されるインデックスキーが対応付けられたキー管理ポインタが格納されている。図5の例示では、キー管理ポインタ370hに対応付けられたインデックスキー270hとキー管理ポインタ371hに対応付けられたインデックスキー271hは、分類参照ポインタ280hに対応するブロックに分類されている。そのブロックの先頭リンク312cであるキー管理ポインタ370hの指すキーリンク表322のリンク313bには、キー管理ポインタ371hが格納されている。インデックスキー271hに対応付けられたキー管理ポインタ371hはキー分類表321の末尾リンクに格納され、インデックスキー271hはブロックの末尾のインデックスキーであるので、キー管理ポインタ371hの指すキーリンク表322のリンク313bにはなにも格納されていない。
同様に、キー管理ポインタ370gに対応付けられたインデックスキー270gとキー管理ポインタ371gに対応付けられたインデックスキー271gは、分類参照ポインタ280gに対応するブロックに分類されている。そのブロックの先頭リンク312cであるインデックスキー270gに対応付けられたキー管理ポインタ370gの指すキーリンク表322のリンク313bには、キー管理ポインタ371gが格納されている。インデックスキー271gに対応付けられたキー管理ポインタ371gはキー分類表321の末尾リンクに格納され、インデックスキー271gはブロックの末尾のインデックスキーであるので、キー管理ポインタ371gの指すリンク313bにはなにも格納されていない。
キー管理ポインタ370eに対応付けられたインデックスキー270eとキー管理ポインタ371eに対応付けられたインデックスキー271e、及びキー管理ポインタ371dに対応付けられたインデックスキー271dは、分類参照ポインタ280eに対応するブロックに分類されている。そのブロックの先頭リンク312cであるインデックスキー270eに対応付けられたキー管理ポインタ370eの指すキーリンク表322のリンク313bには、キー管理ポインタ371eが格納されている。キー管理ポインタ371eの指すキーリンク表322のリンク313bには、キー管理ポインタ371dが格納されている。そして、インデックスキー271dに対応付けられたキー管理ポインタ371dはキー分類表321の末尾リンクに格納され、インデックスキー271dはブロックの末尾のインデックスキーであるので、キー管理ポインタ371dの指すキーリンク表322のリンク313bにはなにも格納されていない。
また、キー管理ポインタ370cに対応付けられたインデックスキー270cは、分類参照ポインタ280cに対応するブロックに分類されている。分類参照ポインタ280cの指すキー分類表321の先頭リンク312cと末尾リンク312dにはともにインデックスキー270cに対応付けられたキー管理ポインタ370cが格納されているので、分類参照ポインタ280cに対応するブロックに分類されているインデックスキーはインデックスキー270cだけである。したがって、キー管理ポインタ370cが指すキーリンク表322のリンク313bには何も格納されていない。
なお、以下の説明において、リーフノードにインデックスキーを対応付けることを、インデックスキーをリーフノードのキーリンク表に連結するということがある。また、インデックスキーが対応付けられたリーフノードを、そのインデックスキーと連結するリーフノードということがある。
上述のキー分類表321の分類参照ポインタに対応するブロックのインデックスキーは、次のようにして全て取り出すことができる。まず、分類参照ポインタの指す先頭リンク312cをキーリンク表322のキー管理ポインタとしてキー参照ポインタ313aを読み出し、キー参照ポインタ313aの指すインデックスキーをインデックスキー記憶領域から取り出す。次にリンク313bをキーリンク表322のキー管理ポインタとしてキー参照ポインタ313aを読み出し、キー参照ポインタ313aの指すインデックスキーをインデックスキー記憶領域から取り出すことを、リンク313bがキー分類表321の末尾リンク312dと等しくなるまで繰り返す。
次に、図6A〜図6Eを参照して、分類ツリー200の生成処理の概要を説明する。分類ツリー200のうちノード211b以下の階層の部分についての説明は省略する。また、すでにインデックスキー271d“011010”がリーフノード210bに対応するブロックに分類されている、すなわちリーフノード210bのキーリンク表に連結されているものとする。なお、以下の説明においては、インデックスキーの記憶領域から読み出され、分類処理の対象となるインデックスキーを、分類キーということがある。また、分類キーを分類ツリーによりリーフノードに対応するブロックに分類すること、すなわちリーフノードのキーリンク表に連結することを、分類ツリーに分類キーを挿入するということがある。分類ツリーの最大段数に制限のあることから、分類ツリーに分類キーを挿入するとき、分類キーと連結するリーフノードを含むノード対を分類ツリーに挿入する場合のほか、分類キーを既存のリーフノードに連結する場合と、既存のリーフノードからなるノード対の直近上位のノードである親ノードをリーフノードとし、そのリーフノードのキーリンク表に分類キーを連結する場合がある。
図6Aは、分類キー270e“010011”を挿入する前の状態である分類ツリー200aを説明する図である。図6Aに示す分類ツリー200aは、図5に示す分類ツリー200のノード210bがリーフノードとなったものであり、その分類参照ポインタ250bには、分類参照ポインタ280dが格納されている。また、ノード211bより下位のノードの記載は省略されている。この下位ノードの記載の省略は、図6B〜図6Eにおいても同様である。
図6Aの点線の矢印290dで示すように、リーフノード210bには分類参照ポインタ280dによりインデックスキーの管理領域320を介してインデックスキー記憶領域311に記憶されたインデックスキー271d“011010”が対応付けられている。言い換えれば、リーフノード210bのキーリンク表にインデックスキー271dが連結されている。
図6Aには、挿入される分類キーとして分類キー271e“010011”とその挿入位置が記載されている。
また、探索経路カウンタのカウント値が記載されている。探索経路カウンタのカウント値は、分類ツリーに分類キーを挿入するときに、分類ツリーの段数の制限を満足しながら、分類キーと連結するリーフノードを含むノード対を分類ツリーに挿入することができるかの判断に用いられる。
探索経路カウンタのカウント値は、例えば初期値を0としてカウントアップし、図6Aに示すように、ルートノードにおいて値1を取るものとする。なお、初期値を分類ツリーの最大段数としてカウントダウンし、カウント値が0か判定をすることにより、同じく、分類ツリーの段数の制限を満足しながら、分類キーと連結するリーフノードを含むノード対を分類ツリーに挿入することができるかの判断を行えることは明らかである。
図6Aの例では、ルートノード210aの弁別ビット位置260aに格納された値が0、挿入される分類キー271e“010011”の0ビット目のビット値が0なので、挿入される分類キー271eによる検索の結果、リーフノード210bが求められる。探索経路カウンタの値はリーフノード210bにおいて2となる。また、分類キー271e“010011”とリーフノード210bのキーリンク表に連結したインデックスキー271d“011010”の上位ビット位置から見て最初に異なるビット値となるビット位置である差分ビット位置と、ブランチノード210aの弁別ビット位置の相対的位置関係により、分類キー271eはリーフノード210bの下位に挿入される。したがって、分類キー271eの挿入位置は、図に示すようにノード210bとなる。分類ツリーの最大段数は3、探索経路カウンタのカウント値は2であるので、段数の制限を満足することから、挿入される分類キー271eと連結するリーフノードを含むノード対を、ノード210bの下位に挿入することが可能である。
図6Bは、分類キー271e“010011”の挿入後であって分類キー270e“010010”を挿入する前の状態である分類ツリー200bを説明する図である。分類キー271e“010011”と連結するリーフノードを含むノード対201dはノード210bの下位に挿入されている。分類ツリー200aではリーフノードであったノード210bはブランチノードとなっており、弁別ビット位置には、インデックスキー271dと分類キー271eの差分ビット位置2が格納されている。ノード210bの代表ノード番号220bは挿入されたノード対201dの代表ノード210dが配置された配列要素の配列番号である。
インデックスキー271dが分類キー271eより大きいので、分類キー271dと連結するリーフノードはノード対201dのノード[1]であるノード211dとなる。図6Bに示すように、図6Aに示すノード210bの内容が、図6Bのノード211dにコピーされている。
一方、ノード対201dのノード[0]であるノード210dが、分類キー271eと連結するリーフノードとなる。その分類参照ポインタ250dには、分類参照ポインタ280eが格納されている。そして、点線の矢印290eで示すように、リーフノード210dには分類参照ポインタ280eによりインデックスキーの管理領域320を介してインデックスキー記憶領域311に記憶された分類キー271e“010011”が対応付けられている。すなわち、分類キー271e“010011”は、リーフノード210dに分類される。
図6Bには、分類ツリー200bに加えて、次に挿入される分類キーとして、分類キー270e“010010”が記載され、分類キー270eの挿入位置としてノード210dが示されている。また、探索経路カウンタのカウント値はリーフノード210dにおいて最大段数である3と表示されている。したがって、段数制限により、ノード210dの下位に分類キー270eと連結するリーフノードを含むノード対を挿入することはできない。
図6Cは、分類キー270e“010010”の挿入後であって分類キー270c“000111”を挿入する前の状態である分類ツリー200cを説明する図である。上述のように、ノード210dの下位に分類キー270eと連結するリーフノードを含むノード対を挿入することはできないので、図6Cの点線の矢印290eで示すように、分類キー270e“010010”を、インデックスキー271e“010011”に加えて、図6Bに示す挿入位置のリーフノード210dのキーリンク表に連結する。この処理については後に詳細に説明するが、インデックスキーの管理領域320のキー分類表321とキーリンク表322の書き込みにより行われる。
図6Cには、分類ツリー200cに加えて、次に挿入される分類キーとして、分類キー270c“000111”が記載され、分類キー270cの挿入位置としてノード210bが示されている。また、探索経路カウンタのカウント値は2段に亘って表示されている。上段に表示されたカウント値は、挿入位置を求める際にカウントされたものであり、1段目のルートノード210aに対応するカウント値1から、2段目の挿入位置であるノード210bに対応するカウント値2にカウントアップされている。下段に表示されたカウント値は、挿入位置であるノード210bを検索開始ノードとして、ノード210bより下位の階層のリーフノードを順次検索し、リーフノードの段数を求める際にカウントされたものであり、検索開始ノード210bに対応するカウント値2から、3段目のリーフノード210dに対応するカウント値3にカウントアップされている。すると、ノード210bの下位に分類キー270cと連結するリーフノードを含むノード対を挿入するとリーフノード210dの段数は4となる。したがって、段数制限を超えるので、ノード210bの下位に分類キー270cと連結するリーフノードを含むノード対を挿入することはできない。
図6Dは、ノード対を挿入するため挿入位置の下位のリーフノードのキーリンク表に連結したインデックスキーを、挿入位置のリーフノードのキーリンク表に連結した状態の分類ツリー200dを説明する図である。上述のとおり、図6Cに示す分類ツリー200cの挿入位置であるノード210bの下位にノード対を挿入することはできない。そこで、本発明によれば、ノード対を構成する2つのリーフノード(子ノード)の親ノードをリーフノードとし、親ノードであるリーフノードのキーリンク表に、2つの子ノードのキーリンク表に連結するインデックスキーを連結する(以下、挿入位置の下位のリーフノードを統合する、あるいはリーフノードを統合する、のように表記することがある。)ことにより、分類ツリーの段数を減らして挿入する分類キーと連結するリーフノードを含むノード対の挿入を可能にする。
図6Dに示すように、分類ツリー200dのノード210bは、図6Cに示す分類ツリー200cのリーフノード210dの内容を、リーフノード210dとリーフノード211dからなるノード対201dの上位のブランチノードであるノード210bに書き込んだものである。そして、図6Dの点線の矢印290eで示すように、インデックスキー270e“010010”、インデックスキー271e“010011”、インデックスキー271d“011010”を、図6Dに示すリーフノード210bのキーリンク表に連結する。
図6Dには、分類ツリー200dに加えて、次に挿入される分類キーとして、分類キー270c“000111”が記載され、分類キー270cの挿入位置としてノード210bが示されている。また、リーフノード210bにおける探索経路カウンタの下段のカウント値は、1つ減って、2と表示されている。したがって、分類ツリー200dの段数が1つ減り、分類ツリー200dのノード210bの下位に、分類キー270cと連結するリーフノードを含むノード対を挿入することが可能である。
図6Eは、挿入位置の下位のリーフノードを統合した後の分類ツリー200dに分類キー270c“000111”を挿入した分類ツリー200eの状態を説明する図である。分類キー270c“000111”と連結するリーフノードを含むノード対201cは、ノード210bの下位に挿入されている。分類ツリー200dではリーフノードであったノード210bはブランチノードとなっており、弁別ビット位置には、分類キー270cとインデックスキー270eの差分ビット位置1が格納されている。ノード210bの代表ノード番号220bは挿入されたノード対201cの代表ノード210cが配置された配列要素の配列番号である。
分類キー270cがインデックスキー270eより小さいので、分類キー270cと連結するリーフノードはノード対201cのノード[0]であるノード210cとなる。その分類参照ポインタ250cには、分類参照ポインタ280cが格納されている。そして、点線の矢印290cで示すように、リーフノード210cには分類参照ポインタ280cによりインデックスキーの管理領域320を介してインデックスキー記憶領域311に記憶された分類キー270c“000111”が対応付けられている。すなわち、分類キー270c“000111”は、リーフノード210cに分類される。
一方、図6Eに示すように、図6Dに示すノード210bの内容が、図6Eのノード211cにコピーされている。
以上説明した流れにより、図5に示す分類ツリー200が生成される。
次に、図7A及び図7Bを参照して、本発明の一実施の形態におけるインデックスキーの分類処理と、分類された分類済みキーを出力先に出力する分配処理の全体の処理の概要を説明する。
図7Aは、本発明の一実施の形態における分類処理の処理フロー例を示す図である。分類処理は、分類キーにより分類ツリーを生成するとともに、インデックスキーの管理領域にデータの書き込みを行い分類対象であるインデックスキーを分類ツリーのリーフノードと対応付けて分類するものである。なお、以下の説明においては、分類キーにより分類ツリーを生成するとともに、インデックスキーの管理領域にデータの書き込みを行うことを、単に分類ツリーを生成するということがある。
図7Aに示すように、まずステップS701において、分類ツリーの最大段数を取得する。この最大段数の取得は、直接最大段数を取得するものであってもよいし、分類対象のキーを分類するブロック数から割り出すものであってもよい。先に述べたように、例えばブロック数が8であれば最大段数が4であるように、ブロック数より小さくない最小の2のべき乗のべき乗数に1を加えた数値を最大段数とすることができる。
次にステップS701aにおいて、インデックスキーの記憶領域のキー参照ポインタに、インデックスキーの記憶領域の先頭のキーの記憶位置を設定する。ここで、インデックスキーの記憶領域のキー参照ポインタは、先に述べた、特に図示されてはいないが、処理の途中で各種の値を設定しておき、後の処理でその設定値を用いるための一時記憶領域の1つである。
次にステップS702において、分類対象の全てのキーは処理済みか判定し、処理済みであれば、ステップS706を介して、図7Bに示すステップS711以降の処理に進み、処理済みでなければ、ステップS703に進む。
ステップS703では、インデックスキーの記憶領域より、キー参照ポインタの指すキーを読み出し、分類キーに設定する。そしてステップS704において、分類キーにより分類ツリーを生成する。ステップS704の分類ツリーの生成処理の詳細については、後に図8、図9A〜図9Cを参照して説明する。
次にステップS705において、インデックスキーの記憶領域のキー参照ポインタに、インデックスキーの記憶領域に記憶された次のキーの記憶位置を設定してステップS702に戻る。ステップS702〜ステップS705のループ処理を、ステップS702で全てのキーは処理済みであると判定されるまで繰り返し、ステップS702で全てのキーは処理済みであると判定される分類処理を終了し、ステップS706において、キー分類表のキーの出力先にキーの出力先を設定して、図7Bに示すステップS711以下の分配処理に進む。
図7Bは、本発明の一実施の形態における分配処理の処理フロー例を示す図である。分配処理は、分類処理で書き込みの行われたインデックスキーの管理領域のデータにより、ブロック毎に分類された分類キーを読み出して出力先に出力するものである。
図7Bに示すように、まずステップS711において、検索開始ノードの配列番号に、分類ツリーのルートノードの配列番号を設定する。次にステップS712において、検索処理においてたどるノードの配置された配列要素の配列番号を格納する探索経路スタックに、最初に格納される配列番号として終端番号を格納する。この終端番号は検索処理でたどるノードの格納された配列要素の配列番号と区別ができるものであればよい。
次にステップS714において、検索開始ノードより配列を検索し、インデックスキーの最小値を含むリーフノードを求め、リーフノードのキーリンク表に連結したインデックスキーを順次取り出す。ステップS714の処理の詳細は、後に図15A及び図15Bを参照して説明する。
次にステップS718で、探索経路スタックから配列番号を取り出し、探索経路スタックのスタックポインタを1つ減らし、ステップS719に進む。ステップS719では、ステップS718で取り出した配列番号が終端番号であるか判定する。判定の結果、終端番号であれば、処理を終了し、終端番号でなければ、ステップS721に進む。
ステップS721では、ステップS718で取り出した配列番号から、その配列番号のノードがノード対のどちらの配列要素に格納されているかのノード位置を得る。例えばノード[0]については偶数番号の配列の配列要素に格納する等により、配列番号からノード位置を求めることができる。
そして、ステップS722で、ステップS721で得たノード位置がノード[1]側であるか否かを判定する。ステップS722においてノード[1]側と判定された場合は、ステップS718に戻る。
ステップS722においてノード[0]側と判定されると、ステップS723に進み、配列番号に1を加算し、そのノードと対をなすノード[1]の配列番号を得る。そして、ステップS724で、検索開始ノードの配列番号に、ステップS723で得たノード[1]の配列番号を設定してステップS714に戻る。
上述のステップS714〜ステップS724のループ処理を、ステップS718で探索経路スタックのスタックポインタを1つ減らしながら、ステップS719で探索経路スタックから取り出した配列番号が終端番号であると判定されるまで繰り返す。探索経路スタックから取り出した配列番号が終端番号であれば、分類ツリーの全てのリーフノードについての処理が完了したので、処理を終了する。
上述の図7Bに示す分類ツリーに格納された分類キーを取り出す処理は、先に述べた特許文献4の図面第10図に開示された、カップルドノードツリーからインデックスキーを昇順で取り出す処理(以下、先発明の処理ということがある)と類似したものである。図7Bに例示したフローでは、リーフノードを昇順で求めているが、降順で求めることによっても、各ブロックに分類されたキーを取り出せることは、当業者に明らかである。
なお、先発明ではリーフノードと連結するインデックスキーは1つであるのに対して、本発明ではリーフノードのキーリンク表に連結するインデックスキーは複数でありえるので、ステップS714において、リーフノードのキーリンク表に連結するインデックスキーを順次取り出す点で本質的に異なる。
次に、図8、図9A〜図9Cを参照して、図7Aに示すステップS704の分類キーにより、分類ツリーを生成する処理の詳細を説明する。
図8は、本発明の一実施の形態における分類キーにより分類ツリーを生成する全体の処理フロー例を説明する図である。 図8に示す処理の前提として、図7Aに示すステップS703において、分類キーが一時記憶領域に設定されている。
図8に示すように、まずステップS801において、ルートノードの配列番号は登録済みか判定する。ルートノードの配列番号が登録済みでなければ、ステップS802以下の処理に進み、上記一時記憶領域に設定されている分類キーと連結するリーフノードをルートノードとする分類ツリーが新たに生成される。
ステップS802では、インデックスキーの管理領域の分類参照ポインタとキー管理ポインタを取得する。ここで取得される分類参照ポインタとキー管理ポインタは、インデックスキーの管理領域320をデータ格納装置308上に設定し、最初に用いるキー分類表のエントリとキーリンク表のエントリのアドレスをそれぞれ決めることにより得られるものである。
次にステップS803において、分類参照ポインタの指すキー分類表の先頭リンクと末尾リンクに、キー管理ポインタを、最小値キーと最大値キーに分類キーを書き込み、ステップS804において、キー管理ポインタの指すキーリンク表のキー参照ポインタに、図7AのステップS703でキーの読み出しに用いたキー参照ポインタを書き込む。
例えば、最初に処理される分類キーが、図2Bに例示する分類キー271dで、図5に示すキー分類表321の最初に用いるエントリを指す分類ポインタが280d、キーリンク表322の最初に用いるエントリを指すキー管理ポインタが371dであるとすると、分類ポインタ280dの指すキー分類表321の最小値キー312aと最大値キー312bに分類キー271dが、先頭リンク312cと末尾リンク312dにキー管理ポインタ371dが、それぞれ書き込まれ、キー管理ポインタ371dの指すキーリンク表322のキー参照ポインタ313aに図2Bに示す参照ポインタ481dが、書き込まれる。
次にステップS805において、配列から空きのノード対を求め、そのノード対のうち代表ノードとなるべき配列要素の配列番号を取得し、ステップS806において、ステップS805で得た配列番号に0を加えた配列番号を求める。(実際には、ステップS805で取得した配列番号に等しい。)。
さらにステップS807において、ステップS806で得た配列番号の配列要素に、生成するルートノードのノード種別として1(リーフノード)と分類参照ポインタとしてステップS802で得た分類参照ポインタを書き込み、ステップS808で、ステップS805で取得したルートノードの配列番号を登録して処理を終了する。
上述の最初に処理される分類キーがキー271dとすると、図6Aに示すリーフノード210bが、最初に生成されるルートノードとなる。なお、図5に示すキー分類表には分類参照ポインタ280dの指すエントリは記載されていないが、分類キーを順次挿入していく過程において、当初用いられていたキー分類表のエントリが他のエントリと結合されて用いられなくなる場合がある。
一方、ステップS801において、ルートノードの配列番号が登録済みであると判定されると、ステップS809に進み、ルートノードが登録済みである分類ツリーに分類キーを挿入することにより、新たな分類ツリーを生成して処理を終了する。ステップS809の処理の詳細は、次に図9A〜図9Cを参照して説明する。
図9Aは、本発明の一実施の形態における分類キーを分類ツリーに挿入する処理の初段の処理フロー例を示す図である。この初段の処理は、分類ツリーのルートノードを検索開始ノードとし、分類キーを検索キーとしてリーフノードを求める検索処理である。先に図6Aを参照して説明したように、リーフノードに至る探索経路上のノードの階層に対応して探索経路カウンタのカウント値がカウントアップされる。
図9Aに示すように、まずステップS901で、配列番号に、ルートノードの配列番号を設定し、ステップS903に進む。
ステップS903では、配列から、配列番号の指す配列要素をノードとして読み出し、ステップS904でノードから、ノード種別を取り出し、ステップS905でノード種別はブランチノードであるか否かを判定する。
ステップS905の判定において、読み出したノードがブランチノードと判定された場合は、ステップS906に進み、ノードから弁別ビット位置を取り出し、更に、ステップS907で、取り出した弁別ビット位置に対応するビット値を分類キーから取り出す。そしてステップS908において、ノードから代表ノード番号を取り出す。さらにステップS909において、代表ノード番号に分類キーから取り出したビット値を加えて新たな配列番号を得て、ステップS902に戻る。
以降、ステップS905の判定においてリーフノードと判定されてステップS910に進むまで、ステップS903〜ステップS909のループ処理を繰り返す。ステップS910では、リーフノードから分類参照ポインタを取り出し、図9Bに示すステップS911に進む。
図9Bは、本発明の一実施の形態における分類キーを分類ツリーに挿入する処理の中段の処理フロー例を示す図である。この中段の処理は、初段の処理で求められたリーフノードのキーリンク表に連結しているキーと分類キーの値を比較し、分類キーをリーフノードのキーリンク表に連結するかを決定し、連結する場合は連結し、連結しない場合には、分類キーと連結するリーフノードを含むノード対の挿入位置を求める処理の準備を行うものである。
図9Bに示すように、まずステップS911において、図9AのステップS910で取り出した分類参照ポインタの指すキー分類表の最小値キーと最大値キーを読み出す。次にステップ915に進み、分類キーは最小値キーより小さいか判定する。
分類キーが最小値キーより小さくなければ、ステップS916において、さらに分類キーは最大値キーより大きいか判定する。ステップS916において、分類キーは最大値キーより大きくないと判定される、すなわち、分類キーの値が最小値キーと最大値キーの値の間であると判定されると、ステップS917で、分類キーを、リーフノードのキーリンク表に連結して挿入処理を終了する。ステップS917の処理の詳細は、後に図11を参照して説明する。
一方、ステップS916において、分類キーは最大値キーより大きいと判定されると、ステップS918に進み、インデックスキーに最大値を設定してステップS920に進む。
また、先に述べたステップS915において、分類キーは最小値キーより小さいと判定されると、ステップS919において、インデックスキーに最小値を設定してステップS920に進む。
ステップS920においては、分類キーとステップS918またはステップS919で設定されたインデックスキーとのビット列比較を例えば排他的論理和で行い、差分ビット列を得る。次にステップS921において、ステップS920で得た差分ビット列から、上位0ビット目から見た最初の不一致ビットのビット位置(差分ビット位置)を得る。この処理は、例えばプライオリティエンコーダを有するCPUではそこに差分ビット列を入力し、不一致のビット位置を得ることができる。また、ソフト的にプライオリティエンコーダと同等の処理を行い最初の不一致ビットのビット位置を得ることも可能である。
次にステップS922aにおいて、挿入位置の配列番号に、ルートノードの配列番号を設定し、図9Cに示すステップS922bに進む。
図9Cは、本発明の一実施の形態における分類キーを分類ツリーに挿入する処理の後段の処理フロー例を示す図である。この後段の処理は、図9Bに示す中段の処理においてなされた準備に基づいて、分類キーをリーフノードのキーリンク表に連結するものである。
図9Cに示すように、まずステップS922bにおいて、探索経路カウンタに、初期値として0を設定してステップS923に進む。
ステップS923では、探索経路カウンタのカウント値を1つ増やす。次にステップS924aにおいて、配列から、挿入位置の配列番号の指す配列要素をノードとして読み出し、ステップS924bにおいて、ノードから、ノード種別を取り出してステップS925に進む。
ステップS925では、ステップS924bで取り出したノード種別はブランチノードを示すか判定する。ノード種別がブランチノードを示すものではない、すなわちリーフノードを示すものであれば、ステップS932に進む。
一方、ノード種別がブランチノードを示すものであればステップS926に進み、ノードから弁別ビット位置を取り出し、ステップS927において、弁別ビット位置はステップS921で得た差分ビット位置より上位の位置関係か判定する。弁別ビット位置が差分ビット位置より上位でなければ、ステップS935に進む。
一方、弁別ビット位置が差分ビット位置より上位であれば、ステップS928aに進む。ステップS928aでは、分類キーから、弁別ビット位置の指すビット値を取り出し、ステップS928bでノードから、代表ノード番号を取り出す。そして、ステップS929において、その代表ノード番号にステップS928aで得た値を加えた値を、挿入位置の配列番号に設定してステップS923に戻る。
上述のステップS923〜ステップS929のループ処理を、ステップS925でノード種別がリーフノードのものと判定されるか、あるいはステップS927でブランチノードの弁別ビット位置が差分ビット位置より上位でないと判定されるまで、ルートノードからの探索を繰り返す。ステップS925あるいはステップS927でループ処理から抜け出す直前のステップS929で設定された挿入位置の配列番号あるいはルートノードがリーフノードの場合はステップS922aで設定された挿入位置の配列番号が、分類キーと連結するリーフノードを含むノード対の挿入位置を示すものである。
上述のステップS923〜ステップS929のループ処理は、探索経路上のブランチノードをたどって、その弁別ビット位置と、分類キーとインデックスキーの差分ビット位置との相対的位置関係を判定するために、図9Aに示す検索処理と同様に、検索開始ノードであるルートノードからリーフノードに向かって探索経路を再度たどるものである。
上記ステップS925で、ステップS924で取り出したノード種別はリーフノードを示すものであると判定されると、ステップS932に進み、探索経路カウンタは分類ツリーの最大段数の値である最大値を示しているか判定する。
探索経路カウンタのカウント値は最大値ではないと判定されると、ステップS933に進み、分類キーを、挿入位置に挿入して挿入処理を終了する。挿入位置のノードがリーフノードであって探索経路カウンタのカウント値は最大値ではない状態の一例は、先に図6Aを参照して説明した状態である。そして、分類キーを、挿入位置に挿入した状態の一例は、図6Bに示すものである。
ステップS933の処理の詳細は、後に図10を参照して説明する。
一方、ステップS932で、探索経路カウンタのカウント値が最大値であると判定されると、ステップS934に進み、分類キーを、リーフノードのキーリンク表に連結して挿入処理を終了する。この探索経路カウンタのカウント値が最大値である状態の一例は、先に図6Bを参照して説明した状態である。そして、分類キーを、リーフノードのキーリンク表に連結した状態の一例は、図6Cに示すものである。
なお、リーフノードの直近上位のブランチノードの弁別ビット位置までの上位のビット値は、同一のブロックに分類されるどのキーでも一致し、リーフノードの直近上位のブランチノードの弁別ビット位置までに異なるビット値のあるキーは、他のブロックに分類されることから、ステップS934において分類キーをリーフノードに連結しても、各ブロックに分類された分類キーの値の範囲に重複が生じることはない。
ステップS934の処理の詳細は、後に図11を参照して説明する。
先に述べたステップS927において、弁別ビット位置はステップS921で得た差分ビット位置より上位の位置関係ではないと判定されると、ステップS935に進む。
ステップS935では、分類キーを挿入位置に挿入したときに、分類ツリーの段数が制限を超えないことを保証する処理を行う。すなわち、挿入位置に分類キーを挿入したときに、挿入位置より下位のリーフノードの段数が最大値を越さないかチェックを行い、制限を越すリーフノードがあれば、そのリーフノードを含むノード対の親ノードをリーフノードとし、該ノード対を構成するリーフノードのキーリンク表に連結するキーを、リーフノードとした親ノードのキーリンク表に連結することを、挿入位置より下位のリーフノードのすべてについて行う。このステップS935の処理により、挿入位置に分類キーを挿入しても、分類ツリーの段数が最大値を越えることはない。
挿入位置に分類キーを挿入したときに、挿入位置より下位のリーフノードの段数が最大値を越える状態の一例は、先に図6Cを参照して説明した状態である。図6Cに示す状態では、挿入位置の下位のリーフノード210dにおける探索経路カウンタの値は最大値の3となっている。
そして、リーフノード210dを含むノード対201dの親ノード210bをリーフノードとして、リーフノード210dのキーリンク表に連結するキー270e、271eとリーフノード210dを含むノード対201dのもう一方のリーフノード211dのキーリンク表に連結するキー271dとを、リーフノードとした親ノード210bのキーリンク表に連結した状態の一例は、図6Dに示すものである。
ステップS935の詳細は、後に図12を参照して説明する。
ステップS935に続いて、ステップS936に進み、先に述べたステップS933と同じく、分類キーを挿入位置に挿入して挿入処理を終了する。リーフノードを含むノード対の親ノードをリーフノードとし、該ノード対を構成するリーフノードのキーリンク表に連結するキーをリーフノードとした親ノードのキーリンク表に連結することにより、探索経路カウンタの値を最大値から1つ減らし、分類キーを挿入位置に挿入した状態の一例は、先に図6Eを参照して説明した状態である。
ステップS936の処理の詳細は、先にステップS933について述べたように、次に図10を参照して説明する。
図10は、本発明の一実施の形態における分類キーを挿入位置に挿入する処理フロー例を示す図であり、図9Cに示すステップS933及びステップS936の詳細な処理を説明するものである。
図10に示すように、まずステップS1001において、配列から空きのノード対を求め、そのノード対のうち代表ノードとなるべき配列要素の配列番号を取得する。次にステップS1002に進み、分類キーと図9Bに示す処理で設定したインデックスキーの大小を比較し、分類キーが大きいときは値1を小さいときは値0のブール値を得る。
さらに、ステップS1003に進み、ステップS1001で得た代表ノードの配列番号にステップS1002で得たブール値を加算した配列番号を得る。また、ステップS1004において、ステップS1001で得た代表ノードの配列番号にステップS1002で得たブール値の論理否定値を加算した配列番号を得る。
次にステップS1005に進み、インデックスキーの管理領域の分類参照ポインタとキー管理ポインタを取得する。ここでインデックスキーの管理領域の分類参照ポインタとキー管理ポインタを取得するのは、挿入する分類キーを含むリーフノードに対応するキー分類表とキーリンク表のエントリを確保するためである。
キーリンク表のエントリ数は分類対象のキーの数であるから、分類対象のキーの数だけ空きエントリの領域を予めインデックスキーの管理領域に確保しておき、取得要求があるたびに順次空きエントリの先頭アドレスをキー管理ポインタとして渡すことにより、キー管理ポインタの取得を実行することができる。
キー分類表のエントリ数は、最終的に必要な数はキーを分類するブロック数、言い換えれば分類ツリーのリーフノードの数であるが、キーリンク表と同様に分類対象のキーの数だけ空きエントリの領域を予めインデックスキーの管理領域に確保しておき、取得要求があるたびに順次空きエントリの先頭アドレスを分類参照ポインタとして渡すことにより、分類参照ポインタの取得を実行することができる。
先に図9Cに示すステップS935の説明において述べた、リーフノードを含むノード対の親ノードをリーフノードとし、該ノード対を構成するリーフノードのキーリンク表に連結するキーを、リーフノードとした親ノードのキーリンク表に連結する処理によって不要となったエントリは、削除されることになる。
次にステップS1006において、ステップS1005で取得した分類参照ポインタの指すキー分類表の先頭リンクと末尾リンクにステップS1005で取得したキー管理ポインタを、最小値キーと最大値キーに分類キーを書き込み、ステップS1007において、キー管理ポインタの指すキーリンク表のキー参照ポインタに、インデックスキーの記憶領域のキー参照ポインタを書き込む。インデックスキーの記憶領域のキー参照ポインタは、図7Aに示すステップS701あるいはステップS705で設定されたものである。
次にステップS1008において、ステップS1003で得た配列番号の指す配列要素のノード種別に1(リーフノード)を、分類参照ポインタにステップS1005で得た分類参照ポインタを書き込む。
ステップS1009に進み、配列から挿入位置の配列番号の配列要素の内容を読み出し、ステップS1010において、ステップS1004で得た配列番号の指す配列要素に、ステップS1009で読み出した内容を書き込む。ここで、挿入位置の配列番号は、図9Cに示すステップS929で設定されたものである。
最後にステップS1011において、挿入位置の配列番号の指す配列要素のノード種別に0(ブランチノード)を、弁別ビット位置に図9Cに示すステップS921で得た差分ビット位置を、代表ノード番号にステップS1001で得た代表ノード番号を書き込み、処理を終了する。
以上説明した図10に示す処理フロー例に、先に説明した図6A及び図6Bの例示を対応付けると、ステップS1001で得た代表ノード番号は図6Bに示すノード210bの代表ノード番号220b、ステップS1002で得たブール値は0、ステップS1008で生成したリーフノードは図6Bに示すノード210d、ステップS1009で読み出した配列要素の内容は図6Aに示すノード210b、ステップS1010で生成したノードは図6Bに示すノード211d、ステップS1011で生成したブランチノードは図6Bに示すノード210bである。
図11は、本発明の一実施の形態における、分類キーをリーフノードのキーリンク表に連結する処理フロー例を示す図であり、図9Bに示すステップS917及び図9Cに示すステップS934の詳細な処理を説明するものである。分類キーをリーフノードのキーリンク表に連結する処理は、分類ツリーには変更を加えることなく、インデックスキーの管理領域のキー分類表とキーリンク表を書き換えることにより行われる。
図11に示すように、まずステップS1101において、インデックスキーの管理領域のキー管理ポインタを取得する。次にステップS1102に進み、キー管理ポインタの指すキーリンク表のキー参照ポインタに、インデックスキーの記憶領域のキー参照ポインタを書き込む。
次にステップS1103に進み、図9Aに示すステップS910において取り出した分類参照ポインタの指すキー分類表の末尾リンクを読み出し、ステップS1104において、末尾リンクの指すキーリンク表のリンクに、ステップS1101で取得したキー管理ポインタを書き込む。そして、ステップS1105に進み、さらにキー管理ポインタを、図9Aに示すステップS910において取り出した分類参照ポインタの指すキー分類表の末尾リンクに書き込む。
次にステップS1106において、図9Aに示すステップS910において取り出した分類参照ポインタの指すキー分類表の最小値キーと最大値キーを読み出し、ステップS1107において、分類キーは最小値キーより小さいか判定する。
分類キーが最小値キーより小さければ、ステップS1108において、図9Aに示すステップS910において取り出した分類参照ポインタの指すキー分類表の最小値キーに分類キーを書き込み、処理を終了する。
分類キーが最小値キーより小さくなければ、ステップS1109において、分類キーは最大値キーより大きいか判定する。分類キーが最大値キーより大きくなければ処理を終了し、分類キーが最大値キーより大きければ、ステップS1110において、図9Aに示すステップS910において取り出した分類参照ポインタの指すキー分類表の最大値キーに分類キーを書き込み、処理を終了する。
なお、上述の図11に例示する処理フローは、図9Bに示すステップS917と図9Cに示すステップS934の処理に共通のものとしているが、図9Bに示すステップS917の処理は分類キーの値が最小値キーの値と最大値キーの値の範囲内であることを前提としているので、図9Bに示すステップS917の処理としては、ステップS1101〜ステップS1105の処理とすることもできる。
図12は、本発明の一実施の形態における分類キーを挿入位置に挿入したときに、分類ツリーの段数が制限を超えないための準備を行う処理フロー例を説明する図であり、図9Cに示すステップS935の詳細な処理を説明するものである。先に図9Cを参照して説明したように、図12に示す処理は、探索経路上の、ステップS929で設定された挿入位置の配列番号の指す配列要素に配置されたブランチノードの弁別ビット位置が、ステップS921で得た差分ビット位置より上位の位置関係ではないと判定されときに実行される。
そして、挿入位置に分類キーを挿入したときに、挿入位置より下位のリーフノードの段数が最大値を越さないかチェックを行い、制限を越すリーフノードがあれば、そのリーフノードを含むノード対の親ノードをリーフノードとして、該親ノードのキーリンク表に、該ノード対を構成するリーフノードのキーリンク表に連結しているキーを連結することを、挿入位置より下位のリーフノードの全てについて行う。
そこで、図12に示す処理においては、挿入位置より下位のリーフノードを全て巡回するために、先に図7Bを参照して説明した分類ツリーに格納された分類キーを取り出す処理と同様に、本願と同一の出願人の出願に係る、特許第4271227号の図面第10図に開示された、カップルドノードツリーからインデックスキーを昇順で取り出す処理と類似した処理を行う。
図12に示すように、まずステップS1201において、検索開始ノードの配列番号に、挿入位置の配列番号を設定し、ステップS1204に進む。ステップS1204においては、検索開始ノードより配列を検索し、インデックスキーの最小値を含むリーフノードを求める。ここで、挿入位置の配列番号は、図9Cに示すステップS929で設定されたものである。ステップS1204の処理の詳細は、後に図13を参照して説明する。
次にステップS1205において、探索経路カウンタのカウント値は最大値か判定する。ここで探索経路カウンタのカウント値は、ステップS1204でリーフノードを求める際にカウントされるものであり、そこで求められたリーフノードが分類ツリーの何段目にあるかを示すものである。
ステップS1205において、探索経路カウンタのカウント値が最大値ではないと判定されると、ステップS1206に進み、探索経路スタックから配列番号を取り出し、探索経路スタックのスタックポインタを1つ減らし、ステップS1209に進む。ステップS1206で探索経路スタックから取り出される配列番号は、ステップS1204において求めた、インデックスキーの最小値を含むリーフノードが配置された配列要素の配列番号か、ステップS1206〜ステップS1212aのループ処理の1回前のループにおけるステップS1206で1つ減らしたスタックポインタの指す配列番号である。
一方、ステップS1205において、探索経路カウンタのカウント値は最大値であると判定されると、ステップS1207に分岐する。ステップS1207では、探索経路スタックから、探索経路スタックのスタックポインタの値を1つ減らして配列番号を取り出し、取り出した配列番号を親ノードの配列番号に設定する。ここでの親ノードは、ステップS1204において求めた、インデックスキーの最小値を含むリーフノードの直近上位のノードである。あるノードの直近上位のノードをそのノードの親ノードといい、直近下位のノードを子ノードという。
次にステップS1208において、ステップS1204で求めたリーフノードのキーリンク表に連結したキーと、そのリーフノードと対をなすリーフノードのキーリンク表に連結したキーとに連結するリーフノードを、ステップS120で設定した配列番号、すなわち親ノードの配列要素に書き込む。言い換えれば、ステップS1204で求めたリーフノードの直近上位のブランチノード(親ノード)をリーフノードとし、リーフノードとした親ノードのキーリンク表に、ステップS1204で求めたリーフノードのキーリンク表に連結したキーと、そのリーフノードと対をなすリーフノードのキーリンク表に連結したキーを連結する。
ステップS1208の処理の詳細は、後に図14を参照して説明する。
次にステップS1208aにおいて、探索経路カウンタのカウント値を1つ減らし、ステップS1209に進む。ここで探索経路カウンタのカウント値を1つ減らすのは、上記ステップS120の処理で親ノードをリーフノードとしたことにより、リーフノードの段数が1つ減ったからである。この処理により、再度ステップS1204において最小値検索を行うときの探索経路カウンタのカウント値を、探索経路の段数と一致させることができる。
ステップS1209では、ステップS1206で取り出した配列番号あるいはステップS1207で取り出した配列番号が挿入位置の配列番号であるか判定する。判定の結果、挿入位置の配列番号であれば、挿入位置のノードより下位の全てのリーフノードについての処理が完了しているので、連結処理を終了する。判定の結果、挿入位置の配列番号でなければ、ステップS1211に進む。
ステップS1211では、ステップS1206あるいはステップS1207で取り出した配列番号から、その配列番号のノードがノード対のどちらの配列要素に格納されているかのノード位置を得る。例えばノード[0]については偶数番号の配列の配列要素に格納する等により、配列番号からノード位置を求めることができる。
そして、ステップS1212で、ステップS1211で得たノード位置がノード[1]側であるか否かを判定する。ステップS1212においてノード[1]側と判定された場合は、ステップS1212aにおいて探索経路カウンタのカウント値を1つ減らしてステップS1206に戻る。
ステップS1212においてノード[0]側と判定されると、ステップS1213に進み、配列番号に1を加算し、そのノードと対をなすノード[1]の配列番号を得る。そして、ステップS1214で、検索開始ノードの配列番号に、ステップS1213で得たノード[1]の配列番号を設定してステップS1204に戻る。
上述のステップS1204〜ステップS1214のループ処理を、ステップS1206で探索経路スタックのスタックポインタを1つ減らしながら、あるいはステップS1207〜ステップS1208aの処理で親ノードをリーフノードとすることによりリーフノードの段数を減らしながら、ステップS1209で探索経路スタックから取り出した配列番号が挿入位置の配列番号であると判定されるまで繰り返す。
図6Cに示す例のように、挿入位置のノードの直近下位のノードがリーフノードでその段数が最大値の場合、ステップS1204で、最小値を含むノードとしてノード210dが得られ、探索経路スタックには、挿入位置のノードの配列番号である220aとノード210dが配置された配列要素の配列番号220bが格納される。探索経路カウンタのカウント値は最大値となっているので、ステップS1207では配列番号220aが取り出され、ステップS1208、ステップS1208aの処理に続いてステップS1209の判定において、配列番号は挿入位置の配列番号であると判定されて処理は終了する。
仮に、分類ツリーの最大段数が4であると図6Cの例を変更すると、ステップS1205の判定によりステップS1206に進み、配列番号220bが探索経路スタックから取り出され、ステップS1209の判定は否定的なものとなり、ステップS1211、ステップS1212及びステップS1213を介してステップS1214に至る。ステップS1214において、検索開始ノードの配列番号に配列番号220b+1が設定され、ノード211dを検索開始ノードとしてステップS1204の最小値検索が行われ、インデックスキーの最小値を含むリーフノードとしてノード211dが得られる。そして、ステップS1206〜ステップS1212aのループ処理が実行され、ステップS1206で挿入位置の配列番号220aが取り出されるとステップS1209の判定により処理を終了する。
最初の最小値検索が行われるときは、挿入位置のノードをルートノードとする部分木の最小値を含むリーフノードが探索されることから、そのリーフノードのノード位置はノード[0]側であり、同一ノード対を構成するノード[1]を検索開始ノードとして次の最小値検索が行われる。最後には、挿入位置のノードをルートノードとする部分木の最大値を含むリーフノードが探索さる。そのリーフノードのノード位置はノード[1]側であり、ステップS1206において探索経路スタックから挿入位置の配列番号が取り出されるまで、ステップS1206〜ステップS1212aのループ処理が繰り返され、ステップS1209で配列番号は挿入位置の配列番号であると判定されて処理を終了する。
図13は、本発明の一実施の形態におけるインデックスキーの最小値を含むノードを検索する処理フロー例を説明する図であり、図12に示すステップS1204の詳細な処理を説明するものである。
図13に、示すように、まずステップS1301において、配列番号に、検索開始ノードの配列番号を設定する。検索開始ノードの配列番号は、図12に示すステップS1201、あるいはステップS1214で設定されている。
次にステップS1302において、探索経路スタックに配列番号を格納する。そして、ステップS1303で、配列から配列番号の指す配列要素をノードとして読み出し、ステップS1304で、該読み出したノードからノード種別を取り出してステップS1305に進む。
テップS1305では、ノード種別はブランチノードのものか判定し、ノード種別がブランチノードのものと判定されると、ステップS1305aに進み、探索経路カウンタの値を1つ増やす。次にステップS1306に進み、ノードから代表ノード番号を取り出し、ステップS1307で、取り出した代表ノード番号に値0を加算してその結果を新たな配列番号として、ステップS1302に戻る。
以降、ステップS1305において、ステップS1304で取り出されたノードがリーフノードと判定されるまでステップS1302からステップS1307までの処理を繰り返し、ステップS1305で、ステップS1304で取り出されたノードがリーフノードと判定されると処理を終了する。
なお、上述の図13を参照して説明したインデックスキーの最小値を含むリーフノードを検索する処理では、カップルドノードツリーは配列に記憶されたものとして説明したが、カップルドノードツリーが配列に記憶されることは必須ではなく、ノード対を構成する2つのノードのうちの代表ノードのみあるいは代表ノードと隣接した記憶領域に配置されたノードのみをリンクしてリーフノードに至ることによりインデックスキーの最小値を含むリーフノードの検索が可能であることは明らかである。
図14は、本発明の一実施の形態におけるリーフノードを含むノード対の親ノードをリーフノードとして、該親ノードのキーリンク表に該ノード対のキーリンク表を連結する処理フロー例を説明する図であり、図12に示すステップS1208の処理の詳細を説明するものである。リーフノードを含むノード対のキーリンク表を親ノードのキーリンク表に連結する処理においては、ノード対をなす各ノードに対応する分類参照ポインタは親ノードの分類参照ポインタに統合される。
図14に示すように、まずステップS1401において、配列から、親ノードの配列番号の指す配列要素をノードとして読み出し、ステップS1402で、該読み出したノードから、代表ノード番号を取り出す。図6Cの例示では、親ノード210bの代表ノード番号220bが取り出される。
次にステップS1403に進み、代表ノード番号に値1を加えて、1側の配列番号を得る。そしてステップS1404において、配列から、1側の配列番号の指す配列要素をノードとして読み出し、ステップS1405において、ノードから、分類参照ポインタを取り出し、1側の分類参照ポインタに設定する。図6Cの例示では、配列番号220b+1の指すノード211dが読み出され、分類参照ポインタ280dが、一時的記憶領域である1側の分類参照ポインタに設定される。
次にステップS1406に進み、代表ノード番号に値0を加えて、ノード位置0の配列番号を得る。そしてステップS1407において、配列から、0側の配列番号の指す配列要素をノードとして読み出し、ステップS1408において、ノードから、分類参照ポインタを取り出し、0側の分類参照ポインタに設定する。図6Cの例示では、配列番号220bの指すノード210dが読み出され、分類参照ポインタ280eが、一時的記憶領域である0側の分類参照ポインタに設定される。
次にステップS1409において、1側の分類参照ポインタの指すキー分類表の、先頭リンクと末尾リンクと最大値キーを読み出し、1側の先頭リンクと1側の末尾リンクに設定するとともに、最大値キーを1側の最大値キーに設定する。
次にステップS1410において、0側の分類参照ポインタの指すキー分類表の末尾リンクを読み出し、ステップS1411において、該読み出した末尾リンクの指すキーリンク表のリンクに、ステップS1409で設定した1側の先頭リンクを書き込む。そしてステップS1412において、0側の分類参照ポインタの指すキー分類表の末尾リンクに1側の末尾リンクを、最大値キーに1側の最大値キーを書き込む。
以上の処理により、リーフノードとする親ノードの分類参照ポインタを0側の子ノードの分類参照ポインタとし、それに合わせたキーリンク表とキー分類表の書き換えが行われる。上記ステップS1411の、0側の分類参照ポインタの指すキー分類表の末尾リンクの指すキーリンク表のリンクに、1側の先頭リンクを書き込む処理は、0側のリーフノードのキーリンク表に連結したキーに続いて1側のリーフノードのキーリンク表に連結したキーへのリンクを設定するものである。
次にステップS1413に進み、親ノードの配列番号の指す配列要素に、ステップS1407で読み出した内容を書き込む。図6C及び図6Dに示す例示では、図6Cに示すノード210dの内容が、図6Dに示すノード210bに書き込まれる。
最後に、ステップS1414で、S140で得た代表ノード番号の指すノード対を削除し、ステップS1415で、S1405で得た1側の分類参照ポインタの指すキー分類表のエントリを削除して処理を終了する。
次に、図15A及び図15Bを参照して、検索開始ノードより配列を検索し、インデックスキーの最小値を含むリーフノードを求め、リーフノードのキーリンク表に連結したインデックスキーを順次取り出す処理について説明する。図15A及び図15Bに例示する処理フローは、図7Bに示すステップS714の処理の詳細を説明するものである。
図15Aは、本発明の一実施の形態における、検索開始ノードより配列を検索し、インデックスキーの最小値を含むリーフノードを求め、リーフノードのキーリンク表に連結したインデックスキーを順次取り出す処理の前段の処理フロー例を説明する図である。図15Aに例示する前段の処理は、検索開始ノードより配列を検索し、インデックスキーの最小値を含むリーフノードを求め、リーフノードから、分類参照ポインタを取り出すものである。
図15Aに示すように、まずステップS1501において、配列番号に、検索開始ノードの配列番号を設定する。ここで検索開始ノードの配列番号は、図7Bに示すステップS711で設定された分類ツリーのルートノードの配列番号か、ステップS724で設定されたノード[1]の配列番号である。
次にステップS1501aにおいて、探索経路スタックに配列番号を格納する。そして、ステップS1502に進み、配列から、配列番号の指す配列要素をノードとして読み出し、ステップS1503において、該読み出したノードから、ノード種別を取り出してステップS1504に進む。
ステップS1504では、ステップS1503で取り出したノード種別はブランチノードを示すものか判定する。ノード種別がブランチノードを示すものであれば、ステップS1505に進み、ステップS1502で読み出したノードから、代表ノード番号を取り出し、ステップS1506において、該取り出した代表ノード番号に値0を加えて、配列番号を得て、ステップS1501aに戻る。
一方、ステップS1504において、ステップS1503で取り出したノード種別がリーフノードと判定されると、ステップS1508に進み、ステップS1502で読み出したノードから、分類参照ポインタを取り出して、図15Bに示すステップS1511に進む。
図15Bは、本発明の一実施の形態における、検索開始ノードより配列を検索し、インデックスキーの最小値を含むリーフノードを求め、リーフノードのキーリンク表に連結したインデックスキーを順次取り出す処理の後段の処理フロー例を説明する図である。図15Bに例示する後段の処理は、前段の処理で求めたインデックスキーの最小値を含むリーフノードのキーリンク表に連結するインデックスキーを順次取り出して出力先に出力するものである。
図15Bに示すように、ステップS1511において、図15Aに示すステップS1508で取り出した分類参照ポインタの指すキー分類表の先頭リンクと末尾リンク、キーの出力先を読み出し、ステップS1512において、読出ポインタに、該読み出した先頭リンクを設定する。
次にステップS1513において、読出ポインタの指すキーリンク表のキー参照ポインタとリンクを読み出す。ここで読み出しポインタは、ステップS1512あるいは後記ステップS1516で設定されたものである。
次にステップS1513aにおいて、インデックスキーの格納領域より、ステップS1513で読み出したキー参照ポインタの指すキーを読み出し、ステップS1514において、該読み出したキーをステップS1511で読み出したキーの出力先に出力し、ステップS1515に進む。
ステップS1515では、読出ポインタと末尾リンクは一致するか判定し、一致しなければステップS1516において、読出ポインタに、ステップS1513で読み出したリンクを設定してステップS1513に戻る。
ステップS1515において、読出ポインタと末尾リンクが一致すると判定されると、図15Aに示す前段の処理で求めたインデックスキーの最小値を含むリーフノードのキーリンク表に連結するインデックスキーは全て出力先に出力されたので、処理を終了する。
以上、本発明の実施の形態に係るビット列キーの分類手法と分配手法を実現する処理フローについて説明をした。これらの処理フローを図4に例示するデータ処理装置301のようなコンピュータに実行させるプログラムにより、本発明に係るビット列キー分類装置とビット列キー分配装置をコンピュータ上に構築可能なことは明らかである。
そこで、本発明に係るビット列キー分類装置とビット列キー分配装置の機能構成例について、以下に説明する。
図16は、本発明の一実施の形態におけるビット列キー分類・分配装置の機能ブロック構成例を説明する図である。
図16に示すように、ビット列キー分類装置500は、分類ツリー最大段数取得手段510、分類ツリー生成手段520、キー記憶手段550を含んで構成され、分類ツリー最大段数取得手段510で取得した最大段数の制限の中で、キー記憶手段550に記憶された分類対象のビット列キーを分類キーとして読み出し、分類ツリー530とキー位置検索表540を生成することにより、分類対象のビット列キーを分類する。
キー位置検索表540は、キー分類表321とキーリンク表322とすることができる。
ビット列キー分配装置600は、リーフノード取り出し手段610と分類キー出力手段620を含んで構成され、リーフノード取り出し手段610は分類ツリー530からリーフノードを順次取り出し、分類キー出力手段620は、リーフノード取り出し手段610が取り出したリーフノードからキーアクセス情報を読み出し、キーアクセス情報を用いてキー位置検索表からキーの位置情報を取り出し、キーの位置情報に基づいてキーを前記キー記憶手段から読み出して出力先に出力する。なお、キーの出力先は、分類処理の終了時にキー分類表に設定することもできるが、分類対象のキーを分類するブロックに対応して設定しておき、分類ツリーからリーフノードを取り出す毎に、決定することもできる。
100 配列
101 ノード
102 ノード種別
103 弁別ビット位置
104 代表ノード番号
110 キー列
130a 分類済みキー列
140 弁別ビット位置による分類(段数2の分類)
118a 参照ポインタ
200 分類ツリー
210a ルートノード
220 ルートノードの配列番号
280g 分類参照ポインタ
300 ビット列キー分類・分配装置
301 データ処理装置
302 中央処理装置
303 キャッシュメモリ
304 バス
305 主記憶装置
306 外部記憶装置
307 通信装置
308 データ格納装置
309 配列
310 探索経路スタック
311 インデックスキーの記憶領域
320 インデックスキーの管理領域
321 キー分類表
322 キーリンク表
340a ビット列キーソート装置
347 ネットワーク
400 カップルドノードツリー
500 ビット列キー分類装置
520 分類ツリー生成手段
530 分類ツリー
540 キー位置検索表
550 キー記憶手段
600 ビット列キー分配装置
610 リーフノード取り出し手段
620 分類キー出力手段

Claims (22)

  1. ビット列からなる分類対象のキーを分類キーとして選択し、該分類キーの値に基づいて複数のブロックに分類するビット列キー分類装置において、
    前記分類対象のキーを記憶するキー記憶手段と、
    ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、前記分類キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは前記キー記憶手段に記憶されている前記分類キーの位置情報を取得するために用いるキーアクセス情報を含み、
    前記ツリーの任意のノードを検索開始ノードとし、前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の前記分類キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたキーアクセス情報を、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記分類キーによる検索結果とするように構成された分類ツリーを生成する分類ツリー生成手段と、
    前記分類対象のキーを分類する複数のブロックの数に応じた前記分類ツリーの最大段数を取得する分類ツリー最大段数取得手段と、
    を備え、
    前記分類ツリー生成手段は、
    前記キー記憶手段から1つのキーを分類キーとして選択して該分類キーの位置情報を取得し、該取得した分類キーの位置情報を取得するために用いる前記キーアクセス情報を含むリーフノードをルートノードとする前記分類ツリーを生成するとともに、前記キーアクセス情報を用いて前記分類キーの位置情報を取得するための情報を格納するキー位置検索表を生成するルートノード生成手段と、
    前記キー記憶手段からさらに順次分類対象のキーを分類キーとして選択して該分類キーの位置情報を取得し、前記分類ツリー最大段数取得手段で取得した分類ツリーの最大段数の範囲で、該取得した分類キーの位置情報を取得するために用いる前記キーアクセス情報を含むリーフノードを前記分類ツリーに挿入するとともに、前記キー位置検索表に、前記分類ツリーに挿入されるリーフノードの含まれるキーアクセス情報を用いて前記分類キーの位置情報を取得するための情報を追加して新たなキー位置検索表を生成するか、あるいは、前記キー位置検索表の、既存のリーフノードに含まれるキーアクセス情報を用いて分類キーの位置情報を取得する情報に、前記分類キーとして選択された分類対象のキーの位置情報を取得する情報を追加することにより新たなキー位置検索表を生成する分類キー挿入手段と、を含み、
    前記分類対象のキーの全てを前記分類キーとして選択して前記分類ツリーを生成するとともに、該分類ツリーの各リーフノードに含まれるキーアクセス情報を用いて前記分類キーの位置情報を取得する情報を格納する前記キー位置検索表を生成することにより、前記分類対象のキーの全てを、前記各リーフノードに対応する複数のブロックに分類することを特徴とするビット列キー分類装置。
  2. 請求項1記載のビット列キー分類装置において、
    前記キー位置検索表は、前記複数のブロックに対応するエントリを有するキー分類表と、前記分類対象のキーに対応するエントリを有するキーリンク表から構成され、
    前記キー分類表のエントリは、前記キーリンク表のエントリを指すキー管理ポインタが格納される領域である先頭リンクと末尾リンクを含み、
    前記キーリンク表のエントリは、前記対応する分類対象のキーが記憶された前記キー記憶手段の位置情報を指すキー参照ポインタを格納する領域と、前記キー管理ポインタを格納する領域であるリンクを含むものであり、
    前記キーアクセス情報は、前記キー分類表のエントリを指す分類参照ポインタであることを特徴とするビット列キー分類装置。
  3. 請求項2記載のビット列キー分類装置において、
    前記キー分類表のエントリは、さらに、前記対応するブロックに分類されているキーの最小値を格納する領域である最小値キーと前記対応するブロックに分類されているキーの最大値を格納する領域である最大値キーを含み、
    前記ルートノード生成手段は、前記キー記憶手段から1つのキーを分類キーとして選択して読出し、該分類キーの位置情報を取得するとともに、前記キー分類表の空エントリを指す分類参照ポインタを取得し、該分類参照ポインタ含むリーフノードをルートノードとする前記分類ツリーを生成し、さらに、前記キーリンク表の空エントリを指すキー管理ポインタを取得し、該キー管理ポインタを前記取得したキー分類表のエントリの前記先頭リンクと前記末尾リンクに格納し、前記最小値キーと最大値キーに前記読み出した分類キーを格納するとともに、前記取得した位置情報を前記取得したキーリンク表のエントリのキー参照ポインタに格納するものであり、
    前記分類キー挿入手段は、前記キー記憶手段からさらに順次分類対象のキーを分類キーとして選択して読み出し、該分類キーの位置情報を取得するとともに、前記ルートノードを検索開始ノードとして前記分類キーによる検索結果である分類参照ポインタを求める検索手段と、
    前記キーリンク表の空エントリを指すキー管理ポインタを取得し、該キー管理ポインタの指すキーリンク表のキー参照ポインタに前記検索手段が取得した位置情報を格納するとともに、前記分類参照ポインタの指す前記キー分類表のエントリの末尾リンクの指すキーリンク表のリンクに、前記キー管理ポインタを格納することにより、前記分類参照ポインタを用いて分類キーの位置情報を取得するための情報を前記キー分類表とキーリンク表に追加する第1の分類キー連結手段と
    前記キーリンク表の空エントリを指すキー管理ポインタを取得し、該キー管理ポインタの指すキーリンク表のキー参照ポインタに前記検索手段が取得した位置情報を格納するとともに、前記分類参照ポインタの指す前記キー分類表のエントリの末尾リンクの指すキーリンク表のリンクに、前記キー管理ポインタを格納することにより、前記分類参照ポインタを用いて分類キーの位置情報を取得するための情報を前記キー分類表とキーリンク表に追加するとともに、前記分類キーが該分類参照ポインタの指すキー分類表の最小値キーより小さければ、該最小値キーに該分類キーを書き込み、一方、前記分類キーが前記分類参照ポインタの指すキー分類表の最大値キーより大きければ、該最大値キーに該分類キーを書き込む第2の分類キー連結手段と、
    前記検索手段が求めた分類参照ポインタの指す前記キー分類表のエントリの最小値キーあるいは最大値キーの一方を検索結果キーとし、該検索結果キーと前記分類キーの間でビット列比較を行い、該ビット列比較で異なるビット値となる先頭のビット位置である差分ビット位置を求め、前記検索手段が前記分類参照ポインタを求めたときのリンク経路のブランチノードの弁別ビット位置と前記差分ビット位置との相対的位置関係により、前記分類キーの位置情報を取得するために用いる分類参照ポインタを含むリーフノードと該リーフノードと対をなすノードからなるノード対を前記分類ツリーに挿入したときに該ノード対のリンク元となるノードの位置情報を該ノード対の挿入位置として決定するノード対挿入位置決定手段と、
    前記分類キーの位置情報を取得するために用いる分類参照ポインタを含むリーフノードと対をなすノードの内容を、前記挿入位置のノードの内容とし、該挿入位置のノードのノード種別にはブランチノードを示すものを書き込み、弁別ビット位置には前記差分ビット位置を書き込み、代表ノード番号には、前記ノード対挿入位置決定手段で挿入位置を求めたノード対の代表ノードの位置情報を書き込むことで該ノード対を挿入するノード対挿入手段と、
    前記ノード対挿入位置決定手段が決定したノード対の挿入位置に該ノード対を挿入したときに、該挿入位置のノードより下位のリーフノードの段数が前記最大段数を越さないかチェックを行い、前記最大段数を超すリーフノードがあれば、そのリーフノードを含むノード対の直近上位のノードである親ノードをリーフノードとし、前記ノード対を構成するリーフノードそれぞれの分類参照ポインタと、該分類参照ポインタの指す前記キー分類表のデータに基づいて、前記リーフノードとした親ノードの分類参照ポインタを決定するとともに、該分類参照ポインタの指すキー分類表のデータとキーリンク表のデータを更新し、前記ノード対を削除することを、前記挿入位置のノードより下位の全てのリーフノードに対して行うことにより、ノード対を挿入しても前記最大段数を超えないことを保証する処理を行うノード対連結手段と、を含み、
    前記読み出された分類キーの値が、前記検索手段が求めた分類参照ポインタの指す前記キー分類表のエントリの最小値キーの値と最大値キーの値の間の範囲のものである場合に、
    前記第1の分類キー連結手段が、前記分類参照ポインタを用いて分類キーの位置情報を取得するための情報を前記キー分類表とキーリンク表に追加し、
    前記読み出された分類キーの値が、前記検索手段が求めた分類参照ポインタの指す前記キー分類表のエントリの最小値キーの値と最大値キーの値の間の範囲外のものである場合に、
    前記ノード対挿入位置決定手段が、前記ノード対のリンク元となるノードの位置情報を該ノード対の挿入位置として決定し、
    該決定された挿入位置のノードがリーフノードであって、該リーフノードの段数が前記最大段数のとき、前記第2の分類キー連結手段が、前記分類参照ポインタを用いて分類キーの位置情報を取得するための情報を前記キー分類表とキーリンク表に追加するとともに、前記分類キーが該分類参照ポインタの指すキー分類表の最小値キーより小さければ、該最小値キーに該分類キーを書き込み、一方、前記分類キーが前記分類参照ポインタの指すキー分類表の最大値キーより大きければ、該最大値キーに該分類キーを書き込み、
    前記決定された挿入位置のノードがリーフノードであって、該リーフノードの段数が前記最大段数ではないとき、前記ノード対挿入手段が前記ノード対を挿入し、
    前記ノード対挿入位置決定手段が決定した挿入位置のノードがブランチノードのとき、前記ノード対連結手段が前記ノード対を挿入しても前記最大段数を超えないことを保証する処理を行い、前記ノード対挿入手段が前記ノード対を挿入する、
    ことを特徴とするビット列キー分類装置。
  4. 請求項3記載のビット列キー分類装置において、前記分類ツリーは配列に配置され、前記代表ノードの位置を示す位置情報は、該代表ノードが配置された前記配列の配列要素の配列番号であることを特徴とするビット列キー分類装置。
  5. 請求項1記載のビット列キー分類装置により複数のブロックに分類されたキーをブロック毎に取り出して出力するビット列キー分配装置において、
    前記分類ツリーから順次リーフノードを取り出すリーフノード取り出し手段と、
    該取り出したリーフノードから、前記キーアクセス情報を読み出し、該キーアクセス情報を用いて前記キー位置検索表からキーの位置情報を取り出し、該キーの位置情報に基づいて該キーを前記キー記憶手段から読み出して出力先に出力する分類キー出力手段と、
    を備えることを特徴とするビット列キー分配装置。
  6. 請求項5記載のビット列キー分配装置において、
    前記キー位置検索表は、前記複数のブロックに対応するエントリを有するキー分類表と、前記分類対象のキーに対応するエントリを有するキーリンク表から構成され、
    前記キー分類表のエントリは、前記キーリンク表のエントリを指すキー管理ポインタが格納される領域である先頭リンクと末尾リンクを含み、
    前記キーリンク表のエントリは、前記対応する分類対象のキーが記憶された前記キー記憶手段の位置情報を指すキー参照ポインタを格納する領域と、前記キー管理ポインタを格納する領域であるリンクを含むものであり、
    前記キーアクセス情報は、前記キー分類表のエントリを指す分類参照ポインタであることを特徴とするビット列キー分配装置。
  7. 請求項6記載のビット列キー分配装置において、前記分類ツリーは配列に配置され、前記代表ノードの位置を示す位置情報は、該代表ノードが配置された前記配列の配列要素の配列番号であることを特徴とするビット列キー分配装置。
  8. 分類対象のキーを記憶するキー記憶手段を備えたビット列分類装置が、ビット列からなる分類対象のキーを分類キーとして選択し、該分類キーの値に基づいて複数のブロックに分類するビット列キー分類方法において、
    前記分類対象のキーを分類する複数のブロックの数に応じた後記分類ツリーの最大段数を取得する分類ツリー最大段数取得ステップと、
    ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、前記分類キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは前記キー記憶手段に記憶されている前記分類キーの位置情報を取得するために用いるキーアクセス情報を含み、
    前記ツリーの任意のノードを検索開始ノードとし、前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の前記分類キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたキーアクセス情報を、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記分類キーによる検索結果とするように構成された分類ツリーを生成する分類ツリー生成ステップと、
    を備え、
    前記分類ツリー生成ステップは、
    前記キー記憶手段から1つのキーを分類キーとして選択して該分類キーの位置情報を取得し、該取得した分類キーの位置情報を取得するために用いる前記キーアクセス情報を含むリーフノードをルートノードとする前記分類ツリーを生成するとともに、前記キーアクセス情報を用いて前記分類キーの位置情報を取得するための情報を格納するキー位置検索表を生成するルートノード生成ステップと、
    前記キー記憶手段からさらに順次分類対象のキーを分類キーとして選択して該分類キーの位置情報を取得し、前記分類ツリー最大段数取得ステップで取得した分類ツリーの最大段数の範囲で、該取得した分類キーの位置情報を取得するために用いる前記キーアクセス情報を含むリーフノードを前記分類ツリーに挿入するとともに、前記キー位置検索表に、前記分類ツリーに挿入されるリーフノードの含まれるキーアクセス情報を用いて前記分類キーの位置情報を取得するための情報を追加して新たなキー位置検索表を生成するか、あるいは、前記キー位置検索表の、既存のリーフノードに含まれるキーアクセス情報を用いて分類キーの位置情報を取得する情報に、前記分類キーとして選択された分類対象のキーの位置情報を取得する情報を追加することにより新たなキー位置検索表を生成する分類キー挿入ステップと、を含み、
    前記分類対象のキーの全てを前記分類キーとして選択して前記分類ツリーを生成するとともに、該分類ツリーの各リーフノードに含まれるキーアクセス情報を用いて前記分類キーの位置情報を取得する情報を格納する前記キー位置検索表を生成することにより、前記分類対象のキーの全てを、前記各リーフノードに対応する複数のブロックに分類することを特徴とするビット列キー分類方法。
  9. 請求項8記載のビット列キー分類方法において、
    前記キー位置検索表は、前記複数のブロックに対応するエントリを有するキー分類表と、前記分類対象のキーに対応するエントリを有するキーリンク表から構成され、
    前記キー分類表のエントリは、前記キーリンク表のエントリを指すキー管理ポインタが格納される領域である先頭リンクと末尾リンクを含み、
    前記キーリンク表のエントリは、前記対応する分類対象のキーが記憶された前記キー記憶手段の位置情報を指すキー参照ポインタを格納する領域と、前記キー管理ポインタを格納する領域であるリンクを含むものであり、
    前記キーアクセス情報は、前記キー分類表のエントリを指す分類参照ポインタであることを特徴とするビット列キー分類方法。
  10. 請求項9記載のビット列キー分類方法において、
    前記キー分類表のエントリは、さらに、前記対応するブロックに分類されているキーの最小値を格納する領域である最小値キーと前記対応するブロックに分類されているキーの最大値を格納する領域である最大値キーを含み、
    前記ルートノード生成ステップは、前記キー記憶手段から1つのキーを分類キーとして選択して読出し、該分類キーの位置情報を取得するとともに、前記キー分類表の空エントリを指す分類参照ポインタを取得し、該分類参照ポインタ含むリーフノードをルートノードとする前記分類ツリーを生成し、さらに、前記キーリンク表の空エントリを指すキー管理ポインタを取得し、該キー管理ポインタを前記取得したキー分類表のエントリの前記先頭リンクと前記末尾リンクに格納し、前記最小値キーと最大値キーに前記読み出した分類キーを格納するとともに、前記取得した位置情報を前記取得したキーリンク表のエントリのキー参照ポインタに格納するものであり、
    前記分類キー挿入ステップは、前記キー記憶手段からさらに順次分類対象のキーを分類キーとして選択して読み出し、該分類キーの位置情報を取得するとともに、前記ルートノードを検索開始ノードとして前記分類キーによる検索結果である分類参照ポインタを求める検索ステップと、
    前記キーリンク表の空エントリを指すキー管理ポインタを取得し、該キー管理ポインタの指すキーリンク表のキー参照ポインタに前記検索ステップにおいて取得した位置情報を格納するとともに、前記分類参照ポインタの指す前記キー分類表のエントリの末尾リンクの指すキーリンク表のリンクに、前記キー管理ポインタを格納することにより、前記分類参照ポインタを用いて分類キーの位置情報を取得するための情報を前記キー分類表とキーリンク表に追加する第1の分類キー連結ステップと
    前記キーリンク表の空エントリを指すキー管理ポインタを取得し、該キー管理ポインタの指すキーリンク表のキー参照ポインタに前記検索ステップにおいて取得した位置情報を格納するとともに、前記分類参照ポインタの指す前記キー分類表のエントリの末尾リンクの指すキーリンク表のリンクに、前記キー管理ポインタを格納することにより、前記分類参照ポインタを用いて分類キーの位置情報を取得するための情報を前記キー分類表とキーリンク表に追加するとともに、前記分類キーが該分類参照ポインタの指すキー分類表の最小値キーより小さければ、該最小値キーに該分類キーを書き込み、一方、前記分類キーが前記分類参照ポインタの指すキー分類表の最大値キーより大きければ、該最大値キーに該分類キーを書き込む第2の分類キー連結ステップと、
    前記検索ステップにおいて求めた分類参照ポインタの指す前記キー分類表のエントリの最小値キーあるいは最大値キーの一方を検索結果キーとし、該検索結果キーと前記分類キーの間でビット列比較を行い、該ビット列比較で異なるビット値となる先頭のビット位置である差分ビット位置を求め、前記検索ステップにおいて前記分類参照ポインタを求めたときのリンク経路のブランチノードの弁別ビット位置と前記差分ビット位置との相対的位置関係により、前記分類キーの位置情報を取得するために用いる分類参照ポインタを含むリーフノードと該リーフノードと対をなすノードからなるノード対を前記分類ツリーに挿入したときに該ノード対のリンク元となるノードの位置情報を該ノード対の挿入位置として決定するノード対挿入位置決定ステップと、
    前記分類キーの位置情報を取得するために用いる分類参照ポインタを含むリーフノードと対をなすノードの内容を、前記挿入位置のノードの内容とし、該挿入位置のノードのノード種別にはブランチノードを示すものを書き込み、弁別ビット位置には前記差分ビット位置を書き込み、代表ノード番号には、前記ノード対挿入位置決定ステップにおいて挿入位置を求めたノード対の代表ノードの位置情報を書き込むことで該ノード対を挿入するノード対挿入ステップと、
    前記ノード対挿入位置決定ステップにおいて決定したノード対の挿入位置に該ノード対を挿入したときに、該挿入位置のノードより下位のリーフノードの段数が前記最大段数を越さないかチェックを行い、前記最大段数を超すリーフノードがあれば、そのリーフノードを含むノード対の直近上位のノードである親ノードをリーフノードとし、前記ノード対を構成するリーフノードそれぞれの分類参照ポインタと、該分類参照ポインタの指す前記キー分類表のデータに基づいて、前記リーフノードとした親ノードの分類参照ポインタを決定するとともに、該分類参照ポインタの指すキー分類表のデータとキーリンク表のデータを更新し、前記ノード対を削除することを、前記挿入位置のノードより下位の全てのリーフノードに対して行うことにより、ノード対を挿入しても前記最大段数を超えないことを保証する処理を行うノード対連結ステップと、を含み、
    前記読み出された分類キーの値が、前記検索ステップにおいて求めた分類参照ポインタの指す前記キー分類表のエントリの最小値キーの値と最大値キーの値の間の範囲のものである場合に、
    前記第1の分類キー連結ステップにおいて、前記分類参照ポインタを用いて分類キーの位置情報を取得するための情報を前記キー分類表とキーリンク表に追加し、
    前記読み出された分類キーの値が、前記検索ステップにおいて求めた分類参照ポインタの指す前記キー分類表のエントリの最小値キーの値と最大値キーの値の間の範囲外のものである場合に、
    前記ノード対挿入位置決定ステップにおいて、前記ノード対のリンク元となるノードの位置情報を該ノード対の挿入位置として決定し、
    該決定された挿入位置のノードがリーフノードであって、該リーフノードの段数が前記最大段数のとき、前記第2の分類キー連結ステップにおいて、前記分類参照ポインタを用いて分類キーの位置情報を取得するための情報を前記キー分類表とキーリンク表に追加するとともに、前記分類キーが該分類参照ポインタの指すキー分類表の最小値キーより小さければ、該最小値キーに該分類キーを書き込み、一方、前記分類キーが前記分類参照ポインタの指すキー分類表の最大値キーより大きければ、該最大値キーに該分類キーを書き込み、
    前記決定された挿入位置のノードがリーフノードであって、該リーフノードの段数が前記最大段数ではないとき、前記ノード対挿入ステップにおいて前記ノード対を挿入し、
    前記ノード対挿入位置決定ステップにおいて決定した挿入位置のノードがブランチノードのとき、前記ノード対連結ステップにおいて前記ノード対を挿入しても前記最大段数を超えないことを保証する処理を行い、前記ノード対挿入ステップにおいて前記ノード対を挿入する、
    ことを特徴とするビット列キー分類方法。
  11. 請求項10記載のビット列キー分類方法において、前記分類ツリーは配列に配置され、前記代表ノードの位置を示す位置情報は、該代表ノードが配置された前記配列の配列要素の配列番号であることを特徴とするビット列キー分類方法。
  12. ビット列キー分配装置が、請求項1記載のビット列キー分類装置により複数のブロックに分類されたキーをブロック毎に取り出して出力するビット列キー分配方法において、
    前記分類ツリーから順次リーフノードを取り出すリーフノード取り出しステップと、
    該取り出したリーフノードから、前記キーアクセス情報を読み出し、該キーアクセス情報を用いて前記キー位置検索表からキーの位置情報を取り出し、該キーの位置情報に基づいて該キーを前記キー記憶手段から読み出して出力先に出力する分類キー出力ステップと、
    を備えることを特徴とするビット列キー分配方法。
  13. 請求項12記載のビット列キー分配方法において、
    前記キー位置検索表は、前記複数のブロックに対応するエントリを有するキー分類表と、前記分類対象のキーに対応するエントリを有するキーリンク表から構成され、
    前記キー分類表のエントリは、前記キーリンク表のエントリを指すキー管理ポインタが格納される領域である先頭リンクと末尾リンクを含み、
    前記キーリンク表のエントリは、前記対応する分類対象のキーが記憶された前記キー記憶手段の位置情報を指すキー参照ポインタを格納する領域と、前記キー管理ポインタを格納する領域であるリンクを含むものであり、
    前記キーアクセス情報は、前記キー分類表のエントリを指す分類参照ポインタであることを特徴とするビット列キー分配方法。
  14. 請求項13記載のビット列キー分配方法において、前記分類ツリーは配列に配置され、前記代表ノードの位置を示す位置情報は、該代表ノードが配置された前記配列の配列要素の配列番号であることを特徴とするビット列キー分配方法。
  15. 請求項8〜請求項11のいずれか1項記載のビット列キー分類方法をコンピュータに実行させることを特徴とするプログラム。
  16. 請求項8〜請求項11のいずれか1項記載のビット列キー分類方法をコンピュータに実行させるプログラムを記憶したことを特徴とするコンピュータ読み取り可能な記憶媒体。
  17. 請求項12〜請求項14のいずれか1項記載のビット列キー分配方法をコンピュータに実行させることを特徴とするプログラム。
  18. 請求項12〜請求項14のいずれか1項記載のビット列キー分配方法をコンピュータに実行させるプログラムを記憶したことを特徴とするコンピュータ読み取り可能な記憶媒体。
  19. キー記憶手段に記憶され、複数のブロックに分類されたビット列キーを出力先に出力するビット列キー分配装置に用いられるデータ構造において、
    ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、前記分類キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは前記キー記憶手段に記憶されている前記分類キーの位置情報を取得するために用いるキーアクセス情報を含み、
    前記ツリーの任意のノードを検索開始ノードとし、前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の前記分類キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたキーアクセス情報を、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記分類キーによる検索結果とするように構成された分類ツリーと、
    前記キーアクセス情報を用いて前記キーの位置情報を取得するための情報を格納するキー位置検索表と、
    を備え、
    前記ビット列キー分配装置が、前記分類ツリーと前記キー位置検索表により、請求項12記載のビット列キー分配方法を実行し、複数のブロックに分類されたビット列キーの出力先への出力を可能とすることを特徴とするデータ構造。
  20. 請求項19記載のデータ構造において、
    前記キー位置検索表は、前記複数のブロックに対応するエントリを有するキー分類表と、前記分類対象のキーに対応するエントリを有するキーリンク表から構成され、前記キー分類表のエントリは、前記キーリンク表のエントリを指すキー管理ポインタが格納される領域である先頭リンクと末尾リンクを含み、前記キーリンク表のエントリは、前記対応する分類対象のキーが記憶された前記キー記憶手段の位置情報を指すキー参照ポインタを格納する領域と、前記キー管理ポインタを格納する領域であるリンクを含み、
    前記分類ツリーのリーフノードに含まれる前記キーアクセス情報は、前記キー分類表のエントリを指す分類参照ポインタであり、
    前記ビット列キー分配装置が、前記分類ツリー、前記キー分類表及びキーリンク表により、請求項13記載のビット列キー分配方法を実行し、複数のブロックに分類されたビット列キーの出力先への出力を可能とすることを特徴とするデータ構造。
  21. 請求項20記載のデータ構造において、
    前記分類ツリーは配列に配置され、前記代表ノードの位置を示す位置情報は、該代表ノードが配置された前記配列の配列要素の配列番号であり、
    前記ビット列キー分配装置が、前記分類ツリー、前記キー分類表及びキーリンク表により、請求項14記載のビット列キー分配方法を実行し、複数のブロックに分類されたビット列キーの出力先への出力を可能とすることを特徴とするデータ構造。
  22. 請求項19〜請求項21のいずれか1項記載のデータ構造を記憶したことを特徴とするコンピュータ読み取り可能な記憶媒体。
JP2009246868A 2009-10-27 2009-10-27 ビット列キー分類・分配装置、分類・分配方法及びプログラム Expired - Fee Related JP5165662B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2009246868A JP5165662B2 (ja) 2009-10-27 2009-10-27 ビット列キー分類・分配装置、分類・分配方法及びプログラム
PCT/JP2010/006305 WO2011052181A1 (ja) 2009-10-27 2010-10-25 ビット列キー分類・分配装置、分類・分配方法及びプログラム
US13/456,955 US20120209855A1 (en) 2009-10-27 2012-04-26 Bit-string key classification/distribution apparatus, classification/distribution method, and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009246868A JP5165662B2 (ja) 2009-10-27 2009-10-27 ビット列キー分類・分配装置、分類・分配方法及びプログラム

Publications (3)

Publication Number Publication Date
JP2011095849A JP2011095849A (ja) 2011-05-12
JP2011095849A5 JP2011095849A5 (ja) 2012-12-13
JP5165662B2 true JP5165662B2 (ja) 2013-03-21

Family

ID=43921616

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009246868A Expired - Fee Related JP5165662B2 (ja) 2009-10-27 2009-10-27 ビット列キー分類・分配装置、分類・分配方法及びプログラム

Country Status (3)

Country Link
US (1) US20120209855A1 (ja)
JP (1) JP5165662B2 (ja)
WO (1) WO2011052181A1 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104021261A (zh) * 2013-02-28 2014-09-03 国际商业机器公司 医疗领域数据处理方法和装置
JP6016215B2 (ja) 2013-12-20 2016-10-26 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation トライ木構造を有するレコード群を高い効率でマージソートする方法、装置及びコンピュータプログラム
JP6253514B2 (ja) * 2014-05-27 2017-12-27 ルネサスエレクトロニクス株式会社 プロセッサ
US10114559B2 (en) 2016-08-12 2018-10-30 International Business Machines Corporation Generating node access information for a transaction accessing nodes of a data set index
US9990281B1 (en) * 2016-11-29 2018-06-05 Sap Se Multi-level memory mapping
CN107451486B (zh) * 2017-06-30 2021-05-18 华为技术有限公司 一种文件***的权限设置方法及装置
WO2019160133A1 (ja) * 2018-02-19 2019-08-22 日本電信電話株式会社 情報管理装置、情報管理方法及び情報管理プログラム
CN110233946B (zh) * 2019-06-17 2021-09-21 腾讯科技(深圳)有限公司 执行外呼业务方法、电子设备及计算机可读存储介质
JP7237782B2 (ja) * 2019-09-13 2023-03-13 キオクシア株式会社 ストレージシステム及びその制御方法
CN113903410B (zh) * 2021-12-08 2022-03-11 成都健数科技有限公司 一种化合物检索方法及***
CN117997537B (zh) * 2024-04-03 2024-06-11 四川杰通瑞联科技有限公司 具有通用性的数据加密和解密的方法及存储装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005208709A (ja) * 2004-01-20 2005-08-04 Fuji Xerox Co Ltd データ分類処理装置、およびデータ分類処理方法、並びにコンピュータ・プログラム
JP4782490B2 (ja) * 2005-06-29 2011-09-28 富士通株式会社 データ集合分割プログラム、データ集合分割装置、およびデータ集合分割方法
JP4271214B2 (ja) * 2006-07-07 2009-06-03 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
JP4439013B2 (ja) * 2007-04-25 2010-03-24 株式会社エスグランツ ビット列検索方法及び検索プログラム

Also Published As

Publication number Publication date
JP2011095849A (ja) 2011-05-12
WO2011052181A1 (ja) 2011-05-05
US20120209855A1 (en) 2012-08-16

Similar Documents

Publication Publication Date Title
JP5165662B2 (ja) ビット列キー分類・分配装置、分類・分配方法及びプログラム
JP4379894B2 (ja) カップルドノードツリーの分割/結合方法及びプログラム
JP4402120B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4527753B2 (ja) ビット列検索装置、検索方法及びプログラム
CN101535993B (zh) 比特序列检索装置及检索方法
JP5473893B2 (ja) コード列検索装置、検索方法及びプログラム
JP4502223B2 (ja) ビット列のマージソート装置、方法及びプログラム
JP4514768B2 (ja) カップルドノードツリーの退避/復元装置、退避/復元方法及びプログラム
JP2008015872A (ja) ビット列検索装置、検索方法及びプログラム
JP5241738B2 (ja) 表からツリー構造データを構築する方法及び装置
JP2011095849A5 (ja)
JP4439013B2 (ja) ビット列検索方法及び検索プログラム
JP4527807B2 (ja) ビット列検索装置、検索方法及びプログラム
US8166043B2 (en) Bit strings search apparatus, search method, and program
JP4417431B2 (ja) カップルドノードツリーの分割/結合方法及びプログラム
JP3427679B2 (ja) 単語検索装置及び単語検索プログラムを記録したコンピュータ読取り可能な記録媒体
JP2011018296A (ja) カップルドノードツリーのインデックスキー挿入/削除方法
JP5434500B2 (ja) 木構造処理装置及びプログラム
WO2007066414A1 (ja) プログラム、データ抽出装置、及び方法
JP5220057B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4813575B2 (ja) ビット列検索装置
JP2017004128A (ja) 情報処理装置、システム、及びプログラム
JPH01144120A (ja) 階層化ネットワークルート探索装置
JP2009199577A (ja) ビット列検索装置、検索方法及びプログラム

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20121010

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121023

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121023

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20121023

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20121120

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121127

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121128

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121218

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121219

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151228

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees