JP4439013B2 - ビット列検索方法及び検索プログラム - Google Patents
ビット列検索方法及び検索プログラム Download PDFInfo
- Publication number
- JP4439013B2 JP4439013B2 JP2007114915A JP2007114915A JP4439013B2 JP 4439013 B2 JP4439013 B2 JP 4439013B2 JP 2007114915 A JP2007114915 A JP 2007114915A JP 2007114915 A JP2007114915 A JP 2007114915A JP 4439013 B2 JP4439013 B2 JP 4439013B2
- Authority
- JP
- Japan
- Prior art keywords
- node
- search
- storing
- key
- array element
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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)
Description
上記ビット列の検索を高速に行うために、ビット列を記憶するデータ構造を種々に工夫することが従来から行われている。このようなものの一つとして、パトリシアツリーという木構造が知られている。
ある検索キーで検索を行うとき、ルートノードから順次各ノードに保持される検索キーの検査ビット位置を検査していき、検査ビット位置のビット値が1であるか0であるか判定を行い、1であれば右リンクをたどり、0であれば左リンクをたどる。そして、リンク先のノードの検査ビット位置がリンク元のノードの検査ビット位置より大きくなければ、すなわち、リンク先が下方でなく上方に戻れば(図13において点線で示されたこの逆戻りのリンクをバックリンクという)、リンク先のノードのインデックスキーと検索キーの比較を行う。比較の結果、等しければ検索成功であり、等しくなければ検索失敗であることが保証されている。
ーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含むカップルドノードツリーを用いたビット列検索を提案した。また、上記先の出願には、与えられたインデックスキーを含むリーフノードの挿入を繰り返すことにより与えられたインデックスキーの集合からカップルドノードツリーを生成する方法と、指定された削除キーをインデックスキーとするノードをカップルドノードツリーから削除する方法も示されている。
図1を参照すると、ノード101が配列100の配列番号10の配列要素に配置されている。ノード101はノード種別102、弁別ビット位置103及び代表ノード番号104で構成されている。ノード種別102の値は0であり、ノード101がブランチノードであることを示している。弁別ビット位置103には1が格納されている。代表ノード番号104にはリンク先のノード対の代表ノードの配列番号20が格納されている。配列番号は上記第一の位置情報の具体例である。なお、以下では表記の簡略化のため、代表ノード番号に格納された配列番号を代表ノード番号ということもある。また、代表ノード番号に格納された配列番号をそのノードに付した符号あるいはノード対に付した符号で表すこともある。
うこともある。さらに、あるリーフノードと、そのリーフノードの参照ポインタが示す記憶領域に格納されたインデックスキーとの関係を示すのに、リーフノードに対応するインデックスキーということもあり、インデックスキーに対応するリーフノードということもある。
ノード[0]112、ノード[1]113、ノード122、及びノード123の格納された配列要素にそれぞれ付された0あるいは1は、検索キーで検索を行う場合にノード対のどちらのノードにリンクするかを示すものである。前段のブランチノードの弁別ビット位置にある検索キーのビット値である0か1を代表ノード番号に加えた配列番号のノードにリンクする。
図2は、カップルドノードツリーのツリー構造を概念的に示す図である。
ツリー構造としては、ルートノード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にリンクする。
カップルドノードツリーの構成はインデックスキーの集合により規定される。図2の例で、ルートノード210aの弁別ビット位置230aが0であるのは、図2に例示されたインデックスキーに0ビット目が0のものと1のものがあるからである。0ビット目が0のインデックスキーのグループはノード210bの下に分類され、0ビット目が1のインデックスキーのグループはノード211bの下に分類されている。
そして2ビット目が1であるインデックスキーは3ビット目の異なるものがあるのでノード211fの弁別ビット位置231fには3が格納され、2ビット目が0であるインデックスキーでは3ビット目も4ビット目も等しく5ビット目で異なるのでノード210fの弁別ビット位置230fには5が格納される。
つしかないことから、ノード210h、211hはリーフノードとなり、参照ポインタ250hと251hには、“101011XXXXXXXX”、“101100XXXXXXXX”というインデックスキー290h、291hを格納した記憶領域を指す参照ポインタ280h、281hがそれぞれ格納されている。
そしてさらにいえば、異なるビット値となるビット位置ごとにビット値が“1”のノードとビット値が“0”のノードとに分岐していることから、ノード[1]側とツリーの深さ方向を優先させてリーフノードをたどると、それらに格納されたインデックスキーは、ノード211hに対応するインデックスキー291hの“101100XXXXXXXX”、ノード210hに対応するインデックスキー290hの“101011XXXXXXXX”、・・・、ノード210cに対応するインデックスキー290cの“000111XXXXXXXX”となり降順にソートされている。
検索キーで検索するときはインデックスキーがカップルドノードツリー上に配置されたルートをたどることになり、例えば検索キーが“101100”であればノード211hに到達することができる。また、上記説明からも想像がつくように、“101101”か“101110”を検索キーとした場合でもノード211hにたどり着き、参照ポインタ281hにより示される記憶領域に格納されたインデックスキー291hと比較することにより、検索が失敗したことが分かる。
本発明の検索装置による検索処理及びデータメンテナンスは中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。カップルドノードツリーが配置される配列309と検索中にたどるノードが格納された配列要素の配列番号を記憶する探索経路スタック310とインデックスキーの記憶領域311を有するデータ格納装置308は、主記憶装置305または外部記憶装置306で実現することができ、あるいは通信装置307を介して接続された遠方に配置された装置を用いることも可能である。図1の配列100は配列309の一例である。また、図2と同様に、インデックスキーの記憶領域311は連続した領域のように図示されているが、不連続の領域でもよいことは当然である。
図3に示したとおり、カップルドノードツリーのノードを格納した配列要素からなる配列309と、インデックスキーの記憶領域311とは別の領域である。したがって、リーフノードを格納した配列要素にインデックスキーが含まれる場合に比べて、図3の構成では、一般に1つの配列要素に必要な記憶領域の量が少ない。つまり、カップルドノードツリーを格納する配列309からインデックスキーの記憶領域311を分離することによって、キャッシュメモリ303へのカップルドノードツリーの読み込みにおいて1キャッシュブロックあたりに格納されるノード数を増やすことが可能となる。それにより、後述する検索処理等においてキャッシュミスの頻度が減って処理がより高速に行われるようになる。
まず、ステップS401で、検索開始ノードとしてのルートノードの配列番号を取得する。取得された配列番号に対応する配列要素は、ルートノードを格納している。
も可能である。その場合、検索対象の部分木のルートノードの配列番号をステップS401で得るように図4の処理を変形すればよい。検索対象の部分木のルートノードは、図4の検索処理を呼び出す応用処理により指定されるので、ステップS401では呼び出し元から検索対象の部分木のルートノードの配列番号を受け取ればよい。本出願人による特願2006−293619号において示された、インデックスキーを昇順に取り出す処理は、そのような応用処理の具体例である。
ステップS512において、配列から空きのノード対を求め、そのノード対のうち代表ノードとなるべき配列要素の配列番号を取得する。
ステップS514に進み、ステップS512で得た代表ノードの配列番号にステップS513で得たブール値を加算した配列番号を得る。
ステップS514で得た配列番号は、挿入キーをインデックスキーとして格納する記憶
領域への参照ポインタを持つリーフノードが格納される配列要素の配列番号であり、ステップS515で得た配列番号は、そのリーフノードとノード対を成すノードが格納される配列要素のものである。
ステップS516〜ステップS523までの処理は、挿入するノード対のカップルドノードツリー上の位置を求める処理であり、ステップS524以下の処理は各ノードにデータを設定して挿入処理を完成させる処理である。
ステップS517に進み、ステップS516で得た差分ビット列から、上位0ビット目から見た最初の不一致ビットのビット位置を得る。この処理は、例えばプライオリティエンコーダを有するCPUではそこに差分ビット列を入力し、不一致のビット位置を得ることができる。また、ソフト的にプライオリティエンコーダと同等の処理を行い最初の不一致ビットのビット位置を得ることも可能である。
ステップS520に進み、ステップS519で取り出した配列番号の配列要素を配列からノードとして読み出す。
次にステップS522に進み、ステップS521で取り出した弁別ビット位置がステップS517で得たビット位置より上位の位置関係か判定する。ここで上位の位置関係とは、ビット列のより左側の位置、すなわちビット位置の値が小さい位置であることとする。
ステップS524では探索経路スタックからスタックポインタの指す配列番号を取り出す。
次にステップS525bにおいて、挿入キーを、ステップS525aで得たポインタの指すインデックスキーの記憶領域に書き込む。
次にステップS527において、ステップS515で得た配列番号の配列要素にステップS526で読み出した内容を書き込む。
ステップS551において、取得することを求められたカップルドノードツリーのルートノードの配列番号が登録済みであるか判定される。登録済みであれば、図5〜図7を用いて説明した通常の挿入処理が行われる。
まず、ステップS552において、配列から空きのノード対を求め、そのノード対のうち代表ノードとなるべき配列要素の配列番号を取得する。次にステップS553において、ステップS552で得た配列番号に0を加えた配列番号を求める。(実際には、ステップS552で取得した配列番号に等しい。)次にステップS554aにおいて、挿入キーの格納に必要な記憶領域をインデックスキーの記憶領域上に確保し、確保した記憶領域を指すポインタを取得する。続くステップS554bでは、挿入キーを、ステップS554aで得たポインタの指す記憶領域に書き込む。さらにステップS554cでは、ステップS553で得た配列番号の配列要素すなわち挿入するルートノードに対応する配列要素の、ノード種別にリーフノードを示す1を、参照ポインタにステップS554aで得たポインタを書き込む。そしてステップS556では、ステップS553で取得したルートノードの配列番号を登録して処理を終了する。
ある。
図9は、削除処理の前段である検索処理の処理フローを示す図であり、図4に示した検索処理において削除キーを検索キーとしたものに相当する。ステップS901〜ステップS910bの処理は図4のステップS401〜ステップS410bに完全に対応するので説明は省略する。
まず、ステップS912で探索経路スタックに2つ以上の配列番号が格納されているか判定する。2つ以上の配列番号が格納されていないということは、言い換えれば1つだけで、その配列番号はルートノードの格納された配列要素のものである。その場合はステップS918に移行し、ステップS901で得たルートノードの配列番号に係るノード対を削除する。次にステップS919に進み、登録されていたルートノードの配列番号を削除する。さらにステップS920aに進み、削除キーと等しいインデックスキーが格納されていた記憶領域、すなわちステップS910aで得た参照ポインタの指す記憶領域を解放して、処理を終了する。
最後にステップS920aにおいて、上記のとおり、ステップS910aで得た参照ポインタの指す記憶領域を解放し、処理を終了する。
図11Aに示したカップルドノードツリーは、ノード対201f以下のノードは記載を省略している。削除対象のインデックスキー“011010”は一時記憶エリアである削除キー270に格納されている。探索経路スタック310のスタックポインタは配列番号221c+1を指しており、検索処理が完了したことを示している。図中太枠で囲まれたノードが検索処理でたどられたノードであり、その配列番号がルートノード210aのものからリーフノード211dのものまで探索経路スタック310に積まれている。
域に格納されている。その記憶領域はインデックスキーの記憶領域311の一部である。そこで参照ポインタ281dの参照するインデックスキー291dを取り出すとその値は“011010”であり、削除キー270に格納された削除対象のインデックスキーと一致している。
図12Aに示すのは、ビット列“0100XXXXXXXX”、“0001XXXXXXXX”、“0000XXXXXXXX”をインデックスキーとして参照する参照ポインタを持つカップルドノードツリーである。これから挿入しようとする挿入キーは“0011XXXXXXXX”である。図示のツリーはノード対1201a、1201b、1201cで構成されている。
また、本発明のビット列検索方法を実行する装置が、カップルドノードツリーを格納する記憶手段と図4に示した処理をコンピュータに実行させるプログラムによりコンピュータ上に構築可能なことは明らかである。
100 配列
101 ノード
102、114、117、124、126、260a〜260h、261b〜261h
ノード種別
103、115、230a〜230f、231b〜231f 弁別ビット位置
104、116、220、220a〜220f、221b〜221f 代表ノード番号
111、121、201a〜201h、1201a〜1201d ノード対
112、122、210a〜210h、1210a〜1210d ノード[0]、代表ノード
113、123、211b〜211h、1211a〜1211d ノード[1]、代表ノードと対をなすノード
118a、250c〜250h、251d〜251h 参照ポインタ
270 削除キー
280c〜280h、281d〜281h、1280c、1281b〜1281d 参照ポインタ
290、290c〜290h、291d〜291h、1290c、1291b〜1291d インデックスキー
301 データ処理装置
302 中央処理装置
303 キャッシュメモリ
304 バス
305 主記憶装置
306 外部記憶装置
307 通信装置
308 データ格納装置
309 配列
310 探索経路スタック
311 インデックスキーの記憶領域
1730a〜1730h 検査ビット位置
1740a〜1740f 左リンク、左ポインタ
1741a〜1741f 右リンク、右ポインタ
1750a〜1750h ノード
Claims (10)
- ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーの位置情報が格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索装置において、
前記ツリーの始点であるルートノードと、隣接した記憶領域に配置される代表ノードと非代表ノードである2つのノードを有する、ツリーの構成要素としてのノード対を有し、前記ノードは該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、前記ノード種別に加えて、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す第一の位置情報を格納する領域を含むが、前記検索対象のビット列からなるインデックスキーを記憶する記憶領域の位置を示す第二の位置情報を格納する領域を含まないものであり、前記リーフノードは、前記ノード種別に加えて、前記検索対象のビット列からなるインデックスキーを記憶する記憶領域の位置を示す第二の位置情報を格納する領域を含むが、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す第一の位置情報を格納する領域を含まないものである、カップルドノードツリーと、
前記ノード対のどちらか一方のノードである検索開始ノードの位置を示す位置情報を取得し、該取得した検索開始ノードの位置を示す位置情報により検索開始ノードを読み出す検索開始ノード読出手段と、
前記ノードのノード種別を格納する領域から当該ノード種別を読み出し、該ノード種別が前記リーフノードを示すものであるかブランチノードを示すものであるかを判定するノード種別判定手段と、
前記リーフノードに含まれる前記第二の位置情報が示す記憶領域からインデックスキーを読み出すインデックスキー読出手段と、
前記ブランチノードの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す第一の位置情報を格納する領域からそれぞれ当該弁別ビット位置とリンク先のノード対の代表ノードの位置を示す第一の位置情報を読み出し、該読み出した弁別ビット位置の前記検索キーのビット値と前記読み出したリンク先のノード対の代表ノードの位置を示す第一の位置情報との演算によりリンク先のノード対のどちらかのノードの位置を示す位置情報を求め、該求めたノードの位置を示す位置情報により示される記憶領域から、該記憶領域に配置されたノードをリンク先ノードとして読み出すリンク手段と、
を備え、
前記検索開始ノード読出手段で読み出した検索開始ノードのノード種別を前記ノード種別判定手段で判定し、該ノード種別がリーフノードを示すものであれば、該リーフノードに含まれる前記第二の位置情報が示す記憶領域から前記インデックスキー読出手段によりインデックスキーを読み出し、該ノード種別がブランチノードを示すものであれば、前記リンク手段によりリンク先ノードを読み出し、該読み出したリンク先ノードのノード種別を前記ノード種別判定手段で判定することを該ノード種別がリーフノードを示すものとなるまで繰り返し、該リーフノードに含まれる前記第二の位置情報が示す記憶領域から前記インデックスキー読出手段によりインデックスキーを読み出し、
前記インデックスキー読出手段により読み出されたインデックスキーを、前記検索開始ノードをそのルートノードとする前記カップルドノードツリーの部分木の前記検索キーによる検索結果である検索結果キーとすることを特徴とするビット列検索装置。 - ビット列検索装置が、ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーの位置情報が格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索方法において、
前記ツリーは、該ツリーの始点であるルートノードと、隣接した記憶領域に配置される代表ノードと非代表ノードである2つのノードを有する、ツリーの構成要素としてのノード対を有し、前記ノードは該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、前記ノード種別に加えて、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す第一の位置情報を格納する領域を含むが、前記検索対象のビット列からなるインデックスキーを記憶する記憶領域の位置を示す第二の位置情報を格納する領域を含まないものであり、前記リーフノードは、前記ノード種別に加えて、前記検索対象のビット列からなるインデックスキーを記憶する記憶領域の位置を示す第二の位置情報を格納する領域を含むが、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す第一の位置情報を格納する領域を含まないものである、カップルドノードツリーであって、
前記ビット列検索方法は、
前記ノード対のどちらか一方のノードである検索開始ノードの位置を示す位置情報を取得し、該取得した検索開始ノードの位置を示す位置情報により検索開始ノードを読み出す検索開始ノード読出ステップと、
前記ノードのノード種別を格納する領域から当該ノード種別を読み出し、該ノード種別が前記リーフノードを示すものであるかブランチノードを示すものであるかを判定するノード種別判定ステップと、
前記リーフノードに含まれる前記第二の位置情報が示す記憶領域からインデックスキーを読み出すインデックスキー読出ステップと、
前記ブランチノードの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す第一の位置情報を格納する領域からそれぞれ当該弁別ビット位置とリンク先のノード対の代表ノードの位置を示す第一の位置情報を読み出し、該読み出した弁別ビット位置の前記検索キーのビット値と前記読み出したリンク先のノード対の代表ノードの位置を示す第一の位置情報との演算によりリンク先のノード対のどちらかのノードの位置を示す位置情報を求め、該求めたノードの位置を示す位置情報により示される記憶領域から、該記憶領域に配置されたノードをリンク先ノードとして読み出すリンクステップと、
を備え、
前記検索開始ノード読出ステップで読み出した検索開始ノードのノード種別を前記ノード種別判定ステップで判定し、該ノード種別がリーフノードを示すものであれば、該リーフノードに含まれる前記第二の位置情報が示す記憶領域から前記インデックスキー読出ステップによりインデックスキーを読み出し、該ノード種別がブランチノードを示すものであれば、前記リンクステップにより前記リンク先ノードを読み出し、該読み出したリンク先ノードのノード種別を前記ノード種別判定ステップで判定することを該ノード種別がリーフノードを示すものとなるまで繰り返し、該リーフノードに含まれる前記第二の位置情報が示す記憶領域から前記インデックスキー読出ステップによりインデックスキーを読み出し、
前記インデックスキー読出ステップにより読み出されたインデックスキーを、前記検索開始ノードをそのルートノードとする前記カップルドノードツリーの部分木の前記検索キーによる検索結果である検索結果キーとすることを特徴とするビット列検索方法。 - 前記カップルドノードツリーは、配列に記憶され、前記代表ノードの位置を示す第一の位置情報は、該代表ノードが配置された前記配列の配列要素の配列番号であり、
前記検索開始ノードの配置された配列要素の配列番号及び前記検索開始ノードから前記リーフノードに至るリンク先のノードの格納された配列要素の配列番号は、順次スタックに格納されていくことを特徴とする請求項2記載のビット列検索方法。 - ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーの位置情報が格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索装置が、前記ツリーに所望のビット列からなる挿入キーの位置情報をインデックスキーの位置情報として格納するインデックスキー挿入方法において、
前記ツリーは配列に記憶されたツリーであって、該ツリーの始点であるルートノードと、前記配列の隣接した配列要素に配置される代表ノードと非代表ノードである2つのノードを有する、ツリーの構成要素としてのノード対を有し、前記ノードは該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、前記ノード種別に加えて、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードが配置された前記配列の配列要素の配列番号を格納する領域を含むが、前記検索対象のビット列からなるインデックスキーを記憶する記憶領域の位置を示す第二の位置情報を格納する領域を含まないものであり、前記リーフノードは、前記ノード種別に加えて、前記検索対象のビット列からなるインデックスキーを記憶する記憶領域の位置を示す第二の位置情報を格納する領域を含むが、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードが配置された前記配列の配列要素の配列番号を格納する領域を含まないものである、カップルドノードツリーであり、
前記ビット列検索装置は、
前記ルートノードが格納された前記配列の配列要素の配列番号を取得し、該取得した配列番号の配列要素からルートノードを読み出すルートノード読出手段と、
前記ノードのノード種別を格納する領域から当該ノード種別を読み出し、該ノード種別が前記リーフノードを示すものであるかブランチノードを示すものであるかを判定するノード種別判定手段と、
前記リーフノードに含まれる前記第二の位置情報が示す記憶領域からインデックスキーを読み出すインデックスキー読出手段と、
前記ブランチノードの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードが配置された前記配列の配列要素の配列番号を格納する領域からそれぞれ当該弁別ビット位置とリンク先のノード対の代表ノードが配置された前記配列の配列要素の配列番号を読み出し、該読み出した弁別ビット位置の前記検索キーのビット値と前記読み出したリンク先のノード対の代表ノードが配置された前記配列の配列要素の配列番号との演算によりリンク先のノード対のどちらかのノードが配置された前記配列の配列要素の配列番号を求め、該求めた配列番号の配列要素に配置されたノードをリンク先ノードとして読み出すリンク手段と、
を備えたものであり、
前記インデックスキー挿入方法は、
前記挿入キーを前記検索キーとして、
前記ルートノード読出手段でルートノードを読み出し、該読みだしたルートノードのノード種別を前記ノード種別判定手段で判定し、該ノード種別がリーフノードを示すものであれば、該リーフノードに含まれる前記第二の位置情報が示す記憶領域から前記インデックスキー読出手段によりインデックスキーを読み出し、該ノード種別がブランチノードを示すものであれば、前記リンク手段により前記リンク先ノードを読み出し、該読み出したリンク先ノードのノード種別を前記ノード種別判定手段で判定することを該ノード種別がリーフノードを示すものとなるまで繰り返し、該リーフノードに含まれる前記第二の位置情報が示す記憶領域から前記インデックスキー読出手段によりインデックスキーを読み出すとともに、該リーフノードに至るまでたどったリンク経路のブランチノード及び該リーフノードが配置された配列要素の配列番号をスタックに順次格納する検索ステップと、
前記検索ステップで読み出したインデックスキーと前記挿入キーの間で大小比較とビット列比較を行う比較ステップと、
前記配列からノード対を配置する空配列要素の組を取得し、その一方の配列要素の配列番号を取得する空ノード対取得ステップと、
前記比較ステップにおける前記大小比較により、挿入キーを記憶する記憶領域の位置を示す位置情報を前記第二の位置情報として含むリーフノードを前記空ノード対取得ステップで取得した空配列要素の組のどちらの空配列要素に配置するかを決定するリーフノード格納位置決定ステップと、
前記比較ステップにおけるビット列比較で異なるビット値となる先頭のビット位置と、前記スタックに格納されている配列番号の配列要素に配置されたブランチノードの弁別ビット位置との相対的位置関係により、該スタックに格納されている配列番号を読み出し、該配列番号の配列要素に配置されているノードを、前記空ノード対取得ステップで取得した空配列要素の組に配置されるノード対のリンク元として該ノード対の挿入位置を決定するノード対挿入位置決定ステップと、
前記リーフノード格納位置決定ステップで決定した空配列要素に配置するリーフノードの、ノード種別を格納する領域にリーフノードであることを示すノード種別を、インデックスキーを記憶する記憶領域の位置を示す第二の位置情報を格納する領域に前記挿入キーを記憶する記憶領域の位置を示す位置情報を書き込み、もう一方の空配列要素に、前記ノード対挿入位置決定ステップで前記スタックから読み出した配列番号の配列要素に配置されているノードの内容を読み出して書き込むことで挿入ノード対を生成する挿入ノード対生成ステップと、
前記ノード対挿入位置決定ステップで前記スタックから読み出した配列番号の配列要素に配置されているノードをブランチノードとし、そのノード種別を格納する領域にブランチノードであることを示すノード種別を、弁別ビット位置を格納する領域に前記比較ステップにおけるビット列比較で異なるビット値となる先頭のビット位置を、リンク先のノード対の代表ノードが配置された前記配列の配列要素の配列番号を格納する領域に前記空ノード対取得ステップで取得した配列番号を、それぞれ書き込むブランチノード生成ステップと、
を備えたことを特徴とするインデックスキー挿入方法。 - ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーの位置情報が格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索装置が、所望のビット列からなる削除キーと等しいインデックスキーの前記ツリーに格納された位置情報を削除するインデックスキー削除方法において、
前記ツリーは配列に記憶されたツリーであって、該ツリーの始点であるルートノードと、前記配列の隣接した配列要素に配置される代表ノードと非代表ノードである2つのノードを有する、ツリーの構成要素としてのノード対を有し、前記ノードは該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、前記ノード種別に加えて、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードが配置された前記配列の配列要素の配列番号を格納する領域を含むが、前記検索対象のビット列からなるインデックスキーを記憶する記憶領域の位置を示す第二の位置情報を格納する領域を含まないものであり、前記リーフノードは、前記ノード種別に加えて、前記検索対象のビット列からなるインデックスキーを記憶する記憶領域の位置を示す第二の位置情報を格納する領域を含むが、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードが配置された前記配列の配列要素の配列番号を格納する領域を含まないものである、カップルドノードツリーであり、
前記ビット列検索装置は、
前記ルートノードが格納された前記配列の配列要素の配列番号を取得し、該取得した配列番号の配列要素からルートノードを読み出すルートノード読出手段と、
前記ノードのノード種別を格納する領域から当該ノード種別を読み出し、該ノード種別が前記リーフノードを示すものであるかブランチノードを示すものであるかを判定するノード種別判定手段と、
前記リーフノードに含まれる前記第二の位置情報が示す記憶領域からインデックスキーを読み出すインデックスキー読出手段と、
前記ブランチノードの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードが配置された前記配列の配列要素の配列番号を格納する領域からそれぞれ当該弁別ビット位置とリンク先のノード対の代表ノードが配置された前記配列の配列要素の配列番号を読み出し、該読み出した弁別ビット位置の前記検索キーのビット値と前記読み出したリンク先のノード対の代表ノードが配置された前記配列の配列要素の配列番号との演算によりリンク先のノード対のどちらかのノードが配置された前記配列の配列番号の配列要素を求め、該求めた配列番号の配列要素に配置されたノードをリンク先ノードとして読み出すリンク手段と、
を備えたものであり、
前記インデックスキー削除方法は、
前記削除キーを前記検索キーとして、
前記ルートノード読出手段でルートノードを読み出し、該読みだしたルートノードのノード種別を前記ノード種別判定手段で判定し、該ノード種別がリーフノードを示すものであれば、該リーフノードに含まれる前記第二の位置情報が示す記憶領域から前記インデックスキー読出手段によりインデックスキーを読み出し、該ノード種別がブランチノードを示すものであれば、前記リンク手段により前記リンク先ノードを読み出し、該読み出したリンク先ノードのノード種別を前記ノード種別判定手段で判定することを該ノード種別がリーフノードを示すものとなるまで繰り返し、該リーフノードに含まれる前記第二の位置情報が示す記憶領域から前記インデックスキー読出手段によりインデックスキーを読み出すとともに、該リーフノードに至るまでたどったリンク経路のブランチノード及び該リーフノードが配置された配列要素の配列番号をスタックに順次格納する検索ステップと、
前記検索ステップで読み出したインデックスキーと前記削除キーが等しいとき、
該インデックスキーを記憶する記憶領域の位置を示す第二の位置情報を含む前記リーフノードと同一ノード対を構成するノードが配置された配列要素の内容を読み出すノード読出ステップと、
前記リーフノードが配置された配列要素の配列番号の1つ前に前記スタックに格納された配列番号を該スタックから読み出し、該配列番号の配列要素に前記ノード読出ステップで読み出した配列要素の内容を書き込む書込みステップと、
前記ノード対の配置されている配列要素の組を解放するノード対削除ステップと、
を実行することを特徴とするインデックスキー削除方法。 - 請求項2〜請求項5のいずれか1項に記載の方法をコンピュータに実行させるためのプログラム。
- 請求項2〜請求項5のいずれか1項に記載の方法をコンピュータに実行させるためのプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
- ビット列からなる検索キーによるビット列検索に用いる、検索対象であるビット列からなるインデックスキーの位置情報が格納されたツリーのデータ構造において、
前記ツリーの始点であるルートノードと、隣接した記憶領域に配置される代表ノードと非代表ノードである2つのノードを有する、ツリーの構成要素としてのノード対を有し、前記ノードは該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、前記ノード種別に加えて、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す第一の位置情報を格納する領域を含むが、前記検索対象のビット列からなるインデックスキーを記憶する記憶領域の位置を示す第二の位置情報を格納する領域を含まないものであり、前記リーフノードは、前記ノード種別に加えて、前記検索対象のビット列からなるインデックスキーを記憶する記憶領域の位置を示す第二の位置情報を格納する領域を含むが、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す第一の位置情報を格納する領域を含まないものであり、
ビット列検索装置であって、
前記ツリーを記憶する記憶手段と、
前記ノード対のどちらか一方のノードである検索開始ノードの位置を示す位置情報を取得し、該取得した検索開始ノードの位置を示す位置情報により前記記憶手段から検索開始ノードを読み出す検索開始ノード読出手段と、
前記ノードのノード種別を格納する領域から当該ノード種別を読み出し、該ノード種別が前記リーフノードを示すものであるかブランチノードを示すものであるかを判定するノード種別判定手段と、
前記リーフノードに含まれる前記第二の位置情報が示す記憶領域からインデックスキーを読み出すインデックスキー読出手段と、
前記ブランチノードの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す第一の位置情報を格納する領域からそれぞれ当該弁別ビット位置とリンク先のノード対の代表ノードの位置を示す第一の位置情報を読み出し、該読み出した弁別ビット位置の前記検索キーのビット値と前記読み出したリンク先のノード対の代表ノードの位置を示す第一の位置情報との演算によりリンク先のノード対のどちらかのノードの位置を示す位置情報を求め、該求めたノードの位置を示す位置情報により示される記憶領域から、該記憶領域に配置されたノードをリンク先ノードとして読み出すリンク手段と、
を備えたビット列検索装置により、
前記検索開始ノード読出手段で読み出した検索開始ノードのノード種別を前記ノード種別判定手段で判定し、該ノード種別がリーフノードを示すものであれば、該リーフノードに含まれる前記第二の位置情報が示す記憶領域から前記インデックスキー読出手段によりインデックスキーを読み出し、該ノード種別がブランチノードを示すものであれば、前記リンク手段により前記リンク先ノードを読み出し、該読み出したリンク先ノードのノード種別を前記ノード種別判定手段で判定することを該ノード種別がリーフノードを示すものとなるまで繰り返し、該リーフノードに含まれる前記第二の位置情報が示す記憶領域から前記インデックスキー読出手段によりインデックスキーを読み出し、
前記インデックスキー読出手段により読み出されたインデックスキーを、前記検索開始ノードをそのルートノードとする前記カップルドノードツリーの部分木の前記検索キーによる検索結果である検索結果キーとする前記検索キーによる検索の実行を可能とすることを特徴とするデータ構造。
- 前記データ構造は配列に記憶され、前記第一の位置情報は、該第一の位置情報に対応する前記代表ノードが配置された前記配列の配列要素の配列番号であることを特徴とする請求項8記載のデータ構造。
- 請求項8又は請求項9記載のデータ構造を記憶したことを特徴とするコンピュータ読み取り可能な記憶媒体。
Priority Applications (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007114915A JP4439013B2 (ja) | 2007-04-25 | 2007-04-25 | ビット列検索方法及び検索プログラム |
EP08738589.4A EP2149845B1 (en) | 2007-04-19 | 2008-04-14 | Coupled node tree backup/restore apparatus, backup/restore method, and program |
CN2008800122779A CN101657818B (zh) | 2007-04-19 | 2008-04-14 | 配对节点树保存/复原方法、最长一致/最短一致检索方法、比特序列检索方法以及存储介质 |
PCT/JP2008/000983 WO2008132806A1 (ja) | 2007-04-19 | 2008-04-14 | カップルドノードツリーの退避/復元方法、最長一致/最短一致検索方法、ビット列検索方法及び記憶媒体 |
TW097114278A TW200846955A (en) | 2007-04-19 | 2008-04-18 | Coupled node tree save/restore method, longest consistence/shortest consistence retrieval method, bit retrieval method and memory medium |
US12/588,522 US8250076B2 (en) | 2007-04-25 | 2009-10-19 | Bit string search apparatus, search method, and program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007114915A JP4439013B2 (ja) | 2007-04-25 | 2007-04-25 | ビット列検索方法及び検索プログラム |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2008269503A JP2008269503A (ja) | 2008-11-06 |
JP2008269503A5 JP2008269503A5 (ja) | 2009-11-26 |
JP4439013B2 true JP4439013B2 (ja) | 2010-03-24 |
Family
ID=40048871
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007114915A Expired - Fee Related JP4439013B2 (ja) | 2007-04-19 | 2007-04-25 | ビット列検索方法及び検索プログラム |
Country Status (2)
Country | Link |
---|---|
US (1) | US8250076B2 (ja) |
JP (1) | JP4439013B2 (ja) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4567754B2 (ja) | 2008-01-17 | 2010-10-20 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
JP5165662B2 (ja) * | 2009-10-27 | 2013-03-21 | 株式会社高速屋 | ビット列キー分類・分配装置、分類・分配方法及びプログラム |
JP5220057B2 (ja) * | 2010-05-27 | 2013-06-26 | 株式会社高速屋 | ビット列検索装置、検索方法及びプログラム |
JP5220047B2 (ja) * | 2009-11-30 | 2013-06-26 | 株式会社高速屋 | ビット列検索装置、検索方法及びプログラム |
WO2011064984A1 (ja) | 2009-11-30 | 2011-06-03 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
US8493249B2 (en) | 2011-06-03 | 2013-07-23 | Microsoft Corporation | Compression match enumeration |
US20140101150A1 (en) * | 2012-10-05 | 2014-04-10 | Axis Semiconductor, Inc. | Efficient high performance scalable pipelined searching method using variable stride multibit tries |
US10067966B2 (en) * | 2015-09-29 | 2018-09-04 | Vmware, Inc. | Leveraging hierarchy in a tree data structure to dynamically allocate keys |
US10262016B2 (en) | 2015-09-29 | 2019-04-16 | Vmware, Inc. | Tuning key space at the time of instantiation of a tree data structure |
Family Cites Families (5)
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 |
JP3601416B2 (ja) | 2000-06-13 | 2004-12-15 | 日本電気株式会社 | 情報検索方法及び装置 |
JP4270050B2 (ja) | 2004-07-13 | 2009-05-27 | パナソニック株式会社 | 冷蔵庫 |
JP4271214B2 (ja) | 2006-07-07 | 2009-06-03 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
JP4271227B2 (ja) | 2006-10-30 | 2009-06-03 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
-
2007
- 2007-04-25 JP JP2007114915A patent/JP4439013B2/ja not_active Expired - Fee Related
-
2009
- 2009-10-19 US US12/588,522 patent/US8250076B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US20100042596A1 (en) | 2010-02-18 |
JP2008269503A (ja) | 2008-11-06 |
US8250076B2 (en) | 2012-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4271214B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP4439013B2 (ja) | ビット列検索方法及び検索プログラム | |
JP4271227B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP4514771B2 (ja) | カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム | |
US8332410B2 (en) | Bit string merge sort device, method, and program | |
WO2009084145A1 (ja) | データベースのインデックスキー更新方法及びプログラム | |
JP4402120B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
CN101657818B (zh) | 配对节点树保存/复原方法、最长一致/最短一致检索方法、比特序列检索方法以及存储介质 | |
US8250089B2 (en) | Bit string search apparatus, search method, and program | |
JP4567754B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP4514810B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
WO2009122651A1 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP2011018296A (ja) | カップルドノードツリーのインデックスキー挿入/削除方法 | |
JP4813575B2 (ja) | ビット列検索装置 | |
WO2009093290A1 (ja) | ビット列検索装置、検索方法及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090908 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20090908 |
|
A871 | Explanation of circumstances concerning accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20090908 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20091014 |
|
A975 | Report on accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A971005 Effective date: 20091023 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20091110 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20091201 |
|
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: 20091228 |
|
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: 20100104 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130115 Year of fee payment: 3 |
|
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: 20130115 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: 20130115 Year of fee payment: 3 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20160115 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |