JPWO2009034689A1 - ビット列検索装置、検索方法及びプログラム - Google Patents
ビット列検索装置、検索方法及びプログラム Download PDFInfo
- Publication number
- JPWO2009034689A1 JPWO2009034689A1 JP2009532051A JP2009532051A JPWO2009034689A1 JP WO2009034689 A1 JPWO2009034689 A1 JP WO2009034689A1 JP 2009532051 A JP2009532051 A JP 2009532051A JP 2009532051 A JP2009532051 A JP 2009532051A JP WO2009034689 A1 JPWO2009034689 A1 JP WO2009034689A1
- Authority
- JP
- Japan
- Prior art keywords
- node
- search
- key
- tree
- representative
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/31—Indexing; Data structures therefor; Storage structures
- G06F16/316—Indexing structures
- G06F16/322—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- 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)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
Description
上記ビット列の検索を高速に行うために、ビット列を記憶するデータ構造を種々に工夫することが従来から行われている。このようなものの一つとして、パトリシアツリーという木構造が知られている。
ある検索キーで検索を行うとき、ルートノードから順次各ノードに保持される検索キーの検査ビット位置を検査していき、検査ビット位置のビット値が1であるか0であるか判定を行い、1であれば右リンクをたどり、0であれば左リンクをたどる。そして、リンク先のノードの検査ビット位置がリンク元のノードの検査ビット位置より大きくなければ、すなわち、リンク先が下方でなく上方に戻れば(図1において点線で示されたこの逆戻りのリンクをバックリンクという)、リンク先のノードのインデックスキーと検索キーの比較を行う。比較の結果、等しければ検索成功であり、等しくなければ検索失敗であることが保証されている。
上記3つの出願において提案した検索手法は、検索開始ノードから順次ブランチノードをたどってリーフノードに至り、リーフノードに格納されたインデックスキーを求める操作を基本とするものであり、検索履歴として検索開始ノードからリーフノードに至る探索経路のノードの位置情報をスタックに格納している。そして、スタックに格納された位置情報を基にその位置情報が示す位置に格納されたノードを参照することが行われている。
さらに本出願人は、特願2007−13211において、前記スタックに探索経路中のブランチノードの弁別ビットを格納することにより処理効率を向上させることも提案している。
図2Aを参照すると、ノード101が配列100の配列番号10の配列要素に配置されている。ノード101はノード種別102、弁別ビット位置103及び代表ノード番号104で構成されている。ノード種別102は0であり、ノード101がブランチノードであることを示している。弁別ビット位置103には1が格納されている。代表ノード番号104にはリンク先のノード対の代表ノードの配列番号20が格納されている。なお、以下では表記の簡略化のため、代表ノード番号に格納された配列番号を代表ノード番号ということもある。また、代表ノード番号に格納された配列番号をそのノードに付した符号あるいはノード対に付した符号で表すこともある。
ノード[0]112、ノード[1]113、ノード122、及びノード123の格納された配列要素にそれぞれ付されたノード位置0あるいは1は、検索キーで検索を行う場合にノード対のどちらのノードにリンクするかを示すものと考えることができる。前段のブランチノードの弁別ビット位置にある検索キーのビット値である0か1をノード位置として、代表ノード番号で指定されるノード対のうちの該ノード位置のノードにリンクする。
図2Bは、カップルドノードツリーのツリー構造を概念的に示す図である。図示の6ビットのインデックスキーは、図1に例示されたパトリシアツリーのものと同じである。
ツリー構造としては、ルートノード210aの下にノード対201bが、その下層にノード対201cとノード対201fが配置され、ノード対201fの下層にはノード対201hとノード対201gが配置されている。ノード対201cの下にはノード対201dが、さらにその下にはノード対201eが配置されている。
まず、ビット列“100010”を検索キーとしてルートノード210aから処理をスタートする。ルートノード210aの弁別ビット位置230aは0であるので、検索キー“100010”の弁別ビット位置が0のビット値をみると1である。そこで代表ノード番号の格納された配列番号220aに1を加えた配列番号の配列要素に格納されたノード211bにリンクする。ノード211bの弁別ビット位置231bには2が格納されているので、検索キー“100010”の弁別ビット位置が2のビット値をみると0であるから、代表ノード番号の格納された配列番号221bの配列要素に格納されたノード210fにリンクする。
カップルドノードツリーの構成はインデックスキーの集合により規定される。図2Bの例で、ルートノード210aの弁別ビット位置が0であるのは、図2Bに例示されたインデックスキーに0ビット目が0のものと1のものがあるからである。0ビット目が0のインデックスキーのグループはノード210bの下に分類され、0ビット目が1のインデックスキーのグループはノード211bの下に分類されている。
そして2ビット目が1であるインデックスキーは3ビット目の異なるものがあるのでノード211fの弁別ビット位置には3が格納され、2ビット目が0であるインデックスキーでは3ビット目も4ビット目も等しく5ビット目で異なるのでノード210fの弁別ビット位置には5が格納される。
そしてさらにいえば、異なるビット値となるビット位置ごとにビット値が“1”のノードとビット値が“0”のノードとに分岐していることから、ノード[1]側とツリーの深さ方向を優先させてリーフノードをたどると、それらに格納されたインデックスキーは、ノード211hのインデックスキー251hの“101100”、ノード210hのインデックスキー250hの“101011”、・・・、ノード210cのインデックスキー250cの“000111”となり降順にソートされている。
検索キーで検索するときはインデックスキーがカップルドノードツリー上に配置されたルートをたどることになり、例えば検索キーが“101100”であればノード211hに到達することができる。また、上記説明からも想像がつくように、“101101”か“101110”を検索キーとした場合でもノード211hにたどり着き、インデックスキー251hと比較することにより同一のビット列からなるインデックスキーの検索が失敗したことが分かる。
本発明の検索装置による検索処理及びデータメンテナンスは中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。カップルドノードツリーが配置される配列309と検索中にたどるノードが格納された配列要素の配列番号を記憶する探索経路スタック310を有するデータ格納装置308は、主記憶装置305または外部記憶装置306で実現することができ、あるいは通信装置307を介して接続された遠方に配置された装置を用いることも可能である。
以下、本実施形態に係る上記のカップルドノードツリーに格納されたインデックスキーの各種検索、カップルドノードツリーの生成、及び分割・結合について説明する。
図4Aは、本実施形態に係る基本検索の処理の概略を説明する図である。図4Bは、基本検索の処理フローを説明する図である。図4Cは、カップルドノードツリーによる基本検索例を説明する図であり、図2Bに例示したカップルドノードツリーのうち検索例に関係する部分及び探索経路スタックと各種ワークエリアが示されている。
図4Cの例示では、検索開始ノードがルートノードであるノード210aであり、ノード対201aの代表ノードすなわちノード210aの配列番号220が代表ノード番号設定エリア280に設定される。もし、検索開始ノードがノード211cであれば、ノード対201cの代表ノード210cの配列番号220bが代表ノード番号設定エリア280に設定される。
以上のステップS405及びステップS406からなる初期設定に続いて、ステップS407以降のループ処理に移行する。
ステップS410では、ステップS409で取り出したノード種別がブランチノードのものか判定する。
次にステップS412において、検索キーからステップS411で取り出した弁別ビット位置の指すビット値を、ノード位置として設定する。図4Cの例示では、検索キー設定エリア270に設定された値が“011010”であることから、最初のループ処理として弁別ビット位置“0”が取り出され、検索キー“011010”の0ビット目の“0”がノード位置設定エリア290に設定される。
次にステップS414に進み、代表ノード番号設定エリアに設定されている代表ノード番号にノード位置を加えた値をステップS408で取り出されたノードの代表ノード番号に格納し、ステップS415で該ノードを探索経路スタックに格納してステップS407に戻る。図4Cの例示では、代表ノード番号220aが取り出されて代表ノード番号設定エリア280に設定され、220a+0=220aがノード210aの代表ノード番号に格納され、そのノードが探索経路スタック310にスタックされる。
ステップS512において、配列から空きのノード対を求め、そのノード対のうち代表ノードとなるべき配列要素の配列番号を取得して、代表ノード番号として設定する。
ステップS515に進み、ステップS512で設定した代表ノード番号にステップS513で得たブール値の論理否定値を加算した配列番号を対ノードの配列番号として設定する。
ステップS517に進み、ステップS516で得た差分ビット列から、上位0ビット目から見た最初の不一致ビットのビット位置である差分ビット位置を得る。この処理は、例えばプライオリティエンコーダを有するCPUではそこに差分ビット列を入力し、不一致のビット位置を得ることができる。また、ソフト的にプライオリティエンコーダと同等の処理を行い差分ビット位置を得ることも可能である。
図5Cは図5Bで準備された配列にノードを格納するとともにその挿入位置を求め、既存のノードの内容を変更して挿入処理を完成させる処理を説明するフロー図である。
次にステップS519に進み、探索経路スタックからスタックポインタの指すノードを取り出し、スタックポインタを1つ戻す。
次にステップS521に進み、ステップS520で取り出した弁別ビット位置がステップS517で得たビット位置より上位の位置関係か判定する。ここで上位の位置関係とは、ビット列のより左側の位置、すなわちビット位置の値が小さい位置であることとする。
ステップS525において、ステップS514で設定した挿入ノードの配列番号の指す配列要素のノード種別に1(リーフノード)を、インデックスキーに挿入キーを書き込む。
ステップS526に進み、ステップS518で退避したノードを読み出し、ステップS515で設定した対ノードの配列番号の配列要素に読み出した内容を書き込む。
図6Aは、本実施形態に係るルートノードの挿入処理を含むインデックスキーを追加する場合のノード挿入処理全体を説明する処理フロー図である。
次にステップS604に進み、ルートノードの配列番号として挿入ノードの配列番号を登録して処理を終了する。
まず、ステップS605において、配列から空きのノード対を求め、そのノード対のうち代表ノードとなるべき配列要素の配列番号を取得する。次にステップS606において、ステップS605で得た配列番号に0を加えた配列番号を求め、挿入ノードの配列番号として設定する。(実際には、ステップS605で取得した配列番号に等しい。)。さらにステップS607において、ステップS606で設定した挿入ノードの配列番号のさす配列要素のノード種別に1(リーフノード)とインデックスキーに挿入キーを格納して処理を終了する。
図7Aは、削除処理の前段である検索処理の処理フローを示す図であり、図4A、図4Bに示した検索処理において削除キーを検索キーとし、検索開始ノードをルートノードとしたものに類似したものである。しかし、本実施形態の削除処理では、探索経路スタックは用いず、1つ分のノードを退避する退避ノードを用いる点で先に説明した検索処理と異なる。
次にステップS702において、ノード位置としてルートノードのノード位置を設定する。
以上で初期設定を終了し、ステップS704〜ステップS712のループ処理と、ステップS707での判定結果によりループから抜け出した後の処理であるステップS713とステップS714を実行する。
まず、ステップS715でノード退避エリアに退避したノードが終端ノードであるか判定する。退避したノードが終端ノードであるということは、ルートノードがリーフノードであるということである。その場合はステップS719に移行し、ステップS701で設定した代表ノード番号の指すノード対、すなわちルートノードの配列番号の指すノード対を削除する。次にステップS720に進み、登録されていたルートノードの配列番号を削除して処理を終了する。
次に図8A、図8B及び図8Cを参照して、本実施形態に係る、カップルドノードツリー(部分木を含む)に格納されたインデックスキーの最小値を求める最小値検索処理を説明する。
次のステップS804において、ステップS801で設定された検索開始ノードから配列を検索し、インデックスキーの最小値を得る。このインデックスキーの最小値を得る検索処理の詳細を、次に図8Bを参照して説明する。
次にステップS806において、ノード位置設定エリアに、検索開始ノードがノード対においてどちらに位置するかを示すノード位置を設定する。
次にステップS808において、読み出されたノード対からステップS806においてノード位置設定エリアに設定されたノード位置の指すノードを取り出す。
ステップS810では、ステップS809で取り出したノード種別がブランチノードのものか判定する。
次にステップS815でノードを探索経路スタックに格納する。
次にステップS817において、ステップS816で読み出されたノード対から、ノード[0]であるノードを取り出し、ステップS809に戻る。そして上述のとおり、ステップS810での判定処理によりリーフノードが取り出されたことを確認するまでステップS809〜ステップS817の処理を繰り返す。
次のステップS904において、ステップS901で設定された検索開始ノードから配列を検索し、インデックスキーの最大値を得る。このインデックスキーの最大値を得る検索処理の詳細を、次に図9Bを参照して説明する。
次にステップS906において、ノード位置設定エリアに、検索開始ノードがノード対においてどちらに位置するかを示すノード位置を設定する。
次にステップS908において、読み出されたノード対からステップS906においてノード位置設定エリアに設定されたノード位置の指すノードを取り出す。
ステップS910では、ステップS909で取り出したノード種別がブランチノードのものか判定する。
次にステップS914に進み、代表ノード番号設定エリアに設定されている代表ノード番号に1を加えた値をノードの代表ノード番号に格納し、ステップS915で該ノードを探索経路スタックに格納する。
次にステップS917において、ステップS916で読み出されたノード対から、ノード[1]であるノードを取り出し、ステップS909に戻る。そして上述のとおり、ステップS910での判定処理によりリーフノードが取り出されたことを確認するまでステップS909〜ステップS917の処理を繰り返す。
ステップS1003では、図8Bに示す最小値検索処理を行いインデックスキーの最小値を求める。そして、ステップS1004で、下限キーと、ステップS1003で求めた最小値との比較をし、最小値が下限キー以上であるかを判定する。最小値が下限キー以上の値をとる場合、ステップS1005に進み、ステップS1003で求めた最小値を下限値として設定し、処理を終了する。
ステップS1011では、検索キーとインデックスキーの大小関係を判定する。インデックスキーが、検索キーすなわち下限キーよりも小さい場合は、そのインデックスキーは、ユーザ等により指定された検索範囲に含まれないことを意味する。
次にステップS1014に進み、ステップS1013で得たノード位置がノード[1]側であるか判定する。ノード[1]側であればステップS1012に戻り、ノード[0]側であればステップS1015に進む。
ステップS1103では、図9Bに示す最大値検索処理を行いインデックスキーの最大値を求める。そして、ステップS1104で、上限キーと、ステップS1103で求めた最大値との比較をし、最大値が上限キー以下であるかを判定する。最大値が上限キー以下の値をとる場合、ステップS1105に進み、ステップS1103で求めた最大値を上限値として設定し、処理を終了する。
ステップS1111では、検索キーとインデックスキーの大小関係を判定する。インデックスキーが、検索キーすなわち上限キーよりも大きい場合は、そのインデックスキーは、ユーザ等により指定された検索範囲に含まれないことを意味する。
次にステップS1114に進み、ステップS1113で得たノード位置がノード[0]側であるか判定する。ノード[0]側であればステップS1112に戻り、ノード[1]側であればステップS1115に進む。
ここでカップルドノードツリーの分割とは、あるビット列からなる分割キーを指定したとき、カップルドノードツリーに含まれるインデックスキーをその分割キーとの大小関係により2グループに分け、それぞれのグループに属するインデックスキーからなる2つのカップルドノードツリーを生成することである。
また、カップルドノードツリーの結合とは、2つのインデックスキーの集合に対応する2つカップルドノードツリーから2つのインデックスキーの集合の和集合に対応するカップルドノードツリーを生成することである。本発明では、2つのインデックスキーの集合の積集合は空であることを前提にしている。
第1の実施例は、分割対象である処理元のツリー(以下、単に処理元ということがある。)のインデックスキーの最小値を取り出し、取り出したインデックスキーの最小値を、処理元の分割により生成される処理先のツリー(以下、単に処理先ということがある。)に挿入し、処理元のツリーからインデックスキーの最小値を削除する処理を、最小値が分割キー以下である間繰り返すことにより、分割対象である処理元のツリーから処理先のツリーを分割するものである。
図12Aは、第1の実施例における分割処理の前段の処理である処理先の初期設定等に関する処理を説明する図である。
次にステップS1206において、図6Bに示す、ルートノードに挿入キーを含むリーフノード(挿入ノード)を設定する処理を実行する。そして、ステップS1207に進み、処理先のルートノードの配列番号として、挿入ノードの配列番号を登録し、ステップS1208で処理先の検索開始ノードとして、処理先のルートノードを設定することにより、処理先の初期設定を完了させ、引き続いて、図12Bに示すステップS1209に移行する。
図12Bに示すように、ステップS1209において、ステップS1205あるいは後述のステップS1214における挿入キーを処理元の削除処理における削除キーに設定し、ステップS1210において、図7A、図7Bに示す削除処理により、処理元のツリーから削除キーを含むリーフノードを削除する。
次にステップS1215で、図5A、図5Bに示すツリーの挿入処理により、挿入キーによる処理先へのノードの挿入を実行し、処理元のツリーからのノードの削除処理であるステップS1209、ステップS1210へ戻る。
結合処理は、結合しようとする2つのツリーのうちどちらかを処理元のツリーとし、分割キーを処理元のツリーのインデックスキーの最大値以上とすれば、先に述べた例外的な処理に該当し、処理元のツリーは削除され、処理先のツリーに結合される。なお、処理元のツリーのインデックスキーの最大値が未知の場合には、前もって図9Aに示す最大値検索処理により分割キーを求めることになる。
本実施例は処理のロジックは簡易なものであるが、処理元のルートノードを検索開始ノードとする最小値検索を繰り返し、インデックスキー単位で挿入削除を行うため、実行時の処理ステップ数は大きくなる。
本実施例は、インデックスキー単位で挿入削除を行う点では第1の実施例と同様であるが、挿入削除すべきインデックスキーの探索に探索経路スタックを活用し、挿入処理及び削除処理の実行時の処理ステップ数を小さくしたものである。
図13Aは、第2の実施例における分割処理の前段の処理である初期設定に関する処理を説明する図である。
ステップS1306において、ステップS1303で得た最小値を挿入キーとして設定する。次にステップS1307において、図6Bに示す、ルートノードに挿入キーを含むリーフノード(挿入ノード)を設定する処理を実行する。そして、ステップS1308に進み、処理先のルートノードの配列番号として、挿入ノードの配列番号を登録し、ステップS1309で処理先の検索開始ノードとして、処理先のルートノードを設定する。さらにステップS1310において、処理先の探索経路スタックに終端ノードを格納して処理先の初期設定処理を完了し、図13Bに示すステップS1311以降の後段の処理に移行する。
ステップS1311において、処理元から削除ノードを削除し、後に削除ノードと対をなすノードの内容が複写される該ノードの親ノード(処理元の親ノード)を得る。ステップS1311の処理及び削除ノードと処理元の親ノードについては、後に図15を参照して詳細に説明する。
以上のステップS1311〜ステップS1318のループ処理を、ステップS1315において、ステップS1314で得た最小値が分割キーより大であると判定されるまで繰り返すことにより、ツリーの分割が実現される。
図14に示すように、ステップS1401で配列からノード対が空の代表ノードの配列番号を取得し、代表ノード番号として設定する。
図15は、図13Bに示すステップS1311に対応する処理元の削除処理を説明する図である。
ステップS1504で取り出したノードが終端ノードでなければ、ステップS1506に分岐し、該ノードから代表ノード番号を取り出し、処理元の親ノードの配列番号を格納するエリアに設定するとともに、該親ノードの代表ノード番号を退避してステップS1508に進む。
次にステップS1509において、ステップS1508で設定した対ノードの配列番号の指す配列要素の内容を読出し、ステップS1506あるいはステップS1507で設定した処理元の親ノードの配列番号の指す配列要素に格納する。
上述の処理により、削除ノードと対ノードからなるノード対が削除され、削除ノードの直近上位のブランチノードである親ノードには削除ノードの対ノードの内容が格納されるとともに、該親ノードの配列番号は処理元の親ノードの配列番号を格納するエリアに設定され、図13Bに示すステップS1313で次の最小値検索の検索開始ノードの設定に用いられる。
また、第1の実施例の場合と同様に分割処理の処理フローをツリーの結合処理に用いることが可能である。結合しようとする2つのツリーのうちどちらかを処理元のツリーとし、分割キーを処理元のツリーのインデックスキーの最大値以上あるいは最小値以下として処理元のツリーの削除処理を行い、削除されたノードを処理先のツリーに挿入する処理を行えばよい。
以上説明した第1の実施例と第2の実施例の分割/結合処理は、インデックスキー単位で挿入削除を行うものであった。第3の実施例は、カップルドノードツリーの順序性に着目した、カップルドノードツリーのより大きい、所定の条件を満たす、部分木を単位として挿入削除を行うものである。
最初のステップS1601で指定された分割キーを処理元の分割キーとして設定する。第1及び第2の実施例について述べたように、分割キーの指定は、操作者による外部入力の場合もあり得るし、あるコンピュータプログラムの処理結果による場合、遠方からコマンドによる場合等があり得る。指定された分割キーは、処理元の分割キーを保持するメモリ上のエリアに設定される。
ステップS1609では、処理元から分割ノードツリーを削除し、該ノードの親ノードを得る。
分割ノードが求まれば、ステップS1613において、その分割ノードをルートノードとする部分木である分割ノードツリーの最大値を求めて次の分割キーとする。なお、ステップS1613における分割ノードの最大値を求めて次の分割キーとする処理の詳細は、後に図20を参照して説明する。
ステップS1615では、処理先の検索開始ノードより図8Bに示す最小値検索によりインデックスキーの最小値を配列から得る。
次に、図17A及び図17Bを参照して図16Aに示すステップS1605における分割ノード(最初の分割ノード)を求める処理を詳細に説明する。
図17Aに示すように、ステップS1701で分割キーを検索キーとして設定し、ステップS1702で処理元のルートノードを検索開始ノードとして設定する。次にステップS1703に進み、処理元の探索経路スタックに終端ノード[0]を格納する。
図17Bは、最初の分割ノードを求める処理の後段の処理を説明するフロー図である。後段の処理は、処理元の探索経路スタックを遡り、取り出されたノードのノード位置が初めてノード[0]側となるノードを求めて、その代表ノード番号を分割ノードの配列番号として設定するものである。別の言い方をすれば、処理元の探索経路スタックを遡り、最初のノード[0]を分割ノードとするものである。
次にステップS1707において、ステップS1706で得たノード位置がノード[1]側か判定する。判定の結果がノード[1]側であればステップS1705の処理に戻り、ノード[0]側であればステップS1708に進む。
したがって、図17Bに示すステップS1705の最初の処理時には探索経路スタックのスタックポインタはノード210fを指しており、ステップS1706では代表ノード番号220f+1からノード位置1が得られる。したがって、ステップS1707の判定処理の結果、ステップS1705に戻り、次のステップS1707では1つ遡ったノード211bの代表ノード番号221bからノード位置0が判定され、ステップS1708の判定を介してステップS1709に移行し、ステップS1705で取り出されたノード211bの代表ノード番号221b、すなわちノード210fの配列番号221bが分割ノードの配列番号として設定される。そして、処理元の探索経路スタック310のスタックポインタは、図22A(a)の(2)において矢印で示すように、ノード210aを指している。
分割キーをインデックスキーとして含むリーフノードがノード[0]であれば、そのリーフノードが分割ノード自体であり、分割ノードツリーは1つのリーフノードだけから構成される。このリーフノードと対をなすノード[1]側に存在するリーフノードのインデックスキーは、カップルドノードツリーの順序性によって全て分割キーより大きい。したがって、今のケースの場合、分割キーより上位のブランチノードをルートノードとする部分木においては、分割キーは最大値とはなりえないから、分割キーは分割ノードツリーの最大値であり、分割ノードツリーは分割キーを最大値とする処理元の部分木のうち最大のものである。
以下引き続き、分割処理の説明を、図18A以下を参照して行う。
ステップS1801において、図16Aに示す処理フローのステップS1605、すなわち図17Bに示すステップS1709あるいはステップS1710で求められた分割ノードの格納された配列要素の配列番号を挿入ノードの配列番号として設定する。
次にステップS1803で、ステップS1802で取得した配列番号をノード[0]の配列番号として設定する。
図22A及び図22B(b)の例示では、分割ノード210fの格納された配列要素の配列番号221bが挿入ノードの配列番号に設定され、取得された空のノード対201iの代表ノード番号220’ がノード[0]の配列番号として設定される。
最初にステップS1811で、図16Bに示す処理フローのステップS1611で求められた分割ノードの格納された配列要素の配列番号を、挿入ノードの配列番号として設定する。このステップS1811は図18Aに示すステップS1801とは、分割ノードが求められた処理ステップがステップS1605ではなくステップS1611である点で異なるだけである。
次のステップS1813〜ステップS1815は、図18Aに示すルートノードの挿入処理のステップS1802〜ステップS1804と同様である。
次にステップS1817において、ステップS1812で設定した処理先の挿入位置の配列番号の指す配列要素の内容を読み出し、ステップS1816で設定したノード[1]の配列番号の指す配列要素に格納する。
“0”が格納されている。また、代表ノード番号には、ノード[0]の配列番号220jが格納されている。
ステップS1901において、探索経路スタックからノードを取り出し、探索経路スタックのスタックポインタを1つ減らす。スタックポインタの初期値は、図16Bに示すステップS1609の削除処理終了時のものであり、後に図21を参照した削除処理の説明で明らかになるとおり、分割ノード(削除処理においては削除ノード)の2つ上位のノードを指している。
ノードが終端ノードでなければ、ステップS1905に進み、S1901で取り出したノードの代表ノード番号から値1を減じて得たノード[0]の配列番号を、分割ノードの配列番号として設定して「分割ノードあり」を返す。
そしてステップS2003において、図9Bに示す最大値検索を実行し、インデックスキーの最大値を求める。
最後にステップS2005において、ステップS2001で退避した値を処理元の探索経路スタックのスタックポインタの値として復元して処理を終了する。
次にステップS2109において、ステップS2108で設定した対ノードの配列番号の指す配列要素の内容を読み出し、ステップS2106あるいはステップS2107で設定した親ノードの配列番号の指す配列要素に格納する。
次に分割処理と同様に部分木単位で処理を行う第3の実施例によるカップルドノードツリーの結合処理を説明する。本実施例の結合処理は、第1の実施例及び第2の実施例の結合処理と大きく異なり、第1の実施例及び第2の実施例の結合処理がインデックスキー単位、言い換えればノード単位で結合処理を行うものであるのに対して、所定の条件を満たす部分木単位で処理元から分割して処理先に結合するものである。第1の実施例及び第2の実施例の結合処理では分割キーを選択することにより分割処理をそのまま適用できたのに対して、本実施例のように部分木単位で結合処理を行おうとすると、単純に分割処理を適用することができない。
図26Aは結合処理開始前の処理元と処理先のツリーの構造例を示す図である。図26Aの(a)には処理元が例示され、その配列番号の符号220a+1が付された分割結合ノードとそれをルートノードとする部分木であり、結合処理の単位となる部分木である分割結合ノードツリー293が示されている。以後、ノードを示す符号を、探索経路スタックにスタックされている直近上位のノードの代表ノード番号で表すことがある。
図23Aは、本実施例の結合処理における初期処理の処理フローを説明する図である。図に示すように、ステップS2301において、処理元の探索経路スタックに終端ノードを格納する。次に、ステップS2302において、処理先の探索経路スタックに終端ノードを格納する。
図23Bに示すように、ステップS2307において、処理元の検索開始ノードから図9Bに示す検索処理により、処理元のインデックスキーの最大値を求め、次にステップS2309において、処理先の検索開始ノードから図8Bに示す検索処理により、処理先のインデックスキーの最小値を求める。
次にステップS2311で、ステップS2310で求めた差分ビット位置により、処理元の分割結合ノードを求める。図26Aの例示では、図26Aの(a)処理元に示すように、分割結合ノード220a+1が求められている。また、図26Bの例示では、図26Bの(a)処理元に示すように、次の分割結合ノード220が求められている。この処理の詳細は、後に図24を参照して説明する。
図26A及び図26Bの例示では、処理元の分割結合ノード220a+1を求める処理が終了すると処理元の探索経路スタックのスタックポインタは終端ノードを指しているので、図23Bに示すステップS2315で呼び出される図21に示す削除処理のステップS2105の判定処理は「はい」となり、ステップS2107に進む。ステップS2107で親ノードの配列番号にルートノード210aの配列番号220が設定され、代表ノード番号220aが退避される。削除ノードには分割結合ノード220a+1、対ノードにはノード210bが設定される。そして、配列番号220の配列要素にノード210bの内容が格納され、代表ノード番号220aが指すノード対201bが削除されて図26Bの(a)に示す処理先となる。
次にステップS2403において、ステップS2402で取得した弁別ビット位置が差分ビット位置の値より小さいか(上位の位置関係か)を判定する。小さくなければステップS2401に戻り、小さければステップS2404に進む。先に述べたように、上述の弁別ビット位置と差分ビット位置が等しいことはない。
図26Aの(a)処理元の例示においては、最大値検索の結果、図示しない探索経路スタックのスタックポインタがノード211bを指しているので弁別ビット位置“5”が取り出され、差分ビット位置が“4”であることからステップS2403の判定は「いいえ」となり、ステップS2401からの処理を繰り返して、ルートノード210aまで至り、ルートノード210aの弁別ビット位置が“0”であって差分ビット位置より上位であるからステップS2403の判定処理でステップS2404に分岐し、ステップS2405の処理により分割結合ノード220a+1が求められる。(探索経路スタック上のルートノード210aの代表ノード番号は、最大値検索を実行したのであるから220a+1に更新されている。)
図26Bの例示においては、削除ノード211bの親ノードであるルートノード210aからの処理元の最大値検索により、最大値“011010”が求められ、処理先の最小値は図26Bの(b)に示すように“101000”であるから、差分ビット位置“0”が設定される。処理元の探索経路スタックのスタックポインタはノード211cを指しているので弁別ビット位置“2”が取り出され、差分ビット位置が“0”であることからステップS2403の判定は「いいえ」となり、ステップS2401からの処理を繰り返して、ルートノード210aまで至り、ルートノード210aの弁別ビット位置が“0”であって差分ビット位置より小さくないから、さらにステップS2401からの処理を繰り返して、終端ノードまで至り、終端ノードの弁別ビット位置が“−1”であるからステップS2403の判定処理でステップS2404に分岐し、ステップS2404の判定処理でステップS2406に分岐し、ステップS2406の処理により次の分割結合ノード220が求められる。
次にステップS2503において、ステップS2502で取得した弁別ビット位置が差分ビット位置の値より小さいか(上位の位置関係か)を判定する。小さくなければステップS2501に戻り、小さければステップS2504に進む。先に述べたように、上述の弁別ビット位置と差分ビット位置が等しいことはない。
上記処理を図26A及び図26Bを参照して説明すると以下のとおりである。
以上本発明を実施するための最良の形態について詳細に説明したが、本発明の実施の形態はそれに限ることなく種々の変形が可能であることは当業者に明らかである。
図27Aは、カップルドノードツリーの任意の部分木に格納されたインデックスキーを昇順に取り出す処理を説明するフロー図である。インデックスキーを昇順に取り出す処理は、ノード対をなすノードのうちノード[0]側及びツリーの深さを優先させてノードから順次リーフノードをたどり、各リーフノードからインデックスキーを取り出していくことに相当する。
次にステップS2705で、探索経路スタックからスタックポインタの指すノードを取り出し、スタックポインタの値を1つ減らす。最初のステップS2705での探索経路スタックの状態は、ステップS2703の最小値検索を実行したときの状態である。
“000111”が取り出され、スタックポインタの指す位置は1つ減ってノード210aとなる。そして、最小値検索における代表ノード番号に代表ノード番号220bを、ノード位置に値“1”を設定し、次の最小値検索を実行する。つまり、次の検索開始ノードは、代表ノード番号220bの指すノード対201cのノード[1]であるノード211cとなる。
“010010”が取り出され、スタックポインタの指す位置は1つ減ってノード211cとなる。そして、最小値検索における代表ノード番号に代表ノード番号220dを、ノード位置に値“1”を設定し、次の最小値検索を実行する。
が取り出され、スタックポインタの指す位置は1つ減ってノード210aとなる。そして、最小値検索における代表ノード番号に代表ノード番号221cを、ノード位置に値“1”を設定し、次の最小値検索を実行する。
が取り出され、スタックポインタの指す位置は1つ減って終端ノードとなる。そして、最小値検索における代表ノード番号に代表ノード番号220aを、ノード位置に値“1”を設定し、次の最小値検索を実行する。つまり、次の検索開始ノードはノード211bとなる。
が取り出され、スタックポインタの指す位置は1つ減ってノード211bとなる。そして、最小値検索における代表ノード番号に代表ノード番号220fを、ノード位置に値“1”を設定し、次の最小値検索を実行する。
が取り出され、スタックポインタの指す位置は1つ減って終端ノードとなる。そして、最小値検索における代表ノード番号にノード211bの代表ノード番号221bを、ノード位置に値“1”を設定し、次の最小値検索を実行する。
が取り出され、スタックポインタの指す位置は1つ減って終端ノードとなる。そして、最小値検索における代表ノード番号に代表ノード番号221fを、ノード位置に値“1”を設定し、次の最小値検索を実行する。
ステップS2804では、ステップS2803あるいは後述のステップS2811で得た最大値であるインデックスキーを取り出す。
“101100”が取り出され、スタックポインタの指す位置は1つ減ってノード211bとなる。そして、最大値検索における代表ノード番号に代表ノード番号221f+1から1を減じた値である221fを、ノード位置に値“0”を設定し、次の最大値検索を実行する。
“101011”が取り出され、スタックポインタの指す位置は1つ減ってノード210aとなる。そして、最大値検索における代表ノード番号に代表ノード番号221bを、ノード位置に値“0”を設定し、次の最大値検索を実行する。
が取り出され、スタックポインタの指す位置は1つ減って終端ノードとなる。そして、最大値検索における代表ノード番号に代表ノード番号220aを、ノード位置に値“0”を設定し、次の最大値検索を実行する。つまり、次の検索開始ノードはノード210bとなる。
が取り出され、スタックポインタの指す位置は1つ減ってノード210bとなる。そして、最大値検索における代表ノード番号に代表ノード番号221cを、ノード位置に値“0”を設定し、次の最大値検索を実行する。
が取り出され、スタックポインタの指す位置は1つ減ってノード210bとなる。そして、最大値検索における代表ノード番号にノード210dの代表ノード番号220dを、ノード位置に値“0”を設定し、次の最大値検索を実行する。
が取り出され、スタックポインタの指す位置は1つ減って終端ノードとなる。そして、最大値検索における代表ノード番号に代表ノード番号220bを、ノード位置に値“0”を設定し、次の最大値検索を実行する。
図に示すように、ステップS2901で検索開始ノードとしてルートノードを設定する。次にステップS2902で、図10A及び図10Bに示す下限値検索処理により下限キーから下限値を求め、ステップS2903で、図11A及び図11Bに示す上限値検索処理により上限キーから上限値を求める。
ステップS2907では、ステップS2906で得たインデックスキーあるいは後述のステップS2915で得た最小値であるインデックスキーを取り出す。
次にステップS2911に進み、ステップS2910で得たノード位置がノード[1]側であるか判定する。ノード[1]側であればステップS2909に戻り、ノード[0]側であればステップS2912に進む。
ステップS3007では、ステップS3006で得たインデックスキーあるいは後述のステップS3015で得た最大値であるインデックスキーを取り出す。
次にステップS3011に進み、ステップS3010で得たノード位置がノード[0]側であるか判定する。ノード[0]側であればステップS3009に戻り、ノード[1]側であればステップS3012に進む。
図に示すように、ステップS3101で検索開始ノードにルートノードを設定し、ステップS3102で下限キーとして前方一致キーの無意ビットの値を“0”としたビット列のキーを設定し、ステップS3103において、ステップS3101及びステップS3102での設定に基づいて、図10A及び図10Bに示す下限値検索を実行し、インデックスキーの下限値を得る。
次にステップS3105に進み、探索経路スタックからノードを取り出し、探索経路スタックのスタックポインタを1つ戻す。
ステップS3107では、ステップS3106で取り出した弁別ビット位置がステップS3104で設定した差分ビット位置の値より大きいか判定する。弁別ビット位置が差分ビット位置より大きければステップS3105に戻り、大きくなければステップS3108に進む。
以上の処理により、カップルドノードツリーに格納されたインデックスキーのうち前方一致キーの有意ビットの範囲でビット値が等しいインデックスキーは全て取り出される。
“100010”が下限値として取り出されている。
そこで、探索経路スタック310に格納されたノードの弁別ビット位置がノード210fから順次差分ビット位置と比較され、ノード210aが検索開始ノードの直近上位のノード(親ノード)として取り出され、その代表ノード番号220a+1が検索開始ノード211bの配列番号として設定される。
図31B(b)の(2)は、ノード211bを検索開始ノードとして最小値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示している。最小値検索の結果、探索経路スタック310には終端ノード[0]の上にノード211bとノード210fが格納されている。ここでは、ノード210fの代表ノード番号220fの指すノード210gはリーフノードであるため、このノード210gのインデックスキー
“100010”が最小値として再度取り出され、スタックポインタの指す位置は1つ減ってノード211bとなる。そして、最小値検索における代表ノード番号に代表ノード番号220fを、ノード位置に値“1”を設定し、次の最小値検索を実行する。
が取り出され、スタックポインタの指す位置は1つ減って終端ノード[0]となる。そして、最小値検索における代表ノード番号に代表ノード番号221bを、ノード位置に値“1”を設定し、次の最小値検索を実行する。
“101011”が取り出され、スタックポインタの指す位置は1つ減って終端ノード[0]となる。そして、最小値検索における代表ノード番号に代表ノード番号221fを、ノード位置に値“1”を設定し、次の最小値検索を実行する。
さらに本出願人は、特願2007−13211において、前記スタックに探索経路中のブランチノードの弁別ビット位置を格納することにより処理効率を向上させることも提案している。
以上のステップS405及びステップS406からなる初期設定に続いて、ステップS407以降のループ処理に移行する。
ステップS517に進み、ステップS516で得た差分ビット列から、上位0ビット目から見た最初の不一致ビットのビット位置である差分ビット位置を得る。この処理は、例えばプライオリティエンコーダを有するCPUではそこに差分ビット列を入力し、不一致のビット位置を得ることができる。また、ソフト的にプライオリティエンコーダと同等の処理を行い差分ビット位置を得ることも可能である。
分割ノードが求まれば、ステップS1613において、その分割ノードをルートノードとする部分木である分割ノードツリーの最大値を求めて次の分割キーとする。なお、ステップS1613における分割ノードツリーの最大値を求めて次の分割キーとする処理の詳細は、後に図20を参照して説明する。
図22A及び図22B(b)の例示では、分割ノード210fの格納された配列要素の配列番号221bが挿入ノードの配列番号に設定され、取得された空のノード対201iの代表ノードの配列番号220’ がノード[0]の配列番号として設定される。
“101011”が取り出され、スタックポインタの指す位置は1つ減ってノード210aとなる。そして、最大値検索における代表ノード番号に代表ノード番号221bを、ノード位置に値“0”を設定し、次の最大値検索を実行する。
Claims (37)
- ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含むカップルドノードツリーを備え、
前記カップルドノードツリーの任意のノードを検索開始ノードとし、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記カップルドノードツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするビット列検索装置において、
前記検索開始ノードから前記リーフノードに至るリンク経路のブランチノードを順次スタックに保持することを特徴とするビット列検索装置。 - 前記カップルドノードツリーは配列に記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号からなる代表ノード番号であり、
前記スタックには、弁別ビット位置の値が0より小さい値である終端ノードが仮想的なブランチノードとして最初に格納されることを特徴とする請求項1記載のビット列検索装置。 - 前記代表ノード番号を設定する代表ノード番号設定エリアと、
ノードがその属するノード対において代表ノード側に格納されているか代表ノードと対をなすノード側に格納されているかを示すノード位置のビット値を設定するノード位置設定エリアを備え、
前記代表ノード番号設定エリアに初期値として前記検索開始ノードの属するノード対の代表ノードの格納された配列要素の配列番号を設定するとともに、前記ノード位置設定エリアに初期値として該検索開始ノードのノード位置を示すビット値を設定し、
前記ブランチノードが次のノードにリンクする際、
該ブランチノードの弁別ビット位置の前記検索キーのビット値を前記ノード位置設定エリアに設定するとともに、該ブランチノードの代表ノード番号を前記代表ノード番号設定エリアに設定し、
前記代表ノード番号設定エリアに設定された代表ノード番号の指す配列要素を含むノード対を読み出し、該ノード対のうち前記ノード位置設定エリアに設定されたノード位置のノードをリンク先のノードとする、
ことを特徴とする請求項2記載のビット列検索装置。 - 前記スタックにリンク元のブランチノードを格納するとき、該ブランチノードの代表ノード番号に前記ノード位置設定エリアに設定されたビット値を加えることを特徴とする請求項3記載のビット列検索装置。
- ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含むカップルドノードツリーを用い、
前記カップルドノードツリーの任意のノードを検索開始ノードとし、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記カップルドノードツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするビット列検索方法において、
前記検索開始ノードから前記リーフノードに至るリンク経路のブランチノードを順次スタックに保持することを特徴とするビット列検索方法。 - 前記カップルドノードツリーは配列に記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号からなる代表ノード番号であり、
前記スタックには、弁別ビット位置の値が0より小さい値である終端ノードが仮想的なブランチノードとして検索経路の最初に格納されることを特徴とする請求項5記載のビット列検索方法。 - 前記代表ノード番号を設定する代表ノード番号設定エリアと、
ノードがその属するノード対において代表ノード側に格納されているか代表ノードと対をなすノード側に格納されているかを示すノード位置のビット値を設定するノード位置設定エリアを備え、
前記代表ノード番号設定エリアに初期値として前記検索開始ノードの属するノード対の代表ノードの格納された配列要素の配列番号を設定するとともに、前記ノード位置設定エリアに初期値として該検索開始ノードのノード位置を示すビット値を設定し、
前記ブランチノードが次のノードにリンクする際、
該ブランチノードの弁別ビット位置の前記検索キーのビット値を前記ノード位置設定エリアに設定するとともに、該ブランチノードの代表ノード番号を前記代表ノード番号設定エリアに設定し、
前記代表ノード番号設定エリアに設定された代表ノード番号の指す配列要素を含むノード対を読み出し、該ノード対のうち前記ノード位置設定エリアに設定されたノード位置のノードをリンク先のノードとする、
ことを特徴とする請求項6記載のビット列検索方法。 - 前記スタックにリンク元のブランチノードを格納するとき、該ブランチノードの代表ノード番号に前記ノード位置設定エリアに設定されたビット値を加えることを特徴とする請求項7記載のビット列検索方法。
- ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、
前記ツリーの任意のノードを検索開始ノードとし、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成されたカップルドノードツリーに所望のビット列からなるインデックスキーを含むリーフノードを挿入するインデックスキー挿入方法において、
前記インデックスキーを前記検索キーとして前記カップルドノードツリーから該当するリーフノードを検索するとともに、前記検索開始ノードから前記リーフノードに至るリンク経路のブランチノードをスタックに順次格納し、
前記検索キーと前記該当するリーフノードに含まれるインデックスキーの間で大小比較とビット列比較を行い、
ビット列比較で異なるビット値となる先頭のビット位置と前記スタックに格納されているブランチノードの弁別ビット位置との相対的位置関係により挿入されるインデックスキーを含むリーフノードともう一方のノードからなるノード対の挿入位置を決定し、
前記大小関係により挿入するインデックスキーを含むリーフノードを前記挿入されるノード対のどちらのノードとするかを決定する、
ことを特徴とするインデックスキー挿入方法。 - 前記カップルドノードツリーは配列に記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であり、
前記スタックには、弁別ビット位置の値が0より小さい値である終端ノードが仮想的なブランチノードとして最初に格納されることを特徴とする請求項9記載のインデックスキー挿入方法。 - ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、
前記ツリーの任意のノードを検索開始ノードとし、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成されたカップルドノードツリーから所望のビット列からなるインデックスキーを含むリーフノードを削除するリーフノード削除方法において、
前記インデックスキーを前記検索キーとして前記カップルドノードツリーから該当するリーフノードを検索するとともに該検索経路のブランチノードの位置情報を退避し、
該退避した位置情報により、削除対象のインデックスキーを保持する前記リーフノードと同一ノード対を構成するノードの内容を当該ノード対のリンク元のブランチノードに書き込み、
当該ノード対を削除する、
ことを特徴とするインデックスキー削除方法。 - ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含むカップルドノードツリーを用い、
前記カップルドノードツリーの任意のノードを検索開始ノードとし、前記ノード対のうち、該ノード対を構成する2つのノードのうちの代表ノードのみあるいは代表ノードと隣接した記憶領域に配置されたノードのみをリンクしてリーフノードに至ることにより、前記検索開始ノードをルートノードとする任意の部分木のインデックスキーの最小値あるいは最大値を求めるビット列検索方法において、
前記検索開始ノードから前記リーフノードに至るリンク経路のブランチノードを順次スタックに保持することを特徴とするビット列検索方法。 - 前記カップルドノードツリーは配列に記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号からなる代表ノード番号であり、
前記スタックには、弁別ビット位置の値が0より小さい値である終端ノードが仮想的なブランチノードとして最初に格納されることを特徴とする請求項12記載のビット列検索方法。 - 前記代表ノード番号を設定する代表ノード番号設定エリアと、
ノードがその属するノード対において代表ノード側に格納されているか代表ノードと対をなすノード側に格納されているかを示すノード位置のビット値を設定するノード位置設定エリアを備え、
前記代表ノード番号設定エリアに初期値として前記検索開始ノードの属するノード対の代表ノードの格納された配列要素の配列番号を設定するとともに、前記ノード位置設定エリアに初期値として該検索開始ノードのノード位置を示すビット値を設定し、
前記代表ノード番号設定エリアの初期値とノード位置設定エリアに設定されたビット値により配列から検索開始ノードを読み出し、
前記ブランチノードが次のノードにリンクする際、
前記ノードが代表ノード側に格納されていることを示すノード位置のビット値かあるいは代表ノードと対をなすノード側に格納されていることを示すノード位置のビット値を前記ノード位置設定エリアに設定するとともに、該ブランチノードの代表ノード番号を前記代表ノード番号設定エリアに設定し、
前記代表ノード番号設定エリアに設定された代表ノード番号の指す配列要素を含むノード対を読み出し、該ノード対のうち前記ノード位置設定エリアに設定されたノード位置のノードをリンク先のノードとする、
ことを特徴とする請求項13記載のビット列検索方法。 - 前記スタックにリンク元のブランチノードを格納するとき、該ブランチノードの代表ノード番号に前記ノード位置設定エリアに設定されたビット値を加えることを特徴とする請求項14記載のビット列検索方法。
- ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、
前記ツリーの任意のノードを検索開始ノードとし、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成されたカップルドノードツリーの分割方法において、
分割対象である処理元カップルドノードツリーを分割するインデックスキーを決定する分割キーを取得するステップと、
請求項12記載のビット列検索方法により前記処理元カップルドノードツリーのインデックスキーの最小値あるいは最大値を求める処理元最小値あるいは最大値取得ステップと、
前記分割キーと前記最小値あるいは最大値との大小を比較し、該最小値が前記分割キーより大きければあるいは該最大値が前記分割キーより小ければ処理を終了する比較ステップと、
前記比較の結果、該最小値が前記分割キーより大きくなければあるいは該最大値が前記分割キーより小さくなければ、
請求項9記載のインデックスキー挿入方法により該最小値あるいは該最大値のインデックスキーを挿入して新たな処理先カップルドノードツリーを生成する生成ステップと、
請求項11記載のインデックスキー削除方法により前記処理元カップルドノードツリーから前記最小値あるいは前記最大値のインデックスキーを削除する削除ステップと、
を備え、
前記最小値あるいは前記最大値のインデックスキーを削除した前記処理元カップルドノードツリーを新たな処理元カップルドノードツリーとした前記処理元最小値あるいは最大値取得ステップ、前記比較ステップ、前記生成ステップ及び前記削除ステップを前記処理元最小値あるいは最大値取得ステップで取得された最小値あるいは最大値が前記分割キーより大きくなるまであるいは小さくなるまで繰り返すことを特徴とするカップルドノードツリーの分割方法。 - 請求項16に記載のカップルドノードツリーの分割方法において、
前記カップルドノードツリーは配列に記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号からなる代表ノード番号であり、
前記スタックには、弁別ビット位置の値が0より小さい値である終端ノードが仮想的なブランチノードとして検索経路の最初に格納され、
前記生成ステップは、請求項10記載のインデックスキー挿入方法により該最小値あるいは該最大値のインデックスキーを挿入して新たな処理先カップルドノードツリーを生成するものであって、
前記処理元最小値あるいは最大値取得ステップで求めた最小値あるいは最大値を前記処理先カップルドノードツリーの挿入キーとして設定し、
請求項13記載のビット列検索方法により前記前記処理先カップルドノードツリーのインデックスキーの最大値あるいは最小値を取得する処理先最大値あるいは最小値取得ステップを実行し、
前記挿入キーと前記インデックスキーの最大値あるいは最小値との間でビット列比較を行って異なるビット値となる先頭のビット位置を求め、
該ビット位置と前記スタックに格納されている弁別ビット位置との相対的位置関係により、前記挿入キーを保持するリーフノードを含むノード対の挿入位置である処理先親ノードを決定し、
該処理先親ノードの前記位置情報を、前記挿入キーを保持するリーフノードを含むノード対の代表ノードが格納されている配列要素の配列番号とする、
ステップを含むものであること、
を特徴とするカップルドノードツリーの分割方法。 - 請求項17に記載のカップルドノードツリーの分割方法において、
前記生成ステップで決定した前記処理先親ノードを、検索開始ノードとして設定するステップを含み、
前記処理先最大値あるいは最小値取得ステップは、該設定された検索開始ノードを請求項14記載のビット列検索方法の検索開始ノードとして前記処理先カップルドノードツリーのインデックスキーの最大値あるいは最小値を取得するものであることを特徴とするカップルドノードツリーの分割方法。 - ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、
前記ツリーの任意のノードを検索開始ノードとし、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成された2つのカップルドノードツリーの結合方法において、
請求項12記載のビット列検索方法により前記2つのカップルドノードツリーの一方の処理元カップルドノードツリーのインデックスキーの最小値あるいは最大値を求める処理元最小値あるいは最大値取得ステップと、
請求項9記載のインデックス挿入方法により前記2つのカップルドノードツリーの他方の処理先カップルドノードツリーに前記最小値あるいは最大値のインデックスキーを挿入する挿入ステップと、
請求項11記載のインデックスキー削除方法により前記処理先カップルドノードツリーから前記最小値あるいは前記最大値のインデックスキーを削除する削除ステップと、
を備え、
前記最小値あるいは前記最大値のインデックスキーを削除した前記処理元カップルドノードツリーを新たな処理元カップルドノードツリーとした前記処理元最小値あるいは最大値取得ステップ、前記挿入ステップ及び前記削除ステップを前記処理元カップルドノードツリーがすべて削除されるまで繰り返すことを特徴とするカップルドノードツリーの結合方法。 - 請求項19に記載のカップルドノードツリーの結合方法において、
前記カップルドノードツリーは配列に記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号からなる代表ノード番号であり、
前記スタックには、弁別ビット位置の値が0より小さい値である終端ノードが仮想的なブランチノードとして検索経路の最初に格納され、
前記挿入ステップは、請求項10記載のインデックス挿入方法により前記2つのカップルドノードツリーの他方の処理先カップルドノードツリーに前記最小値あるいは最大値のインデックスキーを挿入するものであり、
前記最小値あるいは前記最大値を前記処理先カップルドノードツリーの挿入キーとして設定し、
請求項13記載のビット列検索方法により前記前記処理先カップルドノードツリーのインデックスキーの最大値あるいは最小値を取得する処理先最大値あるいは最小値取得ステップを実行し、
前記挿入キーと前記インデックスキーの最大値あるいは最小値との間でビット列比較を行って異なるビット値となる先頭のビット位置を求め、
該ビット位置と前記スタックに格納されている弁別ビット位置との相対的位置関係により、前記挿入キーを保持するリーフノードを含むノード対の挿入位置である親ノードを決定し、
該親ノードの前記位置情報を、前記挿入キーを保持するリーフノードを含むノード対の代表ノードが格納されている配列要素の配列番号とする、
ステップを含むものであること、
を特徴とするカップルドノードツリーの結合方法。 - ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、
前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、
前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、
前記ツリーの任意のノードを検索開始ノードとして前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成された、カップルドノードツリーの分割方法において、
分割対象である処理元カップルドノードツリーを分割する分割キーを取得するステップと、
前記処理元カップルドノードツリーの部分木であって前記分割キーをその最大値あるいは最小値とするもののうちで最大の部分木のルートノードである分割ノードを求める分割ノード取得ステップと、
前記分割ノードをルートノードとする部分木である分割ノードツリーを挿入することにより新たな処理先のカップルドノードツリーを生成するする生成ステップと、
前記分割ノードツリーを前記処理元カップルドノードツリーから削除する削除ステップ
を含み、
前記分割ノード取得ステップは、前記処理元のルートノードを前記検索開始ノードとし、前記分割キーを前記検索キーとして請求項5に記載のビット列検索を行い、前記ルートノードから前記分割キーに至る検索におけるリンク経路上のブランチノードであって該ブランチノードからの全てのリンク先のノードに前記分割キーより大きいあるいは小さいインデックスキーを含むリーフノードが存在せず、かつカップルドノードツリー上で最も上位にあるブランチノードを前記分割ノードとして取得することを特徴とするカップルドノードツリーの分割方法。 - 請求項21に記載のカップルドノードツリーの分割方法において、
前記ルートノードから前記分割ノードに至る前記リンク経路のブランチノードとノード対をなすノードであって、該ノードよりカップルドノードツリー上で下位の全てのリーフノードが前記分割キーより大きいあるいは小さいインデックスキーを含まず、かつカップルドノードツリー上で最も上位にあるノードを次の分割ノードとして取得する次分割ノード取得ステップを備え、
前記分割ノードを前記次の分割ノードとして前記生成ステップと前記削除ステップを実行することを特徴とするカップルドノードツリーの分割方法。 - 請求項21又は請求項22に記載のカップルドノードツリーの分割方法において、
前記カップルドノードツリーは配列に記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号からなる代表ノード番号であり、
前記スタックには、弁別ビット位置の値が0より小さい値である終端ノードが仮想的なブランチノードとして最初に格納されることを特徴とするカップルドノードツリーの分割方法。 - 請求項23に記載のカップルドノードツリーの分割方法において、
前記分割ノード取得ステップは、前記スタックに格納されたノードを、前記代表ノードとなるまで、あるいは前記代表ノードと対をなすノードとなるまで順次取り出し、該取り出した前記代表ノードあるいは前記代表ノードと対をなすノードを前記分割ノードとして取得することを特徴とするカップルドノードツリーの分割方法。 - 請求項24に記載のカップルドノードツリーの分割方法において、
前記次分割ノード取得ステップは、前記スタックに格納された、前記分割ノードより前に格納されたノードを、代表ノードと対をなすノードとなるまで、あるいは代表ノードとなるまで順次取り出し、該取り出した代表ノードと対をなすノードあるいは代表ノードと対をなすノードを前記次の分割ノードとして取得することを特徴とするカップルドノードツリーの分割方法。 - ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、
前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、
前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、
前記ツリーの任意のノードを検索開始ノードとして前記ブランチノードにおいて、該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成された2つのカップルドノードツリーの結合方法において、
請求項12記載のビット列検索方法により前記2つのカップルドノードツリーの一方の処理元カップルドノードツリーのインデックスキーの最大値あるいは最小値を求める処理元最大値あるいは最小値取得ステップと、
請求項12記載のビット列検索方法により前記2つのカップルドノードツリーの他方の処理先カップルドノードツリーのインデックスキーの最小値あるいは最大値を求める処理先最小値あるいは最大値取得ステップと、
前記処理元最大値あるいは最小値取得ステップで求めた処理元カップルドノードツリーのインデックスキーの最大値あるいは最小値と前記処理先最小値あるいは最大値取得ステップで求めた処理先カップルドノードツリーのインデックスキーの最小値あるいは最大値の差分ビット位置を求める差分ビット位置取得ステップと、
前記差分ビット位置取得ステップで求めた差分ビット位置に基づき前記処理元から分割して処理先に結合する部分木のルートノードである分割結合ノードを求める分割結合ノード取得ステップと、
前記差分ビット位置取得ステップで求めた差分ビット位置に基づき分割結合ノード取得ステップで求めた分割結合ノードを結合する処理先の結合位置を求める結合位置取得ステップと、
前記分割結合ノード取得ステップで求めた分割結合ノードを前記結合位置取得ステップで求めた処理先の結合位置に挿入する挿入ステップと、
前記分割結合ノード取得ステップで求めた分割結合ノードを前記処理元カップルドノードツリーから削除する削除ステップと、
を含むことを特徴とするカップルドノードツリーの結合方法。 - 請求項26に記載のカップルドノードツリーの結合方法において、
前記カップルドノードツリーは配列に記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号からなる代表ノード番号であり、
前記スタックには、弁別ビット位置の値が0より小さい値である終端ノードが仮想的なブランチノードとして最初に格納されることを特徴とするカップルドノードツリーの結合方法。 - 請求項27に記載のカップルドノードツリーの結合方法において、
前記分割結合ノード取得ステップは、前記処理元のスタックに格納されたブランチノードを、該ブランチノードの弁別ビット位置が前記差分ビット位置より上位になるまで取り出し、該取り出したブランチノードの代表ノード番号を配列番号とする配列要素に格納されたノードを分割結合ノードとして求め、
前記結合位置取得ステップは、前記処理先のスタックに格納されたブランチノードを、該ブランチノードの弁別ビット位置が前記差分ビット位置より上位になるまで取り出し、該取り出したブランチノードの代表ノード番号を配列番号とする配列要素に格納されたノードを結合位置として求めることを特徴とするカップルドノードツリーの結合方法。 - 請求項14記載のビット列検索方法により前記カップルドノードツリーのインデックスキーの最小値あるいは最大値を取得する初期検索ステップと、
前記初期検索ステップあるいは後記次検索ステップの後、前記スタックからノードを取り出し該ノードが終端ノードか判定する判定ステップと、
該取り出したノードの代表ノード番号から、前記ノード位置を示すビット値を減じた値を次の検索開始ノードの属するノード対の代表ノードの格納された配列要素の配列番号として設定するとともに、ノード位置設定エリアに代表ノード側でないノード位置を示すビット値あるいは代表ノード側であるノード位置を示すビット値を設定する次検索初期設定ステップと
前記次検索初期設定ステップでの設定に基づいて請求項14記載のビット列検索方法によりインデックスキーの最小値あるいは最大値を取得する次検索ステップと、
を備え、
前記判定ステップ、次検索初期設定ステップ、及び次検索ステップを、該判定ステップにおいて前記スタックから取り出したノードが終端ノードと判定されるまで繰り返すことにより、前記カップルドノードツリーに格納されたインデックスキーを昇順あるいは降順に取り出すことを特徴とするビット列検索方法。 - 検索範囲の下限を指定する下限キーを取得する下限キー取得ステップと、
前記下限キーを検索キーとして請求項7記載のビット列検索方法により前記検索結果キーを取り出す検索結果キー取得ステップと、
前記検索結果キーが前記下限キー以上であるか判定する判定ステップと、
前記スタックからのノードの取り出しを、該取り出したノードの代表ノード番号が指すノードの前記ノード位置が代表ノード側となるまで続け、その代表ノード番号が指すノードのノード位置が代表ノード側であるノードを取り出すノード取り出しステップと、
該取り出したノードの代表ノード番号を検索開始ノードの属するノード対の代表ノードの格納された配列要素の配列番号として設定するとともに、ノード位置設定エリアにノード位置として代表ノード側でないことを示すビット値を設定する最小値検索初期設定ステップと
前記最小値検索初期設定ステップでの設定に基づいて請求項14記載のビット列検索方法によりインデックスキーの最小値を検索結果キーとして取得する最小値検索ステップと、
を備え、
前記判定ステップの最初の判定において、前記検索結果キーと前記下限キーが等しいと判定されると、該検索結果キーを前記指定された下限キーに対する下限値として設定し、
前記検索結果キーが前記下限キーより小さいと判定されると、
前記判定ステップ、ノード取り出しステップ、最小値検索初期設定ステップ及び最小値検索ステップを、該判定ステップにおいて該検索結果キーが前記下限キーより大きいと判定されるまで繰り返し、
前記下限キーより大きいと判定された検索結果キーを前記指定された下限キーに対する下限値として設定することを特徴とするビット列検索方法。 - 検索範囲の上限を指定する上限キーを取得する上限キー取得ステップと、
前記上限キーを検索キーとして請求項7記載のビット列検索方法により前記検索結果キーを取り出す検索結果キー取得ステップと、
前記検索結果キーが前記上限キー以上であるか判定する判定ステップと、
前記スタックからのノードの取り出しを、該取り出したノードの代表ノード番号が指すノードの前記ノード位置が代表ノードではない側となるまで続け、その代表ノード番号が指すノードのノード位置が代表ノードではない側であるノードを取り出すノード取り出しステップと、
該取り出したノードの代表ノード番号から代表ノードではない側であるノード位置のビット値を減算した値を検索開始ノードの属するノード対の代表ノードの格納された配列要素の配列番号として設定するとともに、ノード位置設定エリアにノード位置として代表ノード側であることを示すビット値を設定する最大値検索初期設定ステップと
前記最大値検索初期設定ステップでの設定に基づいて請求項14記載のビット列検索方法によりインデックスキーの最大値を検索結果キーとして取得する最大値検索ステップと、
を備え、
前記判定ステップの最初の判定において、前記検索結果キーと前記上限キーが等しいと判定されると該検索結果キーを前記指定された上限キーに対する上限値として設定し、
前記検索結果キーが前記上限キーより大きいと判定されると、
前記判定ステップ、ノード取り出しステップ、最大値検索初期設定ステップ及び最大値検索ステップを、該判定ステップにおいて該検索結果キーが前記上限キーより小さいと判定されるまで繰り返し、
前記上限キーより小さいと判定された検索結果キーを前記指定された上限キーに対する上限値として設定することを特徴とするビット列検索方法。 - ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、
前記ツリーの任意のノードを検索開始ノードとし、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成されたカップルドノードツリーから検索範囲を指定して前記カップルドノードツリーに格納されたインデックスキーを昇順に取り出すビット列検索方法において、
検索範囲の上限を指定する上限キー及び検索範囲の下限を指定する下限キーを取得するとともに前記検索開始ノードにルートノードを設定する初期設定ステップと、
前記下限キーにより請求項30記載のビット列検索方法により下限値を取得する下限値取得ステップと、
前記上限キーにより請求項31記載のビット列検索方法により上限値を取得する上限値取得ステップと、
前記下限値を前記検索キーとして請求項7記載のビット列検索方法により前記検索結果キーを取り出す検索結果キー取得ステップと、
前記検索結果キーが前記上限値と等しいか判定する判定ステップと、
前記スタックからのノードの取り出しを、該取り出したノードの代表ノード番号が指すノードの前記ノード位置が代表ノード側となるまで続け、その代表ノード番号が指すノードのノード位置が代表ノード側であるノードを取り出すノード取り出しステップと、
該取り出したノードの代表ノード番号を検索開始ノードの属するノード対の代表ノードの格納された配列要素の配列番号として設定するとともに、ノード位置設定エリアにノード位置として代表ノード側でないことを示すビット値を設定する最小値検索初期設定ステップと
前記最小値検索初期設定ステップでの設定に基づいて請求項14記載のビット列検索方法によりインデックスキーの最小値を検索結果キーとして取得する最小値検索ステップと、
を備え、
前記判定ステップの判定において、前記検索結果キーと前記上限キーが等しいと判定されるまで、前記判定ステップ、ノード取り出しステップ、最小値検索初期設定ステップ及び最小値検索ステップを繰り返すことにより、前記下限キー及び前記上限キーにより指定された検索範囲の、前記カップルドノードツリーに格納されたインデックスキーを検索結果キーとして昇順に取り出すことを特徴とするビット列検索方法 - ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、
前記ツリーの任意のノードを検索開始ノードとし、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとするように構成されたカップルドノードツリーから検索範囲を指定して前記カップルドノードツリーに格納されたインデックスキーを降順に取り出すビット列検索方法において、
検索範囲の上限を指定する上限キー及び検索範囲の下限を指定する下限キーを取得するとともに前記検索開始ノードにルートノードを設定する初期設定ステップと、
前記下限キーにより請求項30記載のビット列検索方法により下限値を取得する下限値取得ステップと、
前記上限キーにより請求項31記載のビット列検索方法により上限値を取得する上限値取得ステップと、
前記上限値を前記検索キーとして請求項7記載のビット列検索方法により前記検索結果キーを取り出す検索結果キー取得ステップと、
前記検索結果キーが前記下限値と等しいか判定する判定ステップと、
前記スタックからのノードの取り出しを、該取り出したノードの代表ノード番号が指すノードの前記ノード位置が代表ノードではない側となるまで続け、その代表ノード番号が指すノードのノード位置が代表ノードではない側であるノードを取り出すノード取り出しステップと、
該取り出したノードの代表ノード番号から代表ノードではない側であるノード位置のビット値を減算した値を検索開始ノードの属するノード対の代表ノードの格納された配列要素の配列番号として設定するとともに、ノード位置設定エリアにノード位置として代表ノード側であることを示すビット値を設定する最大値検索初期設定ステップと
前記最大値検索初期設定ステップでの設定に基づいて請求項14記載のビット列検索方法によりインデックスキーの最大値を検索結果キーとして取得する最大値検索ステップと、
を備え、
前記判定ステップの判定において、前記検索結果キーと前記下限キーが等しいと判定されるまで、前記判定ステップ、ノード取り出しステップ、最大値検索初期設定ステップ及び最大値検索ステップを繰り返すことにより、前記上限キー及び前記下限キーにより指定された検索範囲の、前記カップルドノードツリーに格納されたインデックスキーを検索結果キーとして降順に取り出すことを特徴とするビット列検索方法 - ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含むカップルドノードツリーを用い、前記インデックスキーのうち所定の桁数の上位のビット値が等しいインデックスキーを求めるビット列検索方法において、
前記所定の桁数の上位の有意ビットを指定する前方一致キーを取得する前方一致キー取得ステップと、
前記前方一致キーの有意ビット以外のビット値を値“0”とした下限キーを生成する下限キー生成ステップと、
前記生成された下限キーに対して、検索開始ノードを前記ルートノードとして請求項30記載のビット列検索によりインデックスキーの下限値を求める下限値検索ステップと、
前記スタックからのノードの取り出しを、該取り出したノードの弁別ビット位置が前記前方一致キーの有意ビットの末尾のビット位置以下となるまで続け、その弁別ビット位置が前記前方一致キーの有意ビットの末尾のビット位置以下となるノードを取り出すノード取り出しステップと、
前記取り出したノードが終端ノードであればルートノードを検索開始ノードに設定し、終端ノードであれば、該取り出したノードの代表ノード番号を検索開始ノードに設定する検索開始ノード設定ステップと、
前記設定された検索開始ノードより請求項29記載のビット列検索方法により昇順にインデックスキーを取り出すインデックスキー取り出しステップと、
を備えることを特徴とするビット列検索方法。 - 請求項5〜請求項34のいずれか1項に記載の方法をコンピュータに実行させるためのプログラム。
- ビット列検索に用いるツリー状のデータ構造であって、
ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含むカップルドノードツリーを備え、
前記カップルドノードツリーの任意のノードを検索開始ノードとし、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記カップルドノードツリーの任意の部分木の前記検索キーによる検索結果である検索結果キーとすることを特徴とするデータ構造。 - 前記データ構造は配列に記憶され、前記ブランチノードが含む前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であることを特徴とする請求項36記載のデータ構造。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007240177 | 2007-09-14 | ||
JP2007240177 | 2007-09-14 | ||
PCT/JP2008/002362 WO2009034689A1 (ja) | 2007-09-14 | 2008-08-29 | ビット列検索装置、検索方法及びプログラム |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010099294A Division JP4545231B2 (ja) | 2007-09-14 | 2010-04-22 | カップルドノードツリーの分割/結合方法及びプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP4527807B2 JP4527807B2 (ja) | 2010-08-18 |
JPWO2009034689A1 true JPWO2009034689A1 (ja) | 2010-12-24 |
Family
ID=40451710
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009532051A Expired - Fee Related JP4527807B2 (ja) | 2007-09-14 | 2008-08-29 | ビット列検索装置、検索方法及びプログラム |
JP2010099294A Expired - Fee Related JP4545231B2 (ja) | 2007-09-14 | 2010-04-22 | カップルドノードツリーの分割/結合方法及びプログラム |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010099294A Expired - Fee Related JP4545231B2 (ja) | 2007-09-14 | 2010-04-22 | カップルドノードツリーの分割/結合方法及びプログラム |
Country Status (5)
Country | Link |
---|---|
US (1) | US8250089B2 (ja) |
EP (1) | EP2204744B1 (ja) |
JP (2) | JP4527807B2 (ja) |
CN (1) | CN101802822B (ja) |
WO (1) | WO2009034689A1 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPWO2013108333A1 (ja) * | 2012-01-18 | 2015-05-11 | 日本電気株式会社 | 検索装置、検索方法、及び、検索プログラム |
US10013444B2 (en) * | 2012-03-02 | 2018-07-03 | International Business Machines Corporation | Modifying an index node of a hierarchical dispersed storage index |
US9230001B2 (en) | 2013-11-14 | 2016-01-05 | Vmware, Inc. | Intelligent data propagation using performance monitoring |
US9268836B2 (en) * | 2013-11-14 | 2016-02-23 | Vmware, Inc. | Intelligent data propagation in a highly distributed environment |
KR102664792B1 (ko) * | 2021-10-08 | 2024-05-08 | 고려대학교 산학협력단 | 고속 질의 처리가 가능한 다차원 배열 압축 방법 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001202277A (ja) * | 1999-12-08 | 2001-07-27 | Hewlett Packard Co <Hp> | データ処理システム |
JP2001357070A (ja) * | 2000-06-13 | 2001-12-26 | Nec Corp | 情報検索方法及び装置 |
JP2003224581A (ja) * | 2002-01-31 | 2003-08-08 | Nippon Telegr & Teleph Corp <Ntt> | 最長一致検索回路および方法およびプログラムおよび記録媒体 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6675163B1 (en) * | 2000-04-06 | 2004-01-06 | International Business Machines Corporation | Full match (FM) search algorithm implementation for a network processor |
CN100426781C (zh) * | 2003-12-11 | 2008-10-15 | 华为技术有限公司 | 一种实现虚通路连接快速检索定位的方法 |
JP4271214B2 (ja) * | 2006-07-07 | 2009-06-03 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
JP4271227B2 (ja) * | 2006-10-30 | 2009-06-03 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
JP4379894B2 (ja) * | 2006-11-28 | 2009-12-09 | 株式会社エスグランツ | カップルドノードツリーの分割/結合方法及びプログラム |
JP4402120B2 (ja) * | 2007-01-24 | 2010-01-20 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
-
2008
- 2008-08-29 CN CN2008801071011A patent/CN101802822B/zh not_active Expired - Fee Related
- 2008-08-29 WO PCT/JP2008/002362 patent/WO2009034689A1/ja active Application Filing
- 2008-08-29 JP JP2009532051A patent/JP4527807B2/ja not_active Expired - Fee Related
- 2008-08-29 EP EP08790516.2A patent/EP2204744B1/en not_active Not-in-force
-
2010
- 2010-03-12 US US12/659,562 patent/US8250089B2/en active Active
- 2010-04-22 JP JP2010099294A patent/JP4545231B2/ja not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001202277A (ja) * | 1999-12-08 | 2001-07-27 | Hewlett Packard Co <Hp> | データ処理システム |
JP2001357070A (ja) * | 2000-06-13 | 2001-12-26 | Nec Corp | 情報検索方法及び装置 |
JP2003224581A (ja) * | 2002-01-31 | 2003-08-08 | Nippon Telegr & Teleph Corp <Ntt> | 最長一致検索回路および方法およびプログラムおよび記録媒体 |
Non-Patent Citations (4)
Title |
---|
CSNG199800390014, "用語解説", 人工知能学会誌, 19960301, 第11巻 第2号, 337−339ページ, JP, 社団法人人工知能学会 * |
CSNG200700792008, 矢田 晋, "パトリシアトライに対する簡潔な配列表現", 電子情報通信学会技術研究報告, 20070622, Vol.107 No.127 IEICE, 101−106ページ, JP, 社団法人電子情報通信学会 * |
JPN6010030199, 矢田 晋, "パトリシアトライに対する簡潔な配列表現", 電子情報通信学会技術研究報告, 20070622, Vol.107 No.127 IEICE, 101−106ページ, JP, 社団法人電子情報通信学会 * |
JPN6010030201, "用語解説", 人工知能学会誌, 19960301, 第11巻 第2号, 337−339ページ, JP, 社団法人人工知能学会 * |
Also Published As
Publication number | Publication date |
---|---|
JP2010198632A (ja) | 2010-09-09 |
EP2204744A4 (en) | 2011-09-07 |
EP2204744A1 (en) | 2010-07-07 |
JP4527807B2 (ja) | 2010-08-18 |
CN101802822A (zh) | 2010-08-11 |
US8250089B2 (en) | 2012-08-21 |
WO2009034689A1 (ja) | 2009-03-19 |
US20100174742A1 (en) | 2010-07-08 |
JP4545231B2 (ja) | 2010-09-15 |
EP2204744B1 (en) | 2013-04-24 |
CN101802822B (zh) | 2012-10-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4379894B2 (ja) | カップルドノードツリーの分割/結合方法及びプログラム | |
JP4271227B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP4402120B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP4545231B2 (ja) | カップルドノードツリーの分割/結合方法及びプログラム | |
EP2048584B1 (en) | Bit sequence search device, search method, and program | |
JP4514771B2 (ja) | カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム | |
JP4498409B2 (ja) | データベースのインデックスキー更新方法及びプログラム | |
JP5165662B2 (ja) | ビット列キー分類・分配装置、分類・分配方法及びプログラム | |
JP2009015530A (ja) | ビット列検索方法及びプログラム | |
JP4514768B2 (ja) | カップルドノードツリーの退避/復元装置、退避/復元方法及びプログラム | |
JP2009140161A (ja) | ビット列のマージソート方法及びプログラム | |
JP2008269503A (ja) | ビット列検索方法及び検索プログラム | |
JP4417431B2 (ja) | カップルドノードツリーの分割/結合方法及びプログラム | |
JP4567754B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP4813575B2 (ja) | ビット列検索装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A975 | Report on accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A971005 Effective date: 20100524 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20100601 |
|
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: 20100603 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130611 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4527807 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130611 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: 20130611 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 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |