JP4514810B2 - ビット列検索装置、検索方法及びプログラム - Google Patents
ビット列検索装置、検索方法及びプログラム Download PDFInfo
- Publication number
- JP4514810B2 JP4514810B2 JP2008130242A JP2008130242A JP4514810B2 JP 4514810 B2 JP4514810 B2 JP 4514810B2 JP 2008130242 A JP2008130242 A JP 2008130242A JP 2008130242 A JP2008130242 A JP 2008130242A JP 4514810 B2 JP4514810 B2 JP 4514810B2
- Authority
- JP
- Japan
- Prior art keywords
- node
- key
- search
- position information
- stored
- 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 OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
- G06F16/316—Indexing structures
- G06F16/322—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
さらに本出願人は、特願2008−7690において、複数のキーによる検索のためのカップルドノードツリーであって、複数のキーが直列に連結され、末尾のキーはユニークキーであることを条件としたキー列による検索を行うカップルドノードツリーの構造とそれを用いた検索処理を提案した。
また地図上の地点のように2次元座標で位置が表される点を検索する場合、X座標とY座標について順次それぞれ検索をしているが、地図上の検索対象が増えるにつれて、その検索効率を向上させることが求められてきている。
また、3次元空間内の点を検索する場合でも、事情は同じである。
キー列(以下、多次元キーあるいはインデックスキーということがある。)の検索においては、ブランチノードに含まれる弁別ビット位置の検索キー列の各キーのビット値に応じたノード位置により代表ノードの属するノード群の1つのノードにリンクすることを順次繰り返すことにより実現する。
本発明によれば、カップルドノードツリーのツリー構造におけるノードは、多次元キーを構成する各キーのビット値の組み合わせに対応する位置に配置されたノードから構成されるノード群であるので、ある多次元キーの集合に対して多重カップルドノードツリーを生成したとき、あるノード群のあるノード位置に対応する多次元キーが存在しないことがあり得る。したがって、ノード種別とは別にノード状態を設けてそのノード位置のノードが空であるか使用中であるかを識別するものである。
ノード[0]112はノード101と同様にブランチノードである。ノード[0]112のノード状態114aには1が、ノード種別114bには0が、弁別ビット位置115には3が、代表ノード番号116には30が格納されている。ノード[1]113とノード[2]112aのノード状態はともに0であり、空ノードであることを示している。
ノード[3]113aは、ノード状態117a、ノード種別117b及び参照ポインタ118aで構成されている。ノード状態117a及びノード種別117bには1が格納されており、ノード[3]113aがリーフノードであることを示している。参照ポインタ118aには、インデックスキーの記憶領域を参照するポインタが格納されている。参照ポインタ118aに格納されたデータは、上記の第二の位置情報の具体例である。以下では表記の簡略化のため、参照ポインタに格納されたデータのことも参照ポインタという。
パトリシアツリーについて先に述べたと同様に、インデックスキーと対応するレコードにアクセスするためのアクセス先情報も当然必要である。インデックスキーとアクセス先情報との対応づけは、例えば、インデックスキーを記憶している記憶領域に隣接する記憶領域に、当該インデックスキーに対応するアクセス先情報を記憶することによって行ってもよい。以下ではアクセス先情報については省略して説明する。
配列番号30の配列要素に格納されたノード122、ノード123、ノード122a及びノード123aからなるノード群121の内容は省略されている。
ノード位置は、検索キー列で検索を行う場合にノード群のどのノードにリンクするかを示すものである。すなわち、検索キー列のうち第1のキーの弁別ビット位置にあるビット値と第2のキーの弁別ビット位置にあるビット値からなる2ビットの値を代表ノード番号に加えた配列番号のノードにリンクする。
したがって、前段のブランチノードの代表ノード番号に、該ブランチノードの弁別ビット位置にある検索キー列の第1のキーのビット値と第2のキーのビット値からなる2ビットの値を加えることにより、リンク先のノードが格納された配列要素の配列番号を求めることができる。
なお、上記の例では代表ノード番号をノード群の配置された配列番号のうち小さい方を採用しているが、大きいほうを採用することも可能であることは明らかである。また、代表ノードのノード位置も任意の位置に決定することができることも明らかである。
図2Bの(1)に示すのはダブル・カップルドノードツリーのツリー構造である。符号210aで示すのがルートノードである。図示の例では、ルートノード210aは配列番号220に配置されたノード群201aの代表ノードとしている。
ツリー構造としては、ルートノード210aの下にノード群201bが、その下層にノード群201cとノード群201fが配置され、ノード群201fの下層にはノード群201gが配置されている。ノード群201cの下にはノード群201eが配置されている。
各ノードの前に付された00、01、10、11の符号は、図2Aにおいて説明した配列要素の前に付された符号と同じでありノード位置を示す。検索キー列の各キーの弁別ビット位置のビット値に応じてツリーをたどり、検索対象のインデックスキーに対応するリーフノードを見つけることになる。
ノード群201bはノード210b、211b、212b、213bで構成される。ノード位置が11であるノード213bのノード状態243bのみが0で空ノードであることを示している。ノード位置11のノードが空ノードであるということは、上位のブランチノード210aの弁別ビット位置230aに格納された値0のビット位置の第1のキーと第2のキーのビット値がともに1である2次元キーが、図2Bの(2)に示すインデックスキーの格納領域311に存在しないことを反映している。
ノード210bのノード状態240bは1で、ノード211b、212bのノード状態もノード210bのノード状態240bと同様に1であって使用中であることを示している。それらのノードのうち、ノード210bとノード212bのノード種別260b、262bはともに0であり、ブランチノードであることを示している。
ノード210bの弁別ビット位置230bには1が格納され、リンク先の代表ノード番号にはノード群201cの代表ノード210cの格納された配列要素の配列番号220bが格納されている。ノード212bの弁別ビット位置232bには1が格納され、リンク先の代表ノード番号にはノード群201fの代表ノード210fの格納された配列要素の配列番号222bが格納されている。
ノード群201bのノード位置01に参照ポインタ281dを格納したリーフノード211bが存在することは、参照ポインタ281dで参照するインデックスキーの、ノード群201bの直近上位のブランチノード210aの弁別ビット位置230aで示されるビット位置0のビット値が、第1のキー290dが“0”、第2のキー290d’が“1”であり、そのようなビット値の組み合わせのインデックスキーがほかにないことに対応している。
一方、ノード群201bのノード位置00とノード位置10のノードがブランチノードであるのは、ブランチノード210aの弁別ビット位置230aで示されるビット位置0の第1のキーと第2のキーのビット値の組み合わせが00のものと10のインデックスキーが2つ以上存在し、ビット位置0より下位のビット位置のビット値によりそれらのインデックスキーが弁別されることに対応している。
インデックス格納領域311の参照ポインタ280cが指すエントリの第1のキー290cには“000111”が、第2のキー290c’には“011100”が格納されている。ノード群201cの直近上位のブランチノード210bの弁別ビット位置230bで示されるビット位置1のビット値は、第1のキー290cが“0”、第2のキー290c’が“1”である。リーフノード211bについて説明したと同様に、そのようなビット値の組み合わせのインデックスキーがほかにないことが、ノード群201cのノード位置01に参照ポインタ280cを格納したリーフノード211cが存在することに対応している。
ノード位置11のノード213cのノード状態243cは1、ノード種別263cは0であるので、ノード213cはブランチノードである。弁別ビット位置233cは2であり、代表ノード番号にはノード群201eの代表ノード210eの格納された配列要素の配列番号223cが格納されている。
ノード位置10と11のノード212e、213eのノード状態242e、243eはともに1、ノード種別260e、261eはともに1であり双方ともリーフノードであることを示している。ノード212e、213eの参照ポインタ252e、253eにはそれぞれ、“011010:010100”というキー列290e、290e’と、“011010:011000”というキー列291e、291e’を格納した記憶領域への参照ポインタ280e、281eが格納されている。
ノード位置11のノード213fのノード状態243fは0でありノード213fは空ノードであり、同様にノード212fもノード状態242fが0であるので空ノードである。
まず、第1のキー“101100” と第2のキー“001000”からなるキー列を検索キー列としてルートノード210aから処理をスタートする。ルートノード210aの弁別ビット位置230aは0であるので、検索キー列の第1のキー“101100”及び第2のキー“001000”のビット位置が0のビット値をみるとそれぞれ1と0である。そこで代表ノード番号の格納された配列番号220aに2進数表示で“10”、すなわち2を加えた配列番号の配列要素に格納されたノード位置10のノード212bにリンクする。
次に、ノード212bの弁別ビット位置232bには1が格納されているので、第1のキー“101100”
及び第2のキー“001000”のビット位置が1のビット値をみるとそれぞれ0と0であるから、代表ノード番号の格納された配列番号222bの配列要素に格納されたノード210fにリンクする。
ノード210fの弁別ビット位置230fには2が格納されているので、第1のキー“101100” 及び第2のキー“001000”のビット位置が2のビット値をみるとそれぞれ1である。そこで代表ノード番号の格納された配列番号220fに2進数表示で“11”、すなわち3を加えた配列番号の配列要素に格納されたノード位置11のノード213gにリンクする。
ノード213gのノード種別263gは1でありリーフノードであることを示しているので、参照ポインタ280hにより示される記憶領域を参照し、そこに格納されたインデックスキー290h、290h’を読み出す。このようにしてカップルドノードツリーを用いた検索が行われる。読み出されたインデックスキーを検索キーと比較すると、上記の例の場合は一致していることが分かる。
カップルドノードツリーの構成はインデックスキーの集合により規定される。図2Bの例で、ルートノード210aの弁別ビット位置230aが0であるのは、インデックスキーを構成する第1のキーと第2のキーの0ビット目の組み合わせに異なるものがあるからである。第1のキーおよび第2のキーの0ビット目の組み合わせが00のインデックスキーのグループはノード位置00のノード210bの下に分類され、前記0ビット目の組み合わせが01のインデックスキーのグループはノード位置01のノード211bの下に分類され、前記0ビット目の組み合わせが10のインデックスキーのグループはノード位置10のノード212bの下に分類され、前記0ビット目の組み合わせが11のインデックスキーのグループはノード位置11のノード213bの下に分類される。
先に述べたように、第1のキーおよび第2のキーの0ビット目の組み合わせが11のインデックスキーは存在しないことから、ノード213bは空ノードとなっている。また、ノード位置01のノード211bがリーフノードであるのは、0ビット目のビット値の組み合わせが01であるインデックスキーがほかになく、0ビット目より下位のビットのビット値によりインデックスキーを弁別する必要のないことに対応している。
ノード210bの弁別ビット位置230bが1であるのは、その下位のリーフノード211c、212e、213eに対応するインデックスキーの第1のキー及び第2のキーの1ビット目より上位のビット値がすべて等しく(0ビット目の組み合わせがすべて00)、1ビット目の組み合わせに異なるものがあるという、インデックスキーの集合の性質を反映している。
同様に、ノード212bの弁別ビット位置232bが1であるのは、その下位のリーフノード211f、211g、212g、213gに対応するインデックスキーの第1のキーおよび第2のキーの1ビット目より上位のビット値がすべて等しく(0ビット目の組み合わせがすべて10)、1ビット目の組み合わせに異なるものがあるという、インデックスキーの集合の性質を反映している。
上記インデックスキーの集合の性質が反映されていることは、ノード群201c、201e、201f、201gにおいても同様である。
からなるインデックスキーが含まれていると、ノード212gはブランチノードとなり、その弁別ビット位置は3であり、該インデックスキーに係るリーフノードは、ノード212gのリンク先のノード群のノード位置10に配置される。
例えば、図2Bに示すツリーにおいて、仮にノード212eの参照ポインタ280eが指すインデックスキーがインデックスキーの格納領域311に存在せず、ノード212eが空ノードで、ノード群201eの使用中のノードが213eだけであるとすると、ブランチノード213cの弁別ビット位置233cに格納されたビット位置2のビット値により、リーフノード213cの参照ポインタ281eが指すインデックスキーを弁別する必要はない。 そのかわり、ブランチノード210bの弁別ビット位置230bに格納されたビット位置1のビット値の組み合わせ11により、リーフノード213cの参照ポインタ280cが指すインデックスキーと弁別されることになる。すなわち、リーフノード213eはノード群201cのノード位置11に配置されることになり、ノード群201eのノードは全て空となり、ノード群201eはツリー上に存在しなくなる。
また、ノード211fが空ノードの場合にも、ブランチノード210fはノード群201bのノード位置212bに配置され、ノード群201fは不要となり、削除される。
以上説明したように、カップルドノードツリーの構造は、多次元キーの集合に含まれる多次元キーを構成するキーの各ビット位置のビット値により決定される。
このように、カップルドノードツリーに格納されたインデックスキー(キー列)の各キーのビット構成に応じた弁別ビット位置を用いて分岐が行われる。
本発明の検索装置による検索処理及びデータメンテナンスは中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。カップルドノードツリーが配置される配列309と検索中にたどるノードが格納された配列要素の配列番号を記憶する探索経路スタック310とインデックスキーの記憶領域311を有するデータ格納装置308は、主記憶装置305または外部記憶装置306で実現することができ、あるいは通信装置307を介して接続された遠方に配置された装置を用いることも可能である。図2Aの配列100は配列309の一例である。また、図2Bと同様に、インデックスキーの記憶領域311は連続した領域のように図示されているが、不連続の領域でもよいことは当然である。なお、カップルドノードツリーは配列に配置されるとして説明するため、探索経路スタック310には検索中にたどるノードが格納された配列要素の配列番号を記憶すると説明したが、一般的には、ノードの格納された記憶領域のアドレス等のノードの位置を示す情報が記憶される。
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域が用いられることは当然である。以下の説明では、先に述べた参照ポインタ等の場合と同様に、一時記憶領域に格納されたあるいは設定された値を一時記憶領域の名前で呼ぶことがある。
図3に示した例では、カップルドノードツリーのノードを格納した配列要素からなる配列309と、インデックスキーの記憶領域311とは別の領域である。したがって、リーフノードを格納した配列要素にインデックスキーが含まれる場合に比べて、図3の構成では、一般に1つの配列要素に必要な記憶領域の量が少ない。つまり、カップルドノードツリーを格納する配列309からインデックスキーの記憶領域311を分離することによって、キャッシュメモリ303へのカップルドノードツリーの読み込みにおいて1キャッシュブロックあたりに格納されるノード数を増やすことが可能となる。それにより、後述する検索処理等においてキャッシュミスの頻度が減って処理がより高速に行われるようになる。
図4は、本発明の一実施形態におけるビット列の検索処理を示すフローチャートである。検索キー列は与えられているものとする。
まず、ステップS401において、検索開始ノードを設定する。検索開始ノードの設定は、検索開始ノードの配列番号の指定あるいは取得によりその配列番号、あるいは該配列番号のノードを図示しない検索開始ノード設定エリアに設定することにより行う。なお、上述の検索開始ノード設定エリアは、先に述べた「処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶装置」の1つである。以下の説明では、「図示しない検索開始ノード設定エリアに設定する」のような表現に変えて、「検索開始ノードとして設定する」あるいは単に「検索開始ノードに設定する」のように記述することもある。検索開始ノード以外についても同様である。
ステップS407bでは、すべてのキーを処理済みか判定する。すべてのキーを処理済みであればステップS408に移行し、処理済みでなければステップS407cに進む。
ステップS407cにおいては、検索キー列から列位置の指すキーを取り出し、ステップS406で取り出した弁別ビット位置の指すビット値を取り出す。次にステップS407dにおいて、ノード位置と名付けるワークエリアの、列位置の指すビット位置に、ステップS407cで取り出したビット値を設定する。次にステップS407eで列位置を更新してステップS407bに戻る。上記ステップS407b〜S407eのループ処理は、リンク先のノードのノード位置を決定するものである。
以降、ステップS405の判定においてリーフノードと判定されてステップS410aに進むまで、ステップS402からステップS409aまでの処理を繰り返す。ステップS410aでは、リーフノードから参照ポインタを取り出し、検索を終了する。なお、リーフノードに直接インデックスキーを格納する場合には、リーフノードからインデックスキーを取り出して検索を終了することになるので、以下の説明においては、「リーフノードから参照ポインタあるいはインデックスキーを取り出し」のような表記を用いることがある。
まず、ステップS501aで検索開始ノードにルートノードの配列番号を設定し、ステップS501bで検索キー列に挿入キー列を設定する。インデックスキーへの参照ポインタをリーフノードに格納する実施態様においては、挿入キー列は、挿入処理の前提条件として、予めインデックスキーの格納領域のポインタを取得して、該格納領域に格納されているものとする。
次にステップS510aにおいて、検索キー列により検索開始ノードより図4に示す検索処理を行う。次にステップS510bにおいてステップS510aの検索結果を判定し、検索結果が空ノード、すなわちノード状態が使用中でなければステップS510cに進み、ステップS510aで実行した図4に示す検索処理のステップS409aで得た配列番号の指す配列要素の、ノード状態に使用中を、ノード種別にリーフを、参照ポインタに挿入キー列のポインタを書き込み、挿入処理を終了する。インデックスキーを直接リーフノードに格納する場合は、インデックスキーとして挿入キー列を書き込んで挿入処理を終了する。
次にステップS511aにおいて、ステップS510eでの比較の結果が、挿入キー列のキーと比較キー列のキーが全て等しいものであったかを判定し、等しければ挿入キー列は既にカップルドノードツリーの参照ポインタが指す記憶領域に存在するのであるから、挿入は失敗となり、処理を終了する。等しくなければ次の処理、図6AのステップS512以下の処理に進む。
ステップS512において、配列から空きのノード群を求め、そのノード群のうち代表ノードとなるべき配列要素の配列番号を取得する。次にステップS513aにおいて、ステップS510eで得た挿入キー列と比較キー列の差分ビット位置により挿入ノード位置及び対ノード位置を得る。ステップS513aの詳細は、後に図7Bを参照して説明する。
次にステップS514aに進み、ステップS512で得た代表ノードの配列番号にステップS513aで得たノード位置を加算した配列番号を得る。次にステップS515bに進み、ステップS512で得た代表ノードの配列番号にステップS513aで得た対ノード位置を加算した配列番号を得る。後に図7Bを参照して詳細に説明するが、ステップS514aで得た配列番号は、挿入キー列をインデックスキーとして格納する記憶領域への参照ポインタを持つリーフノードが格納される配列要素の配列番号である。ステップS515bで得た配列番号は、比較キー列に設定したキー列の参照ポインタ持つリーフノードの直近上位のブランチノードが格納される配列要素のものである。つまり、前段の検索処理で得られたリーフノードに対応するインデックスキーと挿入キー列の差分ビット位置における各キーのビット値の組み合わせにより、挿入されるノード群のうちどのノード位置に挿入キー列への参照ポインタを保持するリーフノード及び前段の検索処理で得られたリーフノードの直近上位のブランチノードが格納されるかが決定される。
さらにステップS517aにおいて、ステップS510eで得た差分ビット位置を、差分ビット位置と名付けるワークエリアに設定し、図6Bに示すステップS518に進む。
ステップS518〜ステップS523までの処理は、挿入するノード群のカップルドノードツリー上の位置を求める処理であり、ステップS524以下の処理は各ノードにデータを設定して挿入処理を完成させる処理である。
ステップS518において、探索経路スタックのスタックポインタがルートノードの配列番号を指しているか判定する。指していればステップS524に移行し、指していなければステップS519に進む。
ステップS520に進み、ステップS519で取り出した配列番号の配列要素を配列からノードとして読み出す。次にステップS521において、ステップS520で読み出したノードから、弁別ビット位置を取り出し、ステップS522に進み、ステップS521で取り出した弁別ビット位置がステップS517aで設定した差分ビット位置より上位の位置関係か判定する。ここで上位の位置関係とは、ビット列のより左側の位置、すなわちビット位置の値が小さい位置であることとする。
ステップS522の判定結果が否定であれば、ステップS518に戻り、ステップS518での判定が肯定になるか、ステップS522での判定が肯定になるまでステップS518〜ステップS522の処理を繰り返す。ステップS522での判定が肯定になると、ステップS523に進む。ステップS523では、探索経路スタックのスタックポインタを1つ進め、ステップS524以下の処理に移行する。
また、探索経路スタックを逆にたどりルートノードに至った場合は、ルートノードのリンク先が挿入位置となる。
ステップS524では探索経路スタックからスタックポインタの指す配列番号を取り出す。
ステップS525aに進み、ステップS514aで得た配列番号の指す配列要素の、ノード状態に使用中を、ノード種別にリーフを、参照ポインタに挿入キー列のポインタをあるいはインデックスキーとして挿入キー列を書き込む。
ステップS526に進み、配列からステップS524で得た配列番号の配列要素を読み出す。
次にステップS527において、ステップS515bで得た配列番号の配列要素にステップS526で読み出した内容を書き込む。
最後にステップS528aにおいて、ステップS524で得た配列番号の指す配列要素のノード状態に使用中を、ノード種別にブランチを、弁別ビット位置にステップS517aで設定した差分ビット位置を、代表ノード番号にステップS512で得た配列番号を書き込み、処理を終了する。
次にステップS703において、キー列のすべてのキーについて処理済みであるか判定する。処理済みであればステップS712に移行し、処理済みでなければステップS704に進む。
ステップS704では、挿入キー列から、列位置の指すキーを取り出し、挿入キーとして設定する。
ステップS705に進み、図5に示すステップS510dで設定した比較キー列から、列位置の指すキーを取り出し、比較キーとして設定する。
ステップS708に進み、ステップS707で得た差分ビット列から、上位0ビット目から見た最初の不一致ビットのビット位置を得る。この処理は、例えばプライオリティエンコーダを有するCPUではそこに差分ビット列を入力し、不一致のビット位置を得ることができる。また、ソフト的にプライオリティエンコーダと同等の処理を行い最初の不一致ビットのビット位置を得ることも可能である。
次にステップS709において、ステップS708で得たビット位置が差分ビット位置に設定された値より小さいか判定する。小さければステップS710で差分ビット位置にステップS708で得たビット位置を設定してステップS711に進み、小さくなければ直接ステップS711に進む。
ステップS715では、挿入キー列から列位置の指すキーを取り出し、差分ビット位置の指すビット値を取り出す。次にステップS716で、挿入ノード位置の、列位置の指すビット位置に、ステップS716で取り出したビット値を設定する。
次にステップS717に進み、比較キー列から列位置の指すキーを取り出し、差分ビット位置の指すビット値を取り出す。次にステップS718で、対ノード位置の、列位置の指すビット位置に、ステップS718で取り出したビット値を設定する。次にステップS719で列位置を更新してステップS714に戻る。
ステップS551において、取得することを求められたカップルドノードツリーのルートノードの配列番号が登録済みであるか判定される。登録済みであれば、図5〜図6Bを用いて説明した通常の挿入処理が行われる。
ステップS551での判定が登録済みでなければ、まったく新しいカップルドノードツリーの登録、生成が始まることになる。この場合にもインデックスキーへの参照ポインタをリーフノードに格納する実施態様においては、挿入キー列は挿入処理の前提条件として予めインデックスキーの格納領域のポインタを取得して、その格納領域に格納されているものとする。
まず、ステップS552において、配列から空きのノード群を求め、そのノード群のうち代表ノードとなるべき配列要素の配列番号を取得する。次にステップS553において、ステップS552で得た配列番号に0を加えた配列番号を求める。(実際には、ステップS552で取得した配列番号に等しい。)次にステップS554eにおいて、ステップS553で得た配列番号の配列要素すなわち挿入するルートノードに対応する配列要素の、ノード状態に使用中、ノード種別にリーフを、参照ポインタに挿入キー列のポインタをあるいはインデックスキーとして挿入キー列を書き込む。そしてステップS556では、ステップS553で取得したルートノードの配列番号を登録して処理を終了する。
先にも述べたように、インデックスキーの集合があるとき、そこから順次インデックスキーを取り出し、図8及び図5〜図6Bの処理を繰り返すことにより、インデックスキーの集合に対応した本発明のカップルドノードツリーを構築することができることは明らかである。
図9Aは、削除処理の前段である検索処理の処理フローを示す図であり、図4に示した検索処理において、削除キー列を検索キー列とし、検索開始ノードをルートノードとしたものに相当する。
まず、ステップS901aで検索開始ノードにルートノードの配列番号を設定し、ステップS901bで検索キー列に削除キー列を設定する。
次にステップS910aにおいて、検索キー列により検索開始ノードより図4に示す検索処理を行い、ノード状態が空でなければ参照ポインタあるいはインデックスキーを取得する。ステップS910bにおいて、ステップS910aでの検索結果のノードのノード状態が使用中であるか判定し、使用中でなければ削除失敗を返し、使用中であれば、ステップS910dに進んで参照ポインタの指すキー列あるいはインデックスキーを取り出して比較キー列に設定する。
次にステップS910eにおいて、図7Aに示す処理により削除キー列と比較キー列から差分ビット位置を得る。ステップS911においてステップS910eで実行した図7Aの処理の結果として完全一致が表示されているか、すなわち削除キー列と比較キー列のすべてのキーが等しいか判定し、等しくなければ削除するインデックスキーはカップルドノードツリーに存在しないのであるから、削除は失敗となり、処理を終了する。等しければ次の処理、図9BのステップS912a以下の処理に進む。
まず、ステップS912aで、検索結果のノードが属するノード群に3つ以上のノードが格納されているか、すなわちノード状態が使用中であるノードが3つ以上あるか判定する。この判定は、先に図3に示すハードウェア構成例に関連して「処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶領域が用いられる」と述べたように、検索処理において得られるノード位置を記憶しておき、探索経路スタックにスタックされている配列番号と組み合わせてノード群内の各ノード位置のノード状態にアクセスすることにより行うことができる。
ステップS912では、探索経路スタックに2つ以上の配列番号が格納されているか判定する。2つ以上の配列番号が格納されていないということは、言い換えれば1つだけで、その配列番号はルートノードの格納された配列要素のものである。その場合はステップS918に移行し、ステップS901aで得たルートノードの配列番号に係るノード群を削除し、さらにステップS919でルートノードの配列番号の登録を抹消して、処理を終了する。
次にステップS915において探索経路スタックのスタックポインタを1つ戻して、配列番号を取り出し、ステップS916においてその配列番号の指す配列要素に、ステップS913aで読み出した内容を書き込む。この処理は、先に述べた他のノードを別のノード群に移すことに相当する。
続くステップS917において、ステップS910aで実行した図4に示す検索処理のステップS408で得た代表ノード番号に係るノード群を削除し、処理を終了する。
図に示すように、ステップS101でノード位置に初期値0を設定する。次にステップS102に進み、ステップS910aで実行した図4に示す検索処理のステップS408で得た代表ノード番号にノード位置に設定された値を加えて配列番号を求める。ステップS103で、配列から、ステップS102で求めた配列番号の指す配列要素をノードとして読み出し、ステップS104でその読み出したノードから、ノード状態を取り出す。
次にステップS105において、その取り出したノード状態は使用中であるか判定し、使用中でなければステップS107に進み、使用中であればステップS106に進む。
ステップS106では、ステップS102で求めた配列番号が削除対象のノードの配列番号、すなわちステップS910aで実行した図4に示す検索処理のステップS409aで得た配列番号と一致するか判定し、一致するのであればステップS107に進み、一致しなければ、削除対象のノード以外のもう1つの使用中のノードの内容をステップS103で読み出しているので、処理を終了する。
ステップS107においては、ノード位置を更新してステップS102に戻る。
図11A及び図11Bは、図2Bに例示したダブル・カップルドノードツリーにおいて、“000111:011100”を削除キー列として削除処理を行う例を説明する図である。図11Aに示したダブル・カップルドノードツリーは、ノード群201f以下のノードは記載を省略している。また、インデックスキーの格納領域311についても、ノード群201f以下のリーフノードに関するものは省略している。削除キー列“000111:011100”は、第1のキー“000111”と第2のキー“011100”から構成されるキー列であり、一時記憶領域である削除キー270に格納されている。
探索経路スタック310には配列番号が格納されており、そのスタックポインタは配列番号220b+1を指している。図中太枠で囲まれたノードが検索処理でたどられたノードであり、その配列番号がルートノード210aのものからリーフノード211cのものまで探索経路スタック310に積まれている。
次に配列番号220aの指すノード210bが読み出され、ブランチノードであることが判定される。その弁別ビット位置230bが1であり、第1のキーのビット位置1のビット値が0、第2のキーのビット位置1のビット値が1であるので、代表ノード番号220bに1を加えて配列番号220b+1を得てそれを探索経路スタック310に格納する。
次にノード211cが読み出され、ノード種別261cは1であり、リーフノードであることを示している。このリーフノードに対応するインデックスキー(キー列290c、290c’)は、参照ポインタ280cにより示される記憶領域に格納されている。その記憶領域はインデックスキーの記憶領域311の一部である。そこで参照ポインタ280cの参照するインデックスキーの値は“000111:011100”であり、削除キー270に格納されたキー列と一致している。
図11C及び図11Dは、図2Bに例示したダブル・カップルドノードツリーにおいて、“011010:100000”を削除キー列として削除処理を行う例を説明する図である。図11Cに示したダブル・カップルドノードツリーは、ノード群201f以下及びノード群201c以下のノードは記載を省略している。また、インデックスキーの格納領域311についても、ノード群201f以下のリーフノードに関するものは省略している。削除キー列“011010:100000”は、第1のキー“011010”と第2のキー“100000”から構成されるキー列であり、一時記憶領域である削除キー270に格納されている。
探索経路スタック310には配列番号が格納されており、そのスタックポインタは配列番号220a+1を指している。図中太枠で囲まれたノードが検索処理でたどられたノードであり、その配列番号がルートノード210aのものからリーフノード211bのものまで探索経路スタック310に積まれている。
削除対象のノード211bが属するノード群201bには使用中のノードが210b、211b、212bと3つあるので、削除対象であるノード211bのノード状態に0を書き込んで空とし、図11Dに示す削除処理後のダブル・カップルドノードツリーが得られる。
図12Aに示すのは、キー列“0100:0001”、“0001:0010”、“0000:0011”をインデックスキーとして参照する参照ポインタ1281b、1281c、1280cを持つカップルドノードツリーである。
インデックスキーの格納領域311内の参照ポインタ1281bの指す記憶領域には、第1のキー1291b“0100”と第2のキー1291b’“0001”からなるキー列が格納されている。同様に、参照ポインタ1281cの指す記憶領域には、第1のキー1291c“0001”と第2のキー1291c’“0010”からなるキー列が格納され、参照ポインタ1280cの指す記憶領域には、第1のキー1290c“0000”と第2のキー1290c’“0011”からなるキー列が格納されている。
これから挿入しようとする挿入キー列は図示の例では“0001:0000”である。挿入キー列は、先に述べたように、インデックスキーの格納領域311のポインタ1280dを取得して、ポインタ1280dの指す領域に、第1のキー1290d、第2のキー1290d’として格納されていることを前提としている。
ノード群1201aの代表ノードはルートノード1210aであり、弁別ビット位置には1が保持されている。ノード群1201aの下位のノード群1201bの代表ノード1210bはブランチノードであり、弁別ビット位置には3が保持され、代表ノード1210bと同一のノード群1201bに属する使用中のノード1212bはリーフノードであり、キー列1291b、1291b’への参照ポインタ1281bが保持されている。ブランチノードであるノード1210bはノード群1201cにリンクしている。
ノード群1201cを構成する使用中のノード1211cと1212cはともにリーフノードであり、それぞれキー列1290c、1290c’とキー列1291c、1291c’への参照ポインタ1280c、1281cが格納されている。ノード1211cと1212cのノード位置はそれぞれ01と10である。
挿入キー列と比較キー列の差分ビット位置は図示の場合では2であること、ブランチノード1210bの弁別ビット位置が3で差分ビット位置より大きくその直近上位のブランチノード1210aの弁別ビット位置が1で差分ビット位置より小さいことから、ノード群1201dの挿入位置は、配列番号1220bの指すノード1210bの直近下位となる。
挿入キー列の参照ポインタが格納されるリーフノード1210dが配置されるノード位置(挿入ノード位置)は、挿入キー列の差分ビット位置のビット値の組み合わせである00であり、比較キー列の参照ポインタが格納されるリーフノード1212cの直近上位のブランチノード1210bの内容が転写されるノード1211dが配置されるノード位置(対ノード位置)は、比較キー列の差分ビット位置のビット値の組み合わせである01である。
また、ブランチノード1210bの弁別ビット位置には挿入キー列と比較キー列の差分ビット位置である2が書き込まれ、代表ノード番号にはノード群1201dの代表ノード1210dの配置された配列要素の配列番号1220dが書き込まれ、図12Bに示す構成のカップルドノードツリーとなる。
図12Cに示す挿入処理前のカップルドノードツリーは図12Aに示すものと同一であるが、インデックスキーの格納領域311に格納された挿入キー列が“0001:0011”であって図12Aに示すものと異なり、参照ポインタ1281dの指す記憶領域に格納されている。
トリプル・カップルドノードツリーを用いた検索では、ダブル・カップルドノードツリーについて先に説明したと同様に、3次元キーを構成する各次元のキーの弁別ビット位置のビット値の組み合わせによりリンク先が決定される。したがって、ノード群には2の3乗、すなわち8個のエントリが存在する。ノード位置は000〜111の3ビットで表される。
ツリー構造としては、ルートノード410aの下にノード群401bが、その下層にノード群401cとノード群401fが配置され、ノード群401fの下層にはノード群401g、401h、401iが配置されている。ノード群401cの下にはノード群401dが、さらにその下位にノード群401eが配置されている。
各ノードの前に付された3ビットの符号はノード位置を示す。検索キー列の各キーの弁別ビット位置のビット値に応じてツリーをたどり、検索対象のインデックスキーに対応するリーフノードを見つけることは、ダブル・カップルドノードツリーの場合と同様である。
ノード410bの弁別ビット位置430bには1が格納され、リンク先の代表ノード番号にはノード群401cの代表ノード410cの格納された配列要素の配列番号420bが格納されている。ノード417bの弁別ビット位置437bには2が格納され、リンク先の代表ノード番号にはノード群401fの代表ノード410fの格納された配列要素の配列番号427bが格納されている。
例えば、リーフノード412cの参照ポインタ482cで参照される3次元キーについて考察すると、ルートノード410aの弁別ビット位置430aが0、リンク経路のブランチノード410bのノード位置が000であることから、各次元のキーの0ビット目が0、ブランチノード410bの弁別ビット位置430bが1、リンク先のリーフノード412cのノード位置が010であることから、各キーの1ビット目のビット値は、第1のキーは0、第2のキーは1、第3のキーは0である。すなわち、リーフノード412cの参照ポインタ482cで参照される3次元キーは、“00xxxx:01xxxx:00xxxx”(xは0,1のいずれか任意の値)の値を有するものである。
他のリーフノードに関連する3次元キーについても、同様にツリーの構造から求めることが可能である。
さらに、2次元、あるいは3次元に限らず、次元数に応じてノード位置のビット数を増やすことにより、本発明はより高次元の多次元キーによる検索に拡張可能であることは明らかである。
また、本発明のビット列検索方法を実行する装置が、カップルドノードツリーを格納する記憶手段と図4に示した処理をコンピュータに実行させるプログラムによりコンピュータ上に構築可能なことは明らかである。
さらに、図5〜図8に示した挿入処理とその均等物をコンピュータに実行させるプログラムにより、本発明の挿入方法が実現可能であり、図9A、図9B及び図10に示した削除処理とその均等物をコンピュータに実行させるプログラムにより、本発明の削除方法が実現可能であることも明らかである。そして、それらのプログラムにより、ブランチノードとリーフノードの識別手段、ブランチノードの弁別ビット位置に応じてリンク先のノード対のどちらかにリンクする手段等がコンピュータ上に実現される。
したがって、上記プログラム、及びプログラムを記録したコンピュータ読み取り可能な記録媒体は、本発明の実施の形態に含まれる。さらに、本発明のカップルドノードツリーのデータ構造及びそのデータ構造を有するデータを記録したコンピュータ読み取り可能な記録媒体も、本発明の実施の形態に含まれる。
以上詳細に説明した、本発明が提供する新しいデータ構造であるカップルドノードツリーを用いることにより、多次元キーを取り扱うことができ、より高速なビット列データの検索を行うことが可能となる。しかもビット列データの追加削除も容易に実行することができる。
100 配列
101、122、123 ノード
102a、114a、117a ノード状態
102b、114b、117b ノード種別
103、115 弁別ビット位置
104、116 代表ノード番号
111、121 ノード群
112、122 ノード[0]、ノード位置00のノード
113、123 ノード[1]、ノード位置01のノード
112a、122a ノード[2]、ノード位置10のノード
113a、123a ノード[3]、ノード位置11のノード
118a 参照ポインタ
301 データ処理装置
302 中央処理装置
303 キャッシュメモリ
304 バス
305 主記憶装置
306 外部記憶装置
307 通信装置
308 データ格納装置
309 配列
310 探索経路スタック
311 インデックスキーの格納領域
Claims (15)
- ビット列からなる検索キーにより、検索対象であるビット列からなるインデックスキーが格納された記憶領域の位置を示す位置情報が格納された、あるいは該インデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索装置において、
前記検索キー及び前記インデックスキーはそれぞれ2つ以上のキーのキー列から構成され、
前記ツリーの始点であるルートノードと、該ルートノードの下層に、隣接した記憶領域であるノード位置に配置される代表ノードと非代表ノードである2つ以上のノードを有する、ツリーの構成要素としてのノード群を有し、前記ノードは該ノードが使用中であるか空ノードであるかを示すノード状態を格納する領域と、該ノードが使用中であれば、該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、さらに前記検索キーを構成するキーの弁別ビット位置を格納する領域とリンク先のノード群の1つのノードである代表ノードの位置を示す第一の位置情報を格納する領域を含み、前記リーフノードは、さらに前記検索対象のビット列からなるインデックスキーを格納した記憶領域の位置を示す第二の位置情報あるいは該インデックスキーを格納する領域を含むカップルドノードツリーと、
前記ノード群のうちいずれかのノードである検索開始ノードの位置を示す位置情報を取得し、該取得した検索開始ノードの位置を示す位置情報により検索開始ノードを読み出す検索開始ノード読出手段と、
前記ノードのノード状態を格納する領域から当該ノード状態を読み出すとともに、該ノード状態が使用中であればノード種別を格納する領域から当該ノード種別を読み出し、前記ノードがリーフノードであるかブランチノードであるか、あるいは空ノードであるかを判定するノード種別判定手段と、
前記リーフノードのインデックスキーを格納する領域あるいは前記リーフノードに含まれる前記第二の位置情報が示す記憶領域からインデックスキーを読み出すインデックスキー読出手段と、
前記ブランチノードの前記弁別ビット位置を格納する領域と前記第一の位置情報を格納する領域からそれぞれ当該弁別ビット位置と第一の位置情報を読み出し、該読み出した弁別ビット位置の前記検索キーを構成する各キーのビット値と前記読み出した第一の位置情報との演算によりリンク先のノード群のいずれかのノードの位置を示す位置情報を求め、該求めたノードの位置を示す位置情報により示される記憶領域から、該記憶領域に配置されたノードをリンク先ノードとして読み出すリンク手段と、
を備え、
前記検索開始ノード読出手段で読み出した検索開始ノードのノード状態とノード種別を前記ノード種別判定手段で判定し、該ノード状態が使用中であってノード種別がリーフノードを示すものであれば、該リーフノードから前記インデックスキー読出手段によりインデックスキーを読み出し、該ノード状態が使用中であってノード種別がブランチノードを示すものであれば、前記リンク手段によりリンク先ノードを読み出し、該読み出したリンク先ノードのノード状態とノード種別を前記ノード種別判定手段で判定することを該ノード種別がリーフノードを示すものとなるまで繰り返し、該リーフノードから前記インデックスキー読出手段によりインデックスキーを読み出し、
前記インデックスキー読出手段により読み出されたインデックスキーを、前記検索開始ノードをそのルートノードとする前記カップルドノードツリーの部分木の前記検索キーによる検索結果である検索結果キーとし、前記ノード種別判定手段が、前記検索開始ノードあるいは前記リンク先ノードが空ノードであると判定すると、該空ノードを、前記検索開始ノードをルートノードとする前記カップルドノードツリーの部分木の前記検索キーによる検索結果である検索結果空ノードとする、
ことを特徴とするビット列検索装置。 - 配列を備え、前記カップルドノードツリーは該配列に記憶され、前記第一の位置情報は、該第一の位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であることを特徴とする請求項1記載のビット列検索装置。
- スタックを備え、前記検索開始ノードの格納された配列要素の配列番号及び前記検索開始ノードから前記リーフノードに至るリンク先のノードの格納された配列要素の配列番号が、順次前記スタックに保持されていくことを特徴とする請求項2記載のビット列検索装置。
- コンピュータが、ビット列からなる検索キーにより、検索対象であるビット列からなるインデックスキーが格納された記憶領域の位置を示す位置情報が格納された、あるいは該インデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索方法において、
前記検索キー及び前記インデックスキーはそれぞれ2つ以上のキーのキー列から構成され、
前記ツリーは、該ツリーの始点であるルートノードと、該ルートノードの下層に、隣接した記憶領域であるノード位置に配置される代表ノードと非代表ノードである2つ以上のノードを有する、ツリーの構成要素としてのノード群を有し、前記ノードは該ノードが使用中であるか空ノードであるかを示すノード状態を格納する領域と、該ノードが使用中であれば、該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、さらに前記検索キーを構成するキーの弁別ビット位置を格納する領域とリンク先のノード群の1つのノードである代表ノードの位置を示す第一の位置情報を格納する領域を含み、前記リーフノードは、さらに前記検索対象のビット列からなるインデックスキーを格納した記憶領域の位置を示す第二の位置情報あるいは該インデックスキーを格納する領域を含むカップルドノードツリーであって、
前記ノード群のうちいずれかのノードである検索開始ノードの位置を示す位置情報を取得し、該取得した検索開始ノードの位置を示す位置情報により検索開始ノードを読み出す検索開始ノード読出ステップと、
前記ノードのノード状態を格納する領域から当該ノード状態を読み出すとともに、該ノード状態が使用中であればノード種別を格納する領域から当該ノード種別を読み出し、前記ノードがリーフノードであるかブランチノードであるか、あるいは空ノードであるかを判定するノード種別判定ステップと、
前記リーフノードのインデックスキーを格納する領域あるいは前記リーフノードに含まれる前記第二の位置情報が示す記憶領域からインデックスキーを読み出すインデックスキー読出ステップと、
前記ブランチノードの前記弁別ビット位置を格納する領域と前記第一の位置情報を格納する領域からそれぞれ当該弁別ビット位置と第一の位置情報を読み出し、該読み出した弁別ビット位置の前記検索キーを構成する各キーのビット値と前記読み出した第一の位置情報との演算によりリンク先のノード群のいずれかのノードの位置を示す位置情報を求め、該求めたノードの位置を示す位置情報により示される記憶領域から、該記憶領域に配置されたノードをリンク先ノードとして読み出すリンクステップと、
を備え、
前記検索開始ノード読出ステップで読み出した検索開始ノードのノード状態とノード種別を前記ノード種別判定ステップで判定し、該ノード状態が使用中であってノード種別がリーフノードを示すものであれば、該リーフノードから前記インデックスキー読出ステップによりインデックスキーを読み出し、該ノード状態が使用中であってノード種別がブランチノードを示すものであれば、前記リンクステップによりリンク先ノードを読み出し、該読み出したリンク先ノードのノード状態とノード種別を前記ノード種別判定ステップで判定することを該ノード種別がリーフノードを示すものとなるまで繰り返し、該リーフノードから前記インデックスキー読出ステップによりインデックスキーを読み出し、
前記インデックスキー読出ステップで読み出されたインデックスキーを、前記検索開始ノードをそのルートノードとする前記カップルドノードツリーの部分木の前記検索キーによる検索結果である検索結果キーとし、前記ノード種別判定ステップにおいて、前記検索開始ノードあるいは前記リンク先ノードが空ノードであると判定されると、該空ノードを、前記検索開始ノードをルートノードとする前記カップルドノードツリーの部分木の前記検索キーによる検索結果である検索結果空ノードとする、
ことを特徴とするビット列検索方法。 - 前記カップルドノードツリーは配列に記憶され、前記第一の位置情報は、該第一の位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であることを特徴とする請求項4記載のビット列検索方法。
- 前記検索開始ノードの格納された配列要素の配列番号及び前記検索開始ノードから前記リーフノードに至るリンク先のノードの格納された配列要素の配列番号が、順次スタックに保持されていくことを特徴とする請求項5記載のビット列検索方法。
- ビット列からなる検索キーにより、検索対象であるビット列からなるインデックスキーが格納された記憶領域の位置を示す位置情報が格納された、あるいは該インデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するコンピュータが、前記ツリーに所望のビット列からなる挿入キーが格納された記憶領域の位置を示す位置情報をインデックスキーの位置情報として、あるいは前記挿入キーをインデックスキーとして格納するインデックスキー挿入方法において、
前記検索キー及び前記インデックスキーはそれぞれ2つ以上のキーのキー列から構成され、
前記ツリーは、該ツリーの始点であるルートノードと、該ルートノードの下層に、隣接した記憶領域であるノード位置に配置される代表ノードと非代表ノードである2つ以上のノードを有する、ツリーの構成要素としてのノード群を有し、前記ノードは該ノードが使用中であるか空ノードであるかを示すノード状態を格納する領域と、該ノードが使用中であれば、該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、さらに前記検索キーを構成するキーの弁別ビット位置を格納する領域とリンク先のノード群の1つのノードである代表ノードの位置を示す第一の位置情報を格納する領域を含み、前記リーフノードは、さらに前記検索対象のビット列からなるインデックスキーを格納した記憶領域の位置を示す第二の位置情報あるいは該インデックスキーを格納する領域を含むカップルドノードツリーであって、
前記挿入キーを前記検索キーとし、
前記ルートノードの位置を示す位置情報を取得し、該取得したルートノードの位置を示す位置情報によりルートノードを読み出し、該読み出したルートノードのノード種別を格納する領域から当該ノード種別を読み出し、該ノード種別が前記リーフノードを示すものであるかブランチノードを示すものであるかを判定し、
該ノード種別がリーフノードを示すものであれば、該リーフノードのインデックスキーを格納する領域あるいは該リーフノードに含まれる前記第二の位置情報が示す記憶領域からインデックスキーを読み出して検索結果キーとして取得し、
該ノード種別がブランチノードを示すものであれば、該ブランチノードの弁別ビット位置を格納する領域とリンク先のノード群の代表ノードの位置を示す位置情報を格納する領域からそれぞれ当該弁別ビット位置とリンク先のノード群の代表ノードの位置を示す位置情報を読み出し、該読み出した弁別ビット位置の前記検索キーを構成する各キーのビット値と前記読み出したリンク先のノード群の代表ノードの位置を示す位置情報との演算によりリンク先のノード群のいずれかのノードの位置を示す位置情報を求め、該求めたノードの位置を示す位置情報により示される記憶領域から、該記憶領域に配置されたノードをリンク先ノードとして読み出し、該読み出したリンク先ノードのノード状態とノード種別を判定することを該ノード状態が使用中であってノード種別がリーフノードを示すものとなるまで、あるいは前記リンク先ノードが空ノードとなるまで繰り返し、該ノード種別がリーフノードを示すものと判定すると、該リーフノードのインデックスキーを格納する領域あるいは該リーフノードに含まれる前記第二の位置情報が示す記憶領域からインデックスキーを読み出して検索結果キーとして取得するとともに、該リーフノードに至るまでたどったリンク経路のブランチノードの位置情報及び該リーフノードの位置情報をスタックに順次格納し、前記リンク先ノードが空ノードと判定すると、該空ノードを検索結果空ノードとして取得する検索ステップと、
前記検索ステップにおいて、
前記検索結果空ノードが得られた場合は、該検索結果空ノードをリーフノードとし、ノード状態を格納する領域に使用中であることを示すノード状態を、ノード種別を格納する領域にリーフノードであることを示すノード種別を、前記第二の位置情報あるいはインデックスキーを格納する領域に前記挿入キーを格納した記憶領域の位置を示す情報あるいは該挿入キーを書き込むことによりリーフノードを生成するリーフノード生成ステップと、
前記検索ステップにおいて、前記検索結果キーが得られた場合は、
前記挿入キーと前記検索結果キーのビット値をキー毎に比較して最初に異なるビット値となるビット値の最小値である差分ビット位置を取得する差分ビット位置取得ステップと、
空ノード群を格納する隣接した空記憶領域群を取得し、該空ノード群の代表ノードを格納する記憶領域の位置を示す位置情報を取得する空ノード群取得ステップと、
前記挿入キーの各キーの前記差分ビット位置に位置する各ビット値からなるビット列を前記空ノード群の挿入ノード位置として設定し、前記検索結果キーの各キーの前記差分ビット位置に位置する各ビット値からなるビット列を前記空ノード群の対ノード位置として設定するノード位置決定ステップと、
前記スタックに格納されているブランチノードの位置情報の指す記憶領域に記憶されたブランチノードの弁別ビット位置と前記差分ビット位置取得ステップで取得した前記差分ビット位置との相対的位置関係により、該スタックに格納されているブランチノードの位置情報を読み出し、該ブランチノードの位置情報の指す記憶領域に格納されているノードを、前記空ノード群取得ステップで取得した空記憶領域群に格納される空ノード群のリンク元として該空ノード群の挿入位置を決定するノード群挿入位置決定ステップと、
前記ノード位置決定ステップで設定した空ノード群の挿入ノード位置に位置する空ノードをリーフノードとし、ノード状態を格納する領域に使用中であることを示すノード状態を、ノード種別を格納する領域にリーフノードであることを示すノード種別を、前記第二の位置情報あるいはインデックスキーを格納する領域に前記挿入キーを格納した記憶領域の位置を示す情報あるいは該挿入キーを書き込み、前記空ノード群の対ノード位置に位置する空ノードの格納された記憶領域に、前記ノード群挿入位置決定ステップで前記スタックから読み出した前記ブランチノードの位置情報の指す記憶領域に格納されているノードの内容を読み出して書き込むことで挿入ノード群を生成する挿入ノード群生成ステップと、
前記ノード群挿入位置決定ステップで前記スタックから読み出した前記ブランチノードの位置情報の指す記憶領域に格納されているノードをブランチノードとし、ノード状態を格納する領域に使用中であることを示すノード状態を、ノード種別を格納する領域にブランチノードであることを示すノード種別を、弁別ビット位置を格納する領域に前記差分ビット位置取得ステップで取得した差分ビット位置を、前記第一の位置情報を格納する領域に前記空ノード群取得ステップで取得した前記空ノード群の代表ノードを格納する記憶領域の位置を示す位置情報を、それぞれ書き込むブランチノード生成ステップと、
を備えたことを特徴とするインデックスキー挿入方法。 - 前記カップルドノードツリーは配列に記憶され、前記第一の位置情報は、該第一の位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であり、前記ルートノードの格納された配列要素の配列番号及び前記ルートノードから前記リーフノードに至るリンク先のノードの格納された配列要素の配列番号が、前記スタックに保持されていくことを特徴とする請求項7記載のインデックスキー挿入方法。
- ビット列からなる検索キーにより、検索対象であるビット列からなるインデックスキーが格納された記憶領域の位置を示す位置情報が格納された、あるいは該インデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するコンピュータが、前記ツリーから所望のビット列からなる削除キーと一致するインデックスキーが格納された記憶領域の位置を示す位置情報あるいは前記削除キーと一致するインデックスキーを削除するインデックスキー削除方法において、
前記検索キー及び前記インデックスキーはそれぞれ2つ以上のキーのキー列から構成され、
前記ツリーは、該ツリーの始点であるルートノードと、該ルートノードの下層に、隣接した記憶領域であるノード位置に配置される代表ノードと非代表ノードである2つ以上のノードを有する、ツリーの構成要素としてのノード群を有し、前記ノードは該ノードが使用中であるか空ノードであるかを示すノード状態を格納する領域と、該ノードが使用中であれば、該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、さらに前記検索キーを構成するキーの弁別ビット位置を格納する領域とリンク先のノード群の1つのノードである代表ノードの位置を示す第一の位置情報を格納する領域を含み、前記リーフノードは、さらに前記検索対象のビット列からなるインデックスキーを格納した記憶領域の位置を示す第二の位置情報あるいは該インデックスキーを格納する領域を含むカップルドノードツリーであって、
前記削除キーを前記検索キーとし、
前記ルートノードの位置を示す位置情報を取得し、該取得したルートノードの位置を示す位置情報によりルートノードを読み出し、該読み出したルートノードのノード種別を格納する領域から当該ノード種別を読み出し、該ノード種別が前記リーフノードを示すものであるかブランチノードを示すものであるかを判定し、
該ノード種別がリーフノードを示すものであれば、該リーフノードのインデックスキーを格納する領域あるいは該リーフノードに含まれる前記第二の位置情報が示す記憶領域からインデックスキーを読み出して検索結果キーとして取得し、
該ノード種別がブランチノードを示すものであれば、該ブランチノードの弁別ビット位置を格納する領域とリンク先のノード群の代表ノードの位置を示す位置情報を格納する領域からそれぞれ当該弁別ビット位置とリンク先のノード群の代表ノードの位置を示す位置情報を読み出し、該読み出した弁別ビット位置の前記検索キーを構成する各キーのビット値と前記読み出したリンク先のノード群の代表ノードの位置を示す位置情報との演算によりリンク先のノード群のいずれかのノードの位置を示す位置情報を求め、該求めたノードの位置を示す位置情報により示される記憶領域から、該記憶領域に配置されたノードをリンク先ノードとして読み出し、該読み出したリンク先ノードのノード状態とノード種別を判定することを該ノード状態が使用中であってノード種別がリーフノードを示すものとなるまで、あるいは前記リンク先ノードが空ノードとなるまで繰り返し、該ノード種別がリーフノードを示すものと判定すると、該リーフノードのインデックスキーを格納する領域あるいは該リーフノードに含まれる前記第二の位置情報が示す記憶領域からインデックスキーを読み出して検索結果キーとして取得するとともに、該リーフノードに至るまでたどったリンク経路のブランチノードの位置情報及び該リーフノードの位置情報をスタックに順次格納し、前記リンク先ノードが空ノードと判定すると、該空ノードを検索結果空ノードとして取得する検索ステップと、
前記検索ステップで検索結果キーが取得され、該検索結果キーと前記削除キーが一致するとき、
該検索結果キーを記憶する記憶領域の位置を示す第二の位置情報あるいは該検索結果キーを含むリーフノードである削除リーフノードを含むノード群を構成するノードを読み出し、3つ以上の使用中のノードが前記ノード群に含まれるか判定するノード数判定ステップと、
前記ノード数判定ステップにおいて、3つ以上の使用中のノードが前記ノード群に含まれると判定すると、前記削除リーフノードを空ノードとする空ノード生成ステップと、
前記ノード数判定ステップにおいて、使用中のノードは3つ以上前記ノード群に含まれないと判定すると、
前記削除リーフノードを含むノード群に含まれるもう1つのノードが格納された記憶領域の内容を読み出すノード読出ステップと、
前記削除リーフノードが格納された記憶領域の位置を示す位置情報の1つ前に前記スタックに格納された位置情報を該スタックから読み出し、該位置情報の示す位置の記憶領域に前記ノード読出ステップで読み出した記憶領域の内容を書き込む書込みステップと、
前記削除リーフノードを含むノード群の記憶されていた記憶領域群を解放するノード群削除ステップと、
を実行することを特徴とするインデックスキー削除方法。 - 前記カップルドノードツリーは配列に記憶され、前記第一の位置情報は、該第一の位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であり、前記ルートノードの格納された配列要素の配列番号及び前記ルートノードから前記リーフノードに至るリンク先のノードの格納された配列要素の配列番号が、前記スタックに保持されていくことを特徴とする請求項9記載のインデックスキー削除方法。
- 請求項4〜10いずれか1項に記載の方法をコンピュータに実行させるためのプログラム。
- 請求項4〜10いずれか1項に記載の方法をコンピュータに実行させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
- コンピュータがビット列からなる検索キーによるビット列検索に用いる、検索対象であるビット列からなるインデックスキーが格納された記憶領域の位置を示す位置情報が格納された、あるいは該インデックスキーが格納されたツリーのデータ構造において、
前記検索キー及び前記インデックスキーはそれぞれ2つ以上のキーのキー列から構成され、
前記ツリーは、該ツリーの始点であるルートノードと、該ルートノードの下層に、隣接した記憶領域であるノード位置に配置される代表ノードと非代表ノードである2つ以上のノードを有する、ツリーの構成要素としてのノード群を有し、前記ノードは該ノードが使用中であるか空ノードであるかを示すノード状態を格納する領域と、該ノードが使用中であれば、該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、さらに前記検索キーを構成するキーの弁別ビット位置を格納する領域とリンク先のノード群の1つのノードである代表ノードの位置を示す第一の位置情報を格納する領域を含み、前記リーフノードは、さらに前記検索対象のビット列からなるインデックスキーを格納した記憶領域の位置を示す第二の位置情報あるいは該インデックスキーを格納する領域を含むカップルドノードツリーであり、
コンピュータが、
前記検索キーによるビット列検索方法であって、
前記ノード群のうちいずれかのノードである検索開始ノードの位置を示す位置情報を取得し、該取得した検索開始ノードの位置を示す位置情報により検索開始ノードを読み出す検索開始ノード読出ステップと、
前記ノードのノード状態を格納する領域から当該ノード状態を読み出すとともに、該ノード状態が使用中であればノード種別を格納する領域から当該ノード種別を読み出し、前記ノードがリーフノードであるかブランチノードであるか、あるいは空ノードであるかを判定するノード種別判定ステップと、
前記リーフノードのインデックスキーを格納する領域あるいは前記リーフノードに含まれる前記第二の位置情報が示す記憶領域からインデックスキーを読み出すインデックスキー読出ステップと、
前記ブランチノードの前記弁別ビット位置を格納する領域と前記第一の位置情報を格納する領域からそれぞれ当該弁別ビット位置と第一の位置情報を読み出し、該読み出した弁別ビット位置の前記検索キーを構成する各キーのビット値と前記読み出した第一の位置情報との演算によりリンク先のノード群のいずれかのノードの位置を示す位置情報を求め、該求めたノードの位置を示す位置情報により示される記憶領域から、該記憶領域に配置されたノードをリンク先ノードとして読み出すリンクステップと、
を備え、
前記検索開始ノード読出ステップで読み出した検索開始ノードのノード状態とノード種別を前記ノード種別判定ステップで判定し、該ノード状態が使用中であってノード種別がリーフノードを示すものであれば、該リーフノードから前記インデックスキー読出ステップによりインデックスキーを読み出し、該ノード状態が使用中であってノード種別がブランチノードを示すものであれば、前記リンクステップによりリンク先ノードを読み出し、該読み出したリンク先ノードのノード状態とノード種別を前記ノード種別判定ステップで判定することを該ノード種別がリーフノードを示すものとなるまで繰り返し、該リーフノードから前記インデックスキー読出ステップによりインデックスキーを読み出し、
前記インデックスキー読出ステップで読み出されたインデックスキーを、前記検索開始ノードをルートノードとする前記カップルドノードツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとし、前記ノード種別判定ステップにおいて、前記検索開始ノードあるいは前記リンク先ノードが空ノードであると判定されると、該空ノードを、前記検索開始ノードをルートノードとする前記カップルドノードツリーの部分木の前記検索キーによる検索結果である検索結果空ノードとする、ビット列検索方法
を実行することを可能とすることを特徴とするデータ構造。 - 前記データ構造は配列に記憶され、前記第一の位置情報は、該第一の位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であることを特徴とする請求項13記載のデータ構造。
- 請求項13又は請求項14に記載されたデータ構造を有するデータが記録されたコンピュータ読み取り可能な記録媒体。
Priority Applications (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2008130242A JP4514810B2 (ja) | 2008-05-18 | 2008-05-18 | ビット列検索装置、検索方法及びプログラム |
| PCT/JP2009/000773 WO2009141941A1 (ja) | 2008-05-18 | 2009-02-23 | ビット列検索装置、検索方法及びプログラム |
| US12/926,424 US8166043B2 (en) | 2008-05-18 | 2010-11-17 | Bit strings search apparatus, search method, and program |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2008130242A JP4514810B2 (ja) | 2008-05-18 | 2008-05-18 | ビット列検索装置、検索方法及びプログラム |
Publications (3)
| Publication Number | Publication Date |
|---|---|
| JP2009277164A JP2009277164A (ja) | 2009-11-26 |
| JP2009277164A5 JP2009277164A5 (ja) | 2010-02-25 |
| JP4514810B2 true JP4514810B2 (ja) | 2010-07-28 |
Family
ID=41339886
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2008130242A Expired - Fee Related JP4514810B2 (ja) | 2008-05-18 | 2008-05-18 | ビット列検索装置、検索方法及びプログラム |
Country Status (3)
| Country | Link |
|---|---|
| US (1) | US8166043B2 (ja) |
| JP (1) | JP4514810B2 (ja) |
| WO (1) | WO2009141941A1 (ja) |
Families Citing this family (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| EP2671161B1 (en) * | 2011-01-31 | 2019-03-13 | The MathWorks, Inc. | System and method for determining an objects lifetime in an object oriented environment |
| US11238046B2 (en) * | 2018-02-19 | 2022-02-01 | Nippon Telegraph And Telephone Corporation | Information management device, information management method, and information management program |
| JP2020004132A (ja) * | 2018-06-28 | 2020-01-09 | エヌ・ティ・ティ・コミュニケーションズ株式会社 | 検索装置、検索方法、プログラム、及び記録媒体 |
| US20230195705A1 (en) * | 2021-12-20 | 2023-06-22 | Sap Se | Branching for tree structure in database system |
Family Cites Families (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP3649430B2 (ja) * | 1999-06-30 | 2005-05-18 | 日立ソフトウエアエンジニアリング株式会社 | 図形データ管理方法およびシステム、記憶媒体 |
| 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 | 日本電気株式会社 | 情報検索方法及び装置 |
| JP2003296157A (ja) * | 2002-03-29 | 2003-10-17 | Fujitsu Ltd | データ記憶装置、データ処理装置、データ処理方法、データ処理プログラム |
| JP4271227B2 (ja) * | 2006-10-30 | 2009-06-03 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
| JP4271214B2 (ja) * | 2006-07-07 | 2009-06-03 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
-
2008
- 2008-05-18 JP JP2008130242A patent/JP4514810B2/ja not_active Expired - Fee Related
-
2009
- 2009-02-23 WO PCT/JP2009/000773 patent/WO2009141941A1/ja not_active Ceased
-
2010
- 2010-11-17 US US12/926,424 patent/US8166043B2/en not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| US20110066638A1 (en) | 2011-03-17 |
| WO2009141941A1 (ja) | 2009-11-26 |
| US8166043B2 (en) | 2012-04-24 |
| JP2009277164A (ja) | 2009-11-26 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US8073874B2 (en) | Bit string searching apparatus, searching method, and program | |
| US8224861B2 (en) | Coupled node tree splitting/conjoining method and program | |
| CN101911060B (zh) | 数据库的索引关键字更新方法 | |
| CN101535993B (zh) | 比特序列检索装置及检索方法 | |
| US8190591B2 (en) | Bit string searching apparatus, searching method, and program | |
| US7831626B1 (en) | Integrated search engine devices having a plurality of multi-way trees of search keys therein that share a common root node | |
| US8214405B2 (en) | Longest-match/shortest-match search apparatus, search method, and program | |
| JP3601416B2 (ja) | 情報検索方法及び装置 | |
| JP4439013B2 (ja) | ビット列検索方法及び検索プログラム | |
| US7653619B1 (en) | Integrated search engine devices having pipelined search and tree maintenance sub-engines therein that support variable tree height | |
| JP4514810B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
| JP4567754B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
| JP4417431B2 (ja) | カップルドノードツリーの分割/結合方法及びプログラム | |
| JP2011018296A (ja) | カップルドノードツリーのインデックスキー挿入/削除方法 | |
| JP4813575B2 (ja) | ビット列検索装置 | |
| JP2010257427A (ja) | インデックス更新データ作成装置、作成方法及びプログラム |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100112 |
|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20100112 |
|
| A871 | Explanation of circumstances concerning accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20100112 |
|
| A975 | Report on accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A971005 Effective date: 20100210 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20100216 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100416 |
|
| 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: 20100511 |
|
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20100511 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130521 Year of fee payment: 3 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130521 Year of fee payment: 3 |
|
| S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130521 Year of fee payment: 3 |
|
| R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| LAPS | Cancellation because of no payment of annual fees |