JP4271227B2 - ビット列検索装置、検索方法及びプログラム - Google Patents

ビット列検索装置、検索方法及びプログラム Download PDF

Info

Publication number
JP4271227B2
JP4271227B2 JP2006293619A JP2006293619A JP4271227B2 JP 4271227 B2 JP4271227 B2 JP 4271227B2 JP 2006293619 A JP2006293619 A JP 2006293619A JP 2006293619 A JP2006293619 A JP 2006293619A JP 4271227 B2 JP4271227 B2 JP 4271227B2
Authority
JP
Japan
Prior art keywords
node
search
key
array element
bit string
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2006293619A
Other languages
English (en)
Other versions
JP2008112240A (ja
Inventor
敏男 新庄
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
S Grants Co Ltd
Original Assignee
S Grants Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority to JP2006293619A priority Critical patent/JP4271227B2/ja
Application filed by S Grants Co Ltd filed Critical S Grants Co Ltd
Priority to PCT/JP2007/001120 priority patent/WO2008053583A1/ja
Priority to AT07827899T priority patent/ATE516556T1/de
Priority to CN2007800407904A priority patent/CN101535993B/zh
Priority to EP07827899A priority patent/EP2085897B1/en
Priority to TW096140594A priority patent/TW200821914A/zh
Publication of JP2008112240A publication Critical patent/JP2008112240A/ja
Priority to US12/385,956 priority patent/US8150856B2/en
Application granted granted Critical
Publication of JP4271227B2 publication Critical patent/JP4271227B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/31Indexing; Data structures therefor; Storage structures
    • G06F16/316Indexing structures
    • G06F16/322Trees

Landscapes

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

Description

本発明はビット列の集合から所望のビット列を検索する検索装置に関するものであり、特にビット列を記憶するデータ構造に工夫をして、検索速度等の向上を図る技術分野のものである。
近年、社会の情報化が進展し、大規模なデータベースが各所で利用されるようになってきている。このような大規模なデータベースからレコードを検索するには、各レコードの記憶されたアドレスと対応づけられたレコード内の項目をインデックスキーとして検索をし、所望のレコードを探し出すことが通例である。また、全文検索における文字列も、文書のインデックスキーと見なすことができる。
そして、それらのインデックスキーはビット列で表現されることから、データベースの検索はビット列の検索に帰着されるということができる。
上記ビット列の検索を高速に行うために、ビット列を記憶するデータ構造を種々に工夫することが従来から行われている。このようなものの一つとして、パトリシアツリーという木構造が知られている。
図24は、上述の従来の検索処理に用いられているパトリシアツリーの一例を示すものである。パトリシアツリーのノードは、インデックスキー、検索キーの検査ビット位置、左右のリンクポインタを含んで構成される。明示はされていないが、ノードにはインデックスキーに対応するレコードにアクセスするための情報が含まれていることは勿論である。
図24の例では、インデックスキー“100010”を保持するノード1750aがルートノードとなっており、その検査ビット位置は0である。ノード1750aの左リンク1740aにはノード1750bが接続され、右リンク1741aにはノード1750fが接続されている。
ノード1750bの保持するインデックスキーは“010011”であり、検査ビット位置1730bは1である。ノード1750bの左リンク1740bにはノード1750cが、右リンク1741bにはノード1750dが接続されている。ノード1750cが保持するインデックスキーは“000111”、検査ビット位置は3である。ノード1750dが保持するインデックスキーは“011010”、検査ビット位置は2である。
ノード1750cから実線で接続された部分はノード1750cの左右のリンクポインタを示すものであり、点線の接続されていない左ポインタ1740cは、その欄が空欄であることを示している。点線の接続された右ポインタ1741cの点線の接続先は、ポインタの示すアドレスを表しており、今の場合ノード1750cを右ポインタが指定していることを表している。
ノード1750dの右ポインタ1741dはノード1750d自身を指しており、左リンク1740dにはノード1750eが接続されている。1750eの保持するインデックスキーは“010010”、検査ビット位置は5である。ノード1750eの左ポインタ1740eはノード1750bを、右ポインタ1741eはノード1750eを指している。
また、ノード1750fの保持するインデックスキーは“101011”であり、検査ビット位置1730fは2である。ノード1750fの左リンク1740fにはノード1750gが、右リンク1741fにはノード1750hが接続されている。
ノード1750gの保持するインデックスキーは“100011”であり、検査ビット位置1730gは5である。ノード1750gの左ポインタ1740gはノード1750aを、右ポインタ1741gはノード1750gを指している。
ノード1750hの保持するインデックスキーは“101100”であり、検査ビット位置1730hは3である。ノード1750hの左ポインタ1740hはノード1750fを、右ポインタ1741hはノード1750hを指している。
図24の例では、ルートノード1750aからツリーを降りるにしたがって、各ノードの検査ビット位置が大きくなるように構成されている。
ある検索キーで検索を行うとき、ルートノードから順次各ノードに保持される検索キーの検査ビット位置を検査していき、検査ビット位置のビット値が1であるか0であるか判定を行い、1であれば右リンクをたどり、0であれば左リンクをたどる。そして、リンク先のノードの検査ビット位置がリンク元のノードの検査ビット位置より大きくなければ、すなわち、リンク先が下方でなく上方に戻れば(図24において点線で示されたこの逆戻りのリンクをバックリンクという)、リンク先のノードのインデックスキーと検索キーの比較を行う。比較の結果、等しければ検索成功であり、等しくなければ検索失敗であることが保証されている。
上記のように、パトリシアツリーを用いた検索処理では、必要なビットの検査だけで検索できること、キー全体の比較は1回ですむことなどのメリットがあるが、各ノードからの2つのリンクが必ずあることにより記憶容量が増大することや、バックリンクの存在による判定処理の複雑化、バックリンクにより戻ることで初めてインデックスキーと比較することによる検索処理の遅延及び追加削除等データメンテナンスの困難性などの欠点がある。
これらのパトリシアツリーの欠点を解消しようとするものとして、例えば下記特許文献1に開示された技術がある。下記特許文献1に記載されたパトリシアツリーにおいては、下位の左右のノードは連続した領域に記憶することによりポインタの記憶容量を削減するとともに、次のリンクがバックリンクであるか否かを示すビットを各ノードに設けることにより、バックリンクの判定処理を軽減している。
しかしながら、下記特許文献1に開示されたものにおいても、1つのノードは必ずインデックスキーの領域とポインタの領域を占めること、下位の左右のノードを連続した領域に記憶するようにしてポインタを1つとしたため、例えば図24に示したパトリシアツリーの最下段の部分である左ポインタ1740c、右ポインタ1741h等の部分にもノードと同じ容量の記憶領域を割り当てる必要があるなど、記憶容量の削減効果はあまり大きいものではない。また、バックリンクによる検索処理の遅延の問題や追加削除等の処理が困難であることも改善されていない。
上述の従来の検索手法における問題点を解決するものとして、本出願人は、特願2006−187827において、ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対からなるビット列検索に用いるツリーであって、ルートノードはツリーの始点を表すノードであって、該ツリーのノードが1つのときはリーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含むカップルドノードツリーを用いたビット列検索を提案した。
上記出願においては、与えられたインデックスキーの集合からカップルドノードツリーを生成する方法と、カップルドノードツリーから単一のインデックスキーを検索する手法等の、カップルドノードツリーを用いた基本的な検索手法が示されている。
しかし、ビット列の検索には、最小値、最大値を求めたり、ある範囲の値のものを求める等の各種の検索要求が存在する。
特開2001−357070号公報
そこで本発明の目的は、必要とする記憶容量が小さく、検索速度が高速であり、データメンテナンスの容易なデータ構造であるカップルドノードツリーを用いて、検索対象のビット列の集合から最大値、最小値を求めたり、ある範囲の値のものを求めたりする等の応用的な検索手法であって簡便で高速な手法を提供することである。
まず、本発明の基礎的な態様として、上記出願において提案されたビット列検索を、検索開始ノードを指定することによりカップルドノードツリーの任意の部分木における検索に拡張したビット列検索方法が提供される。
本発明の一つの態様によれば、カップルドノードツリーの任意のノードを検索開始ノードとして前記ノード対のうち、該ノード対を構成する2つのノードのうちの代表ノードのみあるいは代表ノードと隣接した記憶領域に配置されたノードのみをリンクしてリーフノードに至ることにより、検索開始ノードをルートノードとする任意の部分木のインデックスキーの最小値あるいは最大値を求める。
また、本発明の別の態様によれば、前記カップルドノードツリーは、配列に記憶され、前記位置情報は、該位置情報に対応するノードが格納された前記配列の配列要素の配列番号であり、前記検索開始ノードの格納された配列要素の配列番号及び前記検索開始ノードから前記リーフノードに至るリンク先のノードの格納された配列要素の配列番号は、順次スタックに保持される。そして、カップルドノードツリーのインデックスキーの最小値あるいは最大値を求めた後、スタックのポップ動作を実行して前記インデックスキーの最小値あるいは最大値の次に小さい値あるいは次に大きい値をとるインデックスキーを順次求めることにより、前記カップルドノードツリーに含まれるインデックスキーを昇順あるいは降順に出力する。
また、本発明の別の態様によれば、検索範囲の下限を指定するために入力された下限キーと前記インデックスキーの最小値との比較をし、前記下限キーが前記インデックスキーの最小値よりも大きい場合は、該下限キー以上の値をとるインデックスキーを、順次インデックスキーを前記昇順に取り出して該下限キーとの比較をする処理により求め、該下限キー以上の値をとるインデックスキーのうち最小のインデックスキーを前記検索範囲の下限値として設定する。あるいは、検索範囲の上限を指定するために入力された上限キーと前記インデックスキーの最大値との比較をし、前記上限キーが前記インデックスキーの最大値と等しい場合は、該インデックスキーの最大値を前記検索範囲の上限値として設定し、前記上限キーが前記インデックスキーの最大値よりも小さい場合は、該上限キー以下の値をとるインデックスキーを、順次インデックスキーを前記降順に取り出して該上限キーとの比較をする処理により求め、該上限キー以下の値をとるインデックスキーのうち最大のインデックスキーを前記検索範囲の上限値として設定する。
また、本発明の別の態様によれば、前記上限値から下限値までの検索範囲内のインデックスキーについて、上記昇順あるいは降順で取り出す処理を実行する。
また、本発明の別の態様によれば、前方から指定された数のビット以降については0を設定したビット列を、前記下限値を設定するために入力された下限キーとし、前方から前記指定された数のビット以降については1を設定したビット列を、前記上限値を設定するために入力された上限キーとして検索範囲を決定し、該検索範囲について昇順あるいは降順でインデックスキーを取り出すことにより、前方から前記指定された数のビットについて一致するビット列からなるインデックスキーを出力する前方一致検索を提供する。
本発明によれば、カップルドノードツリーを用いることにより、任意のビット列の集合から、最大値/最小値、昇順/降順でのインデックスキーの取り出し及び検索範囲の下限値/上限値の設定を、簡便で高速な手法で求めることができ、更には、これらの手法を組み合わせて、検索範囲を設定してから昇順降順でのインデックスキーの取り出し処理や、検索キーと一部一致するインデックスキーの取り出し処理を高速に実行することが可能となる。
最初に、本出願人により先の上記出願において提案された、本発明の前提となるカップルドノードツリーについて、カップルドノードツリーを配列に格納する例を説明する。ブランチノードが保持するリンク先の位置を示すデータとして、記憶装置のアドレス情報とすることもできるが、ブランチノードあるいはリーフノードのうち占有する領域の記憶容量の大きい方を格納可能な配列要素からなる配列を用いることにより、ノードの位置を配列番号で表すことができ、位置情報の情報量を削減することができる。
図1は、配列に格納されたカップルドノードツリーの構成例を説明する図である。
図1を参照すると、ノード101が配列100の配列番号10の配列要素に配置されている。ノード101はノード種別102、弁別ビット位置103及び代表ノード番号104で構成されている。ノード種別102は0であり、ノード101がブランチノードであることを示している。弁別ビット位置103には1が格納されている。代表ノード番号104にはリンク先のノード対の代表ノードの配列番号20が格納されている。なお、以下では表記の簡略化のため、代表ノード番号に格納された配列番号を代表ノード番号ということもある。また、代表ノード番号に格納された配列番号をそのノードに付した符号あるいはノード対に付した符号で表すこともある。
配列番号20の配列要素には、ノード対111の代表ノードであるノード[0]112が格納されている。そして隣接する次の配列要素(配列番号20+1)に代表ノードと対になるノード[1]113が格納されている。ノード[0]112のノード種別114には0が、弁別ビット位置115には3が、代表ノード番号116には30が格納されている。またノード[1]113のノード種別117には1が格納されており、ノード[1]113がリーフノードであることを示している。インデックスキー118には、“0001”が格納されている。パトリシアツリーについて先に述べたと同様に、リーフノードにインデックスキーと対応するレコードにアクセスする情報が含まれることは当然であるが、表記は省略している。
なお、代表ノードをノード[0]で表し、それと対になるノードをノード[1]で表すことがある。また、ある配列番号の配列要素に格納されたノードを、その配列番号のノードということがあり、ノードの格納された配列要素の配列番号を、ノードの配列番号ということもある。
配列番号30及び31の配列要素に格納されたノード122とノード123からなるノード対121の内容は省略されている。
ノード[0]112、ノード[1]113、ノード122、及びノード123の格納された配列要素にそれぞれ付された0あるいは1は、検索キーで検索を行う場合にノード対のどちらのノードにリンクするかを示すものである。前段のブランチノードの弁別ビット位置にある検索キーのビット値である0か1を代表ノード番号に加えた配列番号のノードにリンクする。
したがって、前段のブランチノードの代表ノード番号に、検索キーの弁別ビット位置のビット値を加えることにより、リンク先のノードが格納された配列要素の配列番号を求めることができる。
なお、上記の例では代表ノード番号をノード対の配置された配列番号のうち小さい方を採用しているが、大きいほうを採用することも可能であることは明らかである。
図2は、カップルドノードツリーのツリー構造を概念的に示す図である。図示の6ビットのインデックスキーは、図24に例示されたパトリシアツリーのものと同じである。
符号210aで示すのがルートノードである。図示の例では、ルートノード210aは配列番号220に配置されたノード対201aの代表ノードとしている。
ツリー構造としては、ルートノード210aの下にノート対201bが、その下層にノード対201cとノード対201fが配置され、ノード対201fの下層にはノード対201hとノード対201gが配置されている。ノード対201cの下にはノード対201dが、さらにその下にはノード対201eが配置されている。
各ノードの前に付された0あるいは1の符号は、図1において説明した配列要素の前に付された符号と同じである。検索キーの弁別ビット位置のビット値に応じてツリーをたどり、検索対象のリーフノードを見つけることになる。
図示された例では、ルートノード210aのノード種別260aは0でブランチノードであることを示し、弁別ビット位置230aは0を示している。代表ノード番号は220aであり、それはノード対201bの代表ノード210bの格納された配列要素の配列番号である。
ノード対201bはノード210bと211bで構成され、それらのノード種別260b、261bはともに0であり、ブランチノードであることを示している。ノード210bの弁別ビット位置230bには1が格納され、リンク先の代表ノード番号にはノード対201cの代表ノード210cの格納された配列要素の配列番号220bが格納されている。
ノード210cのノード種別260cには1が格納されているので、このノードはリーフノードであり、したがって、インデックスキーを含んでいる。インデックスキー250cには“000111”が格納されている。一方ノード211cのノード種別261cは0、弁別ビット位置231cは2であり、代表ノード番号にはノード対201dの代表ノード210dの格納された配列要素の配列番号221cが格納されている。
ノード210dのノード種別260dは0、弁別ビット位置230dは5であり、代表ノード番号にはノード対201eの代表ノード210eの格納された配列要素の配列番号220dが格納されている。ノード210dと対になるノード211dのノード種別261dは1であり、インデックスキー251dには“011010”が格納されている。
ノード対201eのノード210e、211eのノード種別260e、261eはともに1であり双方ともリーフノードであることを示し、それぞれのインデックスキー250e、251eにはインデックスキーとして“010010”と“010011”が格納されている。
ノード対201bのもう一方のノードであるノード211bの弁別ビット位置231bには2が格納され、リンク先の代表ノード番号にはノード対201fの代表ノード210fの格納された配列要素の配列番号221bが格納されている。
ノード対201fのノード210f、211fのノード種別260f、261fはともに0であり双方ともブランチノードである。それぞれの弁別ビット位置230f、231fには5、3が格納されている。ノード210fの代表ノード番号にはノード対201gの代表ノード210gの格納された配列要素の配列番号220fが格納され、ノード211fの代表ノード番号にはノード対201hの代表ノードであるノード[0]210hの格納された配列要素の配列番号221fが格納されている。
ノード対201gのノード210g、211gのノード種別260g、261gはともに1であり双方ともリーフノードであることを示し、それぞれのインデックスキー250g、251gには“100010”と“100011”が格納されている。
また同じくノード対201hの代表ノードであるノード[0]210hとそれと対をなすノード[1]211hのノード種別260h、261hはともに1であり双方ともリーフノードであることを示し、それぞれのインデックスキー250h、251hには“101011”と“101100“が格納されている。
以下、上述のツリーからインデックスキー“100010”を検索する処理の流れを簡単に説明する。弁別ビット位置は、左から0、1、2、・・・とする。
まず、ビット列“100010”を検索キーとしてルートノード210aから処理をスタートする。ルートノード210aの弁別ビット位置230aは0であるので、検索キー“100010”の弁別ビット位置が0のビット値をみると1である。そこで代表ノード番号の格納された配列番号220aに1を加えた配列番号の配列要素に格納されたノード211bにリンクする。ノード211bの弁別ビット位置231bには2が格納されているので、検索キー“100010”の弁別ビット位置が2のビット値をみると0であるから、代表ノード番号の格納された配列番号221bの配列要素に格納されたノード210fにリンクする。
ノード210fの弁別ビット位置230fには5が格納されているので、検索キー“100010”の弁別ビット位置が5のビット値をみると0であるから、代表ノード番号の格納された配列番号220fの配列要素に格納されたノード210gにリンクする。
ノード210gのノード種別260gは1でありリーフノードであることを示しているので、インデックスキー250gを読み出して検索キーと比較すると両方とも“100010”であって一致している。このようにしてカップルドノードツリーを用いた検索が行われる。
次に、図2を参照してカップルドノードツリーの構成の意味について説明する。
カップルドノードツリーの構成はインデックスキーの集合により規定される。図2の例で、ルートノード210aの弁別ビット位置が0であるのは、図2に例示されたインデックスキーに0ビット目が0のものと1のものがあるからである。0ビット目が0のインデックスキーのグループはノード210bの下に分類され、0ビット目が1のインデックスキーのグループはノード211bの下に分類されている。
ノード211bの弁別ビット位置が2であるのは、ノード211h、210h、211g、210gに格納された0ビット目が1のインデックスキーの1ビット目がすべて0で等しく、2ビット目で初めて異なるものがあるという、インデックスキーの集合の性質を反映している。
以下0ビット目の場合と同様に、2ビット目が1であるものはノード211f側に分類され、2ビット目が0であるものはノード210f側に分類される。
そして2ビット目が1であるインデックスキーは3ビット目の異なるものがあるのでノード211fの弁別ビット位置には3が格納され、2ビット目が0であるインデックスキーでは3ビット目も4ビット目も等しく5ビット目で異なるのでノード210fの弁別ビット位置には5が格納される。
ノード211fのリンク先においては、3ビット目が1のものと0のものがそれぞれ1つしかないことから、ノード210h、211hはリーフノードとなり、それぞれインデックスキー250hと251hに“101011”と“101100”が格納されている。
仮にインデックスキーの集合に“101100”の代わりに“101101”か“101110”が含まれていたとしても、3ビット目までは“101100”と等しいので、ノード211hに格納されるインデックスキーが変わるだけで、ツリー構造自体は変わることはない。しかし、“101100”に加えて“101101”が含まれていると、ノード211hはブランチノードとなり、その弁別ビット位置は5になる。追加されるインデックスキーが“101110”であれば、弁別ビット位置は4となる。
以上説明したように、カップルドノードツリーの構造は、インデックスキーの集合に含まれる各インデックスキーの各ビット位置のビット値により決定される。
そしてさらにいえば、異なるビット値となるビット位置ごとにビット値が“1”のノードとビット値が“0”のノードとに分岐していることから、ノード[1]側とツリーの深さ方向を優先させてリーフノードをたどると、それらに格納されたインデックスキーは、ノード211hのインデックスキー251hの“101100”、ノード210hのインデックスキー250hの“101011”、・・・、ノード210cのインデックスキー250cの“000111”となり降順にソートされている。
すなわち、カップルドノードツリーにおいては、インデックスキーはソートされてツリー上に配置されている。
検索キーで検索するときはインデックスキーがカップルドノードツリー上に配置されたルートをたどることになり、例えば検索キーが“101100”であればノード211hに到達することができる。また、上記説明からも想像がつくように、“101101”か“101110”を検索キーとした場合でもノード211hにたどり着き、インデックスキー251hと比較することにより検索が失敗したことが分かる。
また、例えば“100100”で検索した場合でも、ノード210a、211b、210fのリンク経路では検索キーの3ビット目と4ビット目は使われることがなく、“100100”の5ビット目が0なので、“100010”で検索した場合と同様にノード210gに到達することになる。このように、カップルドノードツリーに格納されたインデックスキーのビット構成に応じた弁別ビット位置を用いて分岐が行われる。
図3は、本発明を実施するためのハードウェア構成例を説明する図である。
本発明の検索装置による検索処理及びデータメンテナンスは中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。カップルドノードツリーが配置される配列309と検索中にたどるノードが格納された配列要素の配列番号を記憶する探索経路スタック310を有するデータ格納装置308は、主記憶装置305または外部記憶装置306で実現することができ、あるいは通信装置307を介して接続された遠方に配置された装置を用いることも可能である。
図3の例示では、主記憶装置305、外部記憶装置306及び通信装置307が一本のバス304によりデータ処理装置301に接続されているが、接続方法はこれに限るものではない。また、主記憶装置305をデータ処理装置301内のものとすることもできるし、探索経路スタック310を中央処理装置302内のハードウェアとして実現することも可能である。あるいは、配列309は外部記憶装置306に、探索経路スタック310を主記憶装置305に持つなど、使用可能なハードウェア環境、インデックスキー集合の大きさ等に応じて適宜ハードウェア構成を選択できることは明らかである。
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶装置が用いられることは当然である。
以下、上記のカップルドノードツリーに格納されたインデックスキーを検索するための各種動作について、図面を用いて具体的に説明する。
図4は、本実施形態に係るビット列検索の基本動作を示したフローチャートである。
まず、ステップS401で、検索開始ノードの配列番号を取得する。取得された配列番号に対応する配列は、カップルドノードツリーを構成する任意のノードを格納したものである。検索開始ノードの指定は、後に説明する各種応用検索において行われる。
次に、ステップS402で、探索経路スタック310に取得された配列番号を格納し、ステップS403で、その配列番号に対応する配列要素を参照すべきノードとして読み出す。そして、ステップS404で、読み出したノードから、ノード種別を取り出し、ステップS405で、ノード種別がブランチノードであるか否かを判定する。
ステップS405の判定において、読み出したノードがブランチノードである場合は、ステップS406に進み、ノードから弁別ビット位置についての情報を取り出し、更に、ステップS407で、取り出した弁別ビット位置に対応するビット値を検索キーから取り出す。そして、ステップS408で、ノードから代表ノード番号を取り出して、ステップS409で、検索キーから取り出したビット値と代表ノード番号とを加算し、新たな配列番号として、ステップS402に戻る。
以降、ステップS405の判定においてリーフノードと判定されてステップS410に進むまで、ステップS402からステップS409までの処理を繰り返す。ステップS410で、リーフノードからインデックスキーを取り出して、処理を終了する。
なお、図4に示す処理は、本出願人により上記先の出願において提案されたカップルドノードツリーよる検索処理とは、検索開始ノードがルートノードに限らず、カップルドノードツリー上の任意のノードとしている点と、検索結果のノードに格納されたインデックスキーと検索キーの比較による検索の成功失敗を判定することなく、検索結果のノードからインデックスキーを取り出す点とで異なる。
上記第1の相違点の理由は、本発明の提供する応用検索において、後に説明するとおり、カップルドノードツリーの部分木を検索する場合があるからであり、第2の相違点の理由は、同じく本発明の提供する応用検索例である最小値検索や範囲検索等はツリーから単一の検索キーを探索するものとは異なるからである。
図5は、図4のフローチャートにより示した本実施形態に係るビット列検索の基本動作を、図2に例示したカップルドノードツリーにより説明する図である。図5においては、カップルドノードツリー、検索キー設定エリア270及び探索経路スタック310を示す。以下に図5を用いてカップルドノードツリー上の参照されるノード及び探索経路スタックの状態について説明する。
なお、図5においては、図2に示すカップルドノードツリーのうち、図4の処理を説明するために必要な一部分のみを示し、残りのノード(代表ノード番号221b以下のノード)については省略している。以降の説明においてカップルドノードツリー上の参照されるノードを説明するための図面についても同様である。
まず、検索を開始するノードの配列番号として、配列番号220が設定されたとする。このとき、対応する配列番号220が探索経路スタック310にプッシュされると共に、配列要素の各種情報が参照される。
配列に格納された情報に基づいて、配列番号220のノードがブランチノードであってインデックスキーが格納されていないと認識されると、更にその配列番号220の配列に格納されている情報(代表ノード番号や弁別ビット位置)等を参照して、次に参照すべき配列番号が算出される。ここでは、まず配列番号220を探索経路スタック310に格納するとともに、配列番号220のノード210aからノード種別を取り出す。取り出したノード種別はブランチノードであるため、更にノード210aから弁別ビット位置「0」を取り出し、更に検索キー設定エリア270の検索キー“011010”における弁別ビット位置のビット値「0」を取り出す。そして、ノード210aに格納されている代表ノード番号「220a」を取り出して、先に検索キーの弁別ビット位置から取り出したビット値を加算して得られた値「220a」を探索経路スタック310に格納する。
続いて、配列番号220aのノードからノード種別を読み出すと、配列番号220aのノード210bはブランチノードであるため、ノード弁別ビット位置「1」に対応するビット値を検索キー“011010”から取り出すと、値は「1」である。そこで、ノード210bの代表ノード番号「220b」に得られたビット値「1」を加算して、探索経路スタック310に「220b+1」を格納する。
配列番号(220b+1)のノード211cから読み出したノード種別はブランチノードであるため、更にノード弁別ビット位置「2」に対応するビット値を検索キー“011010”から取り出すと、値は「1」である。ノード211cの代表ノード番号「221c」に得られたビット値「1」を加算して得られる値「221c+1」を、探索経路スタック310に格納する。
配列番号(221c+1)のノード211dからノード種別を取り出すと、ノード211dはリーフノードである。そこで、ノード211dからインデックスキー“011010”を取り出し、処理を終了する。
このように、順次各ノードの情報を参照していくリンク処理を実行することにより、探索経路スタック310には、検索開始ノードであるノード210aの配列番号「220」からリーフノード211dの配列番号「221c+1」までが、リンク順にプッシュされていくことになる。
以上、本発明による応用検索の基礎となるカップルドノードツリーについてとビット列検索の基本動作について詳細に説明した。カップルドノードツリーの生成処理については、特に図示はしていないが、本出願人による上記先の出願において説明したように、ビット列の集合があるとき、そこから任意のビット列を順次取り出してインデックスキーとして挿入する処理を繰り返すことにより可能である。
先に述べたように、カップルドノードツリーに格納されたインデックスキーの値は、ノード[1]側とツリーの深さ方向をたどることにより降順にソートされてツリー上に配置されていることから、インデックスキーの挿入処理は、挿入するインデックスキーを検索キーとしてカップルドノードツリーから該当するリーフノードを検索するとともに、該リーフノードに至るまでたどったリンク経路のブランチノード及び該リーフノードが格納された配列要素の配列番号をスタックに順次格納し、検索キーと該当するリーフノードに含まれるインデックスキーの間で大小比較とビット列比較を行い、ビット列比較で異なるビット値となる先頭のビット位置と上記スタックに格納されているブランチノードの弁別ビット位置との相対的位置関係により挿入されるインデックスキーを含むリーフノードともう一方のノードからなるノード対の挿入位置を決定し、上記大小関係により挿入するインデックスキーを含むリーフノードを上記挿入されるノード対のどちらのノードとするかを決定することにより実施することができる。
次に、本発明による各種応用的検索処理について説明をする。
図6は、カップルドノードツリー(部分木を含む)に格納されたインデックスキーの最小値を求める処理を示したフローチャートである。先に述べたようなインデックスキーのツリー上の配置から、インデックスキーの最小値を求める処理は検索開始ノードからノード[0]をリーフノードに至るまでツリー上でたどることに相当する。
まず、ステップS501の検索開始ノードの配列番号の取得からステップS505のノード種別の判定までは、それぞれ上述の図4のステップS401からステップS405の処理と同様である。
ステップS505のノード種別の判定においてノード種別がブランチノードと判定されると、ステップS506に進み、ノードから配列の代表ノード番号を取り出し、ステップS507で、取り出した代表ノード番号に値「0」を加算してその結果を新たな配列番号とし、ステップS502に戻る。以降、ステップS505においてそのノードがリーフノードと判定されるまでステップS502からステップS507までの処理を繰り返し、ステップS508で、リーフノードからインデックスキーを取り出し、処理を終了する。
上記の図6に示す処理においては、ノード[0]をたどるため、代表ノード番号に一律「0」を加算している。すなわち、図6の処理によれば、リンク先のノードは、ノード対のうち必ずノード[0]とし、より小さい値のインデックスキーが格納されているノードのほうに分岐している。これにより、ツリー構造が先に述べたように順列構成であるカップルドノードツリーの最小のインデックスキーを取り出すことができる。
図7は、図6のフローチャートにより示したインデックスキーの最小値を求める処理を、図2に例示したカップルドノードツリーにより説明する図である。図7は、配列番号220のノード210aを検索開始ノードとする場合に読み出される配列番号及び探索経路スタック310の状態を示す。
検索開始ノードであるノード210aから順次、代表ノード番号により表されるノード対のうちノード種別102として「0」が設定されているノード(ノード[0])にリンクしていく。リンク先の配列番号220、220a及び220bが探索経路スタック310にプッシュされていき、配列番号220bのリーフノードのインデックスキー“000111”を取り出すと、処理を終了する。
探索経路スタック310には、ノード対のうち、ノード[0]の配列番号が順次プッシュされていく。このとき、配列の配列要素(ノード種別)のみを参照することによりリンク処理及び探索経路スタック310へのプッシュ動作が行われる。
図8は、カップルドノードツリー(部分木を含む)に格納されたインデックスキーの最大値を求める処理を示したフローチャートである。図9は、図2に例示したカップルドノードツリーを用いた同処理についての説明図である。インデックスキーの最大値を求める処理は、ツリー上のノードのうちノード[1]について、リーフノードに至るまで順次たどっていくことに相当する。以下、最大のインデックスキーを求める処理について、上記最小のインデックスキーを求める処理と比較しながら、異なる点を中心に説明する。
図8に示す一連の処理のうち、ステップS601からステップS606及びステップS608については、図6のステップ501からステップS506及びステップS508にそれぞれ対応しており、同様の処理が実行される。図6の最小値を求める処理と異なる点は、ステップS607において、代表ノード番号に、値「1」を加算する点である。これにより、代表ノード番号が表すノード対のうち、ノード[1]に常にリンクすることとなり、リーフノードに至るまで順次ステップS602からステップS607の処理を繰り返すことにより、インデックスキーの最大値を得ることができる。
図9は、図8のフローチャートにより示したインデックスキーの最大値を求める処理を、図2に例示したカップルドノードツリーにより説明する図である。図9に示すように、カップルドノードツリーのリンク処理は、検索開始ノードを図7の例と同様に配列番号220のノード210aとすると、ノード対のうち常にノード[1]にリンクしていき、探索経路スタック310には、リンク先の配列番号220、(220a+1)、(221b+1)及び(221f+1)がプッシュされていく。
図4から図9に示すように、検索キーと一致するインデックスキーを検索する基本動作やインデックスキーの最小値/最大値の検索処理を実行する際には、探索経路スタック310に参照した配列の配列番号が順次格納されていく。
なお、上述の図6から図9を参照したインデックスキーの最小値/最大値の検索処理では、カップルドノードツリーは配列に記憶されたものとして説明したが、カップルドノードツリーが配列に記憶されることは必須ではなく、ノード対を構成する2つのノードのうちの代表ノードのみあるいは代表ノードと隣接した記憶領域に配置されたノードのみをリンクしてリーフノードに至ることによりインデックスキーの最小値/最大値の検索が可能であることは明らかである。
次に、上記インデックスキーの最小値/最大値を求める検索処理及び探索経路スタック310の情報を用いた応用検索について説明する。
図10は、カップルドノードツリーに格納されたインデックスキーを昇順に取り出す処理を示したフローチャートである。インデックスキーを昇順に取り出す処理は、ノード対をなすノードのうちノード[0]側及びツリーの深さを優先させてノードから順次リーフノードをたどり、各リーフノードからインデックスキーを取り出していくことに相当する。
まず、ステップS701で、検索開始ノードの配列番号にルートノードの配列番号を設定し、ステップS702で、上記図6及び図7を参照して説明した最小のインデックスキーを求める処理を実行して、カップルドノードツリーに含まれるインデックスキーの中で最小のインデックスキーを取得する。そして、ステップS703で、取得したインデックスキーを取り出し、ステップS704に進む。
ステップS704で、探索経路スタック310を参照し、スタックポインタがルートノードの配列番号を指しているか否かを判定する。ポインタが指す配列番号がルートノード以外である場合は、ステップS705に進む。そして、ステップS705で、探索経路スタック310からポインタの指す配列番号を取り出してから、ポインタを1減らす。上記ステップS704で探索経路スタック310を参照すること、及びステップS705で探索経路スタック310からポインタの指す配列番号を取り出してからポインタを1減らすことは、スタックのポップ動作により実行される。以下の各実施態様におけるスタックからの配列番号の読み出しにおいても同様である。
ステップS706で、ステップS705で取り出した配列番号から、その配列番号のノードがノード対のどちらの配列要素に格納されているかのノード位置を得る。例えばノード[0]については偶数番号の配列の配列要素に格納する等により、配列番号からノード位置を求めることができる。そして、ステップS707で、ステップS706で得たノード位置がノード[1]側であるか否かを判定する。ステップS707においてノード[1]側と判定された場合は、ステップS704に戻り、ポインタの指す配列番号のノードがノード[0]あるいはルートノードとなるまで、ステップS704からステップS707までの処理を繰り返す。
ステップS707においてノード[0]側と判定されると、ステップS708に進み、配列番号に1を加算し、そのノードと対をなすノード[1]の配列番号を得る。そして、ステップS709で、検索開始ノードにステップS708で得たノード[1]の配列番号を設定し、ステップS710で、検索開始ノードをルートノードとする部分木の最小のインデックスキーを求める処理を実行する。ステップS710の処理は、ステップS702と同様であり、図6に示す最小値検索処理が用いられる。
ステップS710で最小のインデックスキーを求めると、ステップS703に戻り、求めたインデックスキーを取り出し、以降ステップS704においてポインタがルートノードの配列番号を指していると判定されるまで、同様の処理を繰り返す。
このように、探索経路スタック310のポインタが指す配列番号を参照し、探索経路スタック310に格納されている配列番号のノード[0]と対をなすノード[1]について、そのノードを検索開始ノードとしてそのノード配下で最小のインデックスキーを求める。ステップS702で最小値が求められた段階においては、探索経路スタック310のポインタは、カップルドノードツリーの最小のインデックスキーを含むノードの配列番号を指している。続いて探索経路スタック310のポップ動作を行い、取り出した配列番号のノードのうちノード[1]を検索開始ノードとして該検索開始ノードをルートノードとする部分木のインデックスキーの最小値を求める処理を行い、探索経路スタック310のポップ動作の結果カップルドノードツリーのルートノードの配列番号が取り出されるまでポップ動作と最小値検索処理を繰り返す。
探索経路スタック310には、先にステップS702においてルートノード配下のノードについて最小値を求める処理を行っていることにより、リンク経路についての配列番号が順次格納されている。このため、探索経路スタック310のポインタを1減らして新たにポインタが指す配列番号のノードのうち、ノード[0]について、そのノードと対をなすノード[1]を求め、ノード[1]のノード配下について順次最小値検索の処理を行っていくと、インデックスキーは昇順に取り出されることとなる。
図11は、図10のフローチャートにより示したインデックスキーを昇順に取り出す処理について説明する図である。図11において、インデックスキーを昇順に取り出す処理を実行する各段階における探索経路スタック310の状態及び取り出されるインデックスキーを示し、図中の探索経路スタック310に格納されている配列番号は、図2に示すカップルドノードツリーと対応付けられている。図11を参照して、図2に示すカップルドノードツリーについてインデックスキーを昇順に取り出す場合における探索経路スタック310に格納される配列番号について説明する。
まず、ルートノードから検索を開始して、最小値検索を行い、カップルドノードツリーのノード対のノード[0]をたどっていくと、配列番号220bにたどり着く。このとき、探索経路スタック310には、ルートノード210aの配列番号220から順に、220a、220bが格納されている。
図11(a)は、配列番号220を検索開始ノードとして最小値検索処理まで実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号220bの指すノードはリーフノードであるため、このノードのインデックスキー “000111”が取り出される。そして、配列番号220bはノード[0]を指しているので、このノード[0]と対をなすノード[1]の配列番号(220b+1)を、次の検索開始ノードの配列番号とする。
図11(b)は、配列番号(220b+1)を検索開始ノードの配列番号として最小値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号220dの指すノードはリーフノードであるため、このインデックスキー“010010”が取り出される。そして、配列番号220dはノード[0]を指しているので、このノード[0]と対をなすノードの配列番号(220d+1)を、次の検索開始ノードの配列番号とする。
図11(c)は、配列番号(220d+1)を検索開始ノードの配列番号として最小値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号(220d+1)の指すノードはリーフノードであるため、このノードのインデックスキー“010011”が取り出される。次に、配列番号(220d+1)はノード[1]を指しているので、ノード[0]の配列番号が求まるまでポップ動作及び配列番号の取り出しを繰り返す。そして、ノード[0]を指す配列番号221cが求まると、このノード[0]と対をなすノード[1]の配列番号(221c+1)を次の検索開始ノードの配列番号とする。
図11(d)は、配列番号(221c+1)を検索開始ノードの配列番号として最小値検索処理を実行した段階における探索経路スタック310の状態及び取り出されるインデックスキーを示す。ここでは、配列番号(221c+1)のノードはリーフノードであるため、このノードのインデックスキー“011010”が取り出される。次に、配列番号(221c+1)はノード[1]を指しているので、ノード[0]の配列番号が求まるまで、探索経路スタック310のポップ動作及び配列番号の取り出しを繰り返す。そして、ノード[0]を指す配列番号221aが求まると、このノード[0]と対をなすノード[1]の配列番号(221a+1)を次の検索開始ノードの配列番号とする。
図11(e)は、配列番号(220a+1)を検索開始ノードの配列番号として最小値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号221fの指すノードはリーフノードであるため、このノードのインデックスキー“100010”が取り出される。そして、配列番号220fはノード[0]を指しているので、このノード[0]と対をなすノード[1]の配列番号(220f+1)を、次の検索開始ノードの配列番号とする。
図11(f)は、配列番号(220f+1)を検索開始ノードの配列番号として最小値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号(220f+1)の指すノードはリーフノードであるため、このノードのインデックスキー“100011”が取り出される。次に、配列番号(220f+1)はノード[1]を指しているので、ノード[0]の配列番号が求まるまで、探索経路スタック310のポップ動作及び配列番号の取り出しを繰り返す。そして、ノード[0]を指す配列番号221bが求まると、このノード[0]と対をなすノード[1]の配列番号(221b+1)を次の検索開始ノードの配列番号とする。
図11(g)は、配列番号(221b+1)を検索開始ノードの配列番号として最小値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号221fの指すノードはリーフノードであるため、このノードのインデックスキー“101011”が取り出される。そして、配列番号221fはノード[0]を指しているので、このノード[0]と対をなすノード[1]の配列番号(221f+1)を、次の検索開始ノードの配列番号とする。
図11(h)は、配列番号(221f+1)を検索開始ノードの配列番号として最小値検索を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号(221f+1)の指すノードはリーフノードであるため、このノードのインデックスキー“101100”が取り出される。以降、順に探索経路スタック310のポップ動作及び配列番号の取り出しを繰り返し、配列番号がルートノードを指していると判断すると、処理を終了する。
図12は、カップルドノードツリーに格納されたインデックスキーを降順に取り出す処理を示したフローチャートである。インデックスキーを降順に取り出す処理は、ノード対をなすノードのうちノード[1]及びツリーの深さを優先させてルートノードから順次リーフノードをたどっていくことに相当する。ここでは、図10のインデックスキーを昇順に取り出す処理と比較して、異なる点を中心に説明する。
上記のインデックスキーを昇順に取り出す処理においては、図10のステップS702及びステップS710においてポインタが指す配列番号のノード配下の最小値をとるインデックスキーを求めていたのに対し、図12のステップS802及びステップS810において求めるのは、ポインタが指す配列番号のノード配下の最大値をとるインデックスキーである。
また、図10においてはステップS703で所望のインデックスキーを取り出した後、探索経路スタック310に格納されている配列番号のうち、ノード[0]の配列番号を求め、そのノードと対をなすノード[1]を検索開始ノードとして設定して、最小値検索処理を行っている。これに対して、図12の降順取り出し処理においては、ステップS803において所望のインデックスキーを取り出した後、探索経路スタック310に格納されている配列番号のうち、ノード[1]の配列番号を求め、そのノードと対をなすノード[0]を検索開始ノードとして設定して、最大値検索処理を行っている。
図13は、図12のフローチャートにより示したインデックスキーを降順に取り出す処理について説明する図である。図13において、インデックスキーを降順に取り出す処理を実行する各段階における探索経路スタック310の状態及び取り出されるインデックスキーを示し、図中の探索経路スタック310に格納されている配列番号は、図2に示すカップルドノードツリーと対応付けられている。図13を参照して、図2に示すカップルドノードツリーについてインデックスキーを降順に取り出す場合における探索経路スタック310に格納される配列番号について説明する。
まず、ルートノードから検索を開始して、最大値検索を行い、カップルドノードツリーのノード対のノード[1]をたどっていくと、配列番号(221f+1)にたどり着く。このとき、探索経路スタック310には、ルートノード210aの配列番号220から順に、(220a+1)、(221b+1)、(221f+1)が格納されている。
図13(a)は、配列番号(221f+1)を検索開始ノードの配列番号として最大値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号(221f+1)の指すノードはリーフノードであるため、このノードのインデックスキー“101100”が取り出される。そして、配列番号(221f+1)はノード[1]を指しているので、このノード[1]と対をなすノード[0]の配列番号221fを、次の検索開始ノードの配列番号とする。
図13(b)は、配列番号221fを検索開始ノードの配列番号として最大値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号221fの指すノードはリーフノードであるので、このノードのインデックスキー“101011”が取り出される。つぎに、配列番号221fはノード[0]を指しているので、ノード[1]の配列番号が求まるまで、探索経路スタック310のポップ動作及び配列番号の取り出しを繰り返す。そして、ノード[1]を指す配列番号(221b+1)が求まると、このノード[1]と対をなすノード[0]の配列番号221bを、次の検索開始ノードの配列番号とする。
図13(c)は、配列番号221bを検索開始ノードの配列番号として最大値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号(220f+1)の指すノードはリーフノードであるため、このノードのインデックスキー“100011”が取り出される。そして、配列番号(220f+1)はノード[1]を指しているので、このノード[1]と対をなすノード[0]の配列番号220fを、次の検索開始ノードの配列番号とする。
図13(d)は、配列番号220fを検索開始ノードの配列番号として最大値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号220fの指すノードはリーフノードであるため、このノードのインデックスキー“100010”が取り出される。次に、配列番号220fはノード[0]を指しているので、ノード[1]の配列番号が求まるまで、探索経路スタック310のポップ動作及び配列番号の取り出しを繰り返す。そして、ノード[1]を指す配列番号(220a+1)が求まると、このノード[1]と対をなすノード[0]の配列番号220aを、次の検索開始ノードの配列番号とする。
図13(e)は、配列番号220aを検索開始ノードの配列番号として最大値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号(221c+1)はリーフノードであるため、このノードのインデックスキー“011010”が取り出される。そして、配列番号(221c+1)はノード[1]を指しているので、このノード[1]と対をなすノード[0]の配列番号221cを、次の検索開始ノードの配列番号として設定する。
図13(f)は、配列番号221cを検索開始ノードの配列番号として最大値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号(220d+1)の指すノードはリーフノードであるため、このノードのインデックスキー“010011”が取り出される。そして、配列番号(220d+1)はノード[1]を指しているので、このノード[1]と対をなすノード[0]の配列番号220dを、次の検索開始ノードの配列番号とする。
図13(g)は、配列番号220dを検索開始ノードの配列番号として最大値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号220dの指すノードはリーフノードであるため、このノードのインデックスキー“010010”が取り出される。次に、配列番号220dはノード[0]を指しているので、ノード[1]の配列番号が求まるまで、探索経路スタック310のポップ動作および配列番号の取り出しを繰り返す。そして、ノード[1]を指す配列番号(220b+1)が求まると、このノード[1]と対をなすノード[0]の配列番号220bを、次の検索開始ノードの配列番号とする。
図13(h)は、配列番号220bを検索開始ノードの配列番号として最大値検索処理を実行した段階における探索経路スタック310及び取り出されるインデックスキーを示す。ここでは、配列番号220bの指すノードはリーフノードであるため、このノードのインデックスキー“000111”が取り出される。以降、順に探索経路スタック310のポップ動作及び配列番号の取り出しを繰り返し、配列番号がルートノードを指していると判断すると、処理を終了する。
図14A及び図14Bは、カップルドノードツリーに格納されたインデックスキーの下限値を求める処理を示したフローチャートである。ここで下限値とは、指定された下限キー以上のインデックスキーの最小値である。図14A及び図14Bに示す下限値を求める処理は、ユーザ等が指定する検索範囲について検索を行う際に、実際にはインデックスキーが取り得ない範囲については対象外とし、実際にインデックスキーが含まれる範囲について検索を行う処理に応用される。なお、図14A及び図14Bでは、指定された下限キー及び上限キーの取得処理は省略されている。以降の各種応用検索においても同様である。
まず、ステップS901で、検索開始ノードの配列番号に、ルートノードの配列番号を設定し、ステップS902で最小値検索処理を行いインデックスキーの最小値を求める。そして、ステップS903で、下限キーと、ステップS902で求めた最小値との比較をし、下限キーが最小値より大きいか否かを判定する。下限キーが最小値以下の値をとる場合、ステップS904に進み、ステップS902で求めた最小値を下限値として設定し、処理を終了する。
ステップS903において、下限キーはステップS902で求めた最小値よりも大きいと判定された場合は、ステップS905に進み、下限キーを検索キーとして設定する。そして、ステップS906で、検索開始ノードの配列番号にルートノードの配列番号を設定して、ステップS907で、図4及び図5により説明したビット列検索方法によりインデックスキーを検索する。そして、ステップS908で、検索キーとステップS907の検索の結果得られたインデックスキーとを比較して値が一致するか否かを判定する。検索キーとインデックスキーとが等しいと判定された場合は、ステップS909に進み、検索により得られたインデックスキーを上記下限値として設定し、処理を終了する。検索キーとインデックスキーとは等しくないと判定された場合は、図14BのステップS910に進む。
ステップS910で、検索キーとインデックスキーの大小関係を判定する。ここで、検索キーがインデックスキーよりも大きい場合は、そのインデックスキーは検索キーすなわち下限キーよりも小さく、ユーザ等により指定された検索範囲に含まれないことを意味する。一方、検索キーがインデックスキーよりも小さい場合は、そのインデックスキーは指定された検索範囲に含まれることを意味する。そこで、検索キーがインデックスキーよりも小さいと判定されると、ステップS918に進み、そのインデックスキーを下限値に設定して、処理を終了する。
ステップS910において、検索キーがインデックスキーよりも大きいと判定されると、ステップS911に進む。ステップS911からステップS917までの処理は、昇順にインデックスキーを取り出す処理であり、図10のステップS704からステップS710までの処理にそれぞれ対応している。ステップS911からステップS917の処理により、カップルドノードツリーに格納されているインデックスキーが順に取り出されていき、検索キーすなわち下限キーよりも大きい値をとるインデックスキーが得られると、そのインデックスキーが下限値として設定される。
図15は、図14A及び図14Bのフローチャートにより示される、インデックスキーの下限値を求める処理を説明する図であり、このうち図15(a)はカップルドノードツリーと検索キー設定エリア270を示し、図15(b)は探索経路スタック310を示す。図15(a)に示すように、検索キー設定エリア270には下限キーとして“010110”が設定されている。なお、図15(a)においては、図2に示すカップルドノードツリーのうち、下限値の検索に関わる部分を抽出して記載している。
図14A及び図14Bを参照して説明したように、インデックスキーの下限値を求める処理においては、まずルートノードを検索開始ノードとしてインデックスキーの最小値が求められる。図15(a)に示す例によれば、配列番号220bのノードに含まれるインデックスキー“000111”が最小値として求められる。得られた最小値と下限キー“010110”とを比較すると、下限キーの方が大きいため、下限キーを検索キーとしてカップルドノードツリーのインデックスキーを検索すると、得られるインデックスキーは配列番号220dのノードに含まれるインデックスキー“010010”である。配列番号220dのノードに含まれるインデックスキーを得た段階、すなわちステップS907まで処理が実行された段階における探索経路スタック310の状態を図15(b)の(1)に示す。
配列番号220dのノードに含まれるインデックスキー“010010”は、下限キー“010100”よりも小さく、検索範囲に含まれないため、次に大きい値をとるインデックスキーを検索すると、配列番号(220d+1)のノードに含まれるインデックスキー“010011”を得る。ステップS911からステップS917までの処理を実行することにより配列番号(220d+1)のノードに含まれるインデックスキー“010011”を得た段階における探索経路スタック310の状態を図15(b)の(2)に示す。
配列番号(220d+1)のノードに含まれるインデックスキー“010011”についても、依然下限キー“010100”よりも小さく、検索範囲に含まれない。そこで、更に昇順にインデックスキーを取り出す処理を行い、得られたインデックスキーと下限キーとを比較する処理を行う。図15(a)に示すカップルドノードツリーにおいては、次に得られるインデックスキー“011010”が下限キー“010100”よりも大きいため、この配列番号(221c+1)のノードに含まれるインデックスキーを下限値として設定し、処理を終了する。配列番号(221c+1)のノードに含まれるインデックスキー“011010”を得た段階における探索経路スタック310の状態を図15(b)の(3)に示す。
図16A及び図16Bは、カップルドノードツリーに格納されたインデックスキーの上限値を求める処理を示したフローチャートである。ここで上限値とは、指定された上限キー以下のインデックスキーの最大値である。図16A及び図16Bに示す上限値を求める処理は、上記下限値を求める処理と同様に、ユーザ等が指定する検索範囲について検索を行う際に、実際にはインデックスキーが取り得ない範囲については対象外とし、実際にインデックスキーが含まれる範囲について検索を行う処理に応用される。
まず、ステップS1001でルートノードを検索開始ノードとして検索する処理についてはインデックスキーの下限値を求める処理と同様であり、また、ステップS1002以降の処理については、上記ステップS902以降の処理とそれぞれ対応している。
すなわち、図14A及び図14Bを用いて説明した下限値を求める処理においては、ステップS902以降の処理により、ユーザ等により指定された下限キーと、カップルドノードツリーに含まれるインデックスキーのうち下限キー以上で、且つ最も下限キーに近い値をとるインデックスキーを検索している。これに対し、図16A及び図16Bに示す上限値を求める処理においては、ステップS1002以降の処理により、検索範囲の上限としてユーザ等により指定された上限キー以下の値をとり、且つ上限キーに最も上限キーに近い値をとるインデックスキーを検索している。
図14A及び図14Bに示す処理と比較すると、指定されたキー(下限キー/上限キー)とインデックスキーとを比較する際の大小関係(ステップS903とステップS910、及びステップS1003とステップS1010)や、指定されたキーを検索キーとしてカップルドノードツリーを検索する際にインデックスキーの最小値/最大値をそれぞれ求める(ステップS907及びステップS1007)点、及びインデックスキーを求める順序がそれぞれ昇順/降順である(ステップS911及びステップS1011以降の処理)点については逆であるが、下限値及び上限値を求めるまでの手順は基本的に上記と同様である。
ステップS1002以降の処理について具体的に説明する。
ステップS1002でカップルドノードツリーに含まれるインデックスキーの最大値を求めると、ステップS1003で、ステップS1002で求めた最大値と上限キーとを比較し、上限キーが最大値より大きいか否かを判定する。上限キーがインデックスキーの最大値以上であるときは、ステップS1004に進み、ステップS1002で求めた最大値を上限値として設定し、処理を終了する。
上限キーが最大値よりも小さい場合は、ステップS1005に進み、上限キーを検索キーに設定する。そして、ステップS1006で、検索開始ノードの配列番号としてルートノードの配列番号を設定し、ステップS1007で、検索キーについての検索処理を行い、ステップS1008に進む。
ステップS1008で、検索キーとステップS1007で取得したインデックスキーとが等しいか否かを判定する。ステップS1008でこれらの値が等しいと判定された場合は、ステップS1009に進み、ステップS1007の処理で得られたインデックスキーを上記上限値に設定し、処理を終了する。ステップS1008で等しくないと判定された場合は、図16BのステップS1010に進む。
ステップS1010で、検索キーとインデックスキーとの大小関係を判定する。ここで、検索キーがインデックスキーよりも小さい場合は、そのインデックスキーは検索キーすなわち上限キーよりも小さく、ユーザ等により指定された検索範囲に含まれないことを意味する。一方、検索キーがインデックスキーよりも大きい場合は、そのインデックスキーは指定された検索範囲に含まれることを意味する。そこで、検索キーがインデックスキーよりも大きいと判定されると、ステップS1018に進み、そのインデックスキーを上限値に設定して、処理を終了する。
ステップS1010において、検索キーがインデックスキーよりも小さいと判定されると、ステップS1011に進む。ステップS1011以降の処理は、降順にインデックスキーを取り出す処理であり、検索キーがインデックスキーよりも大きいと判定されるまで、ステップS1010からステップS1017までの処理を繰り返す。
図17は、図16A及び図16Bのフローチャートにより示される、インデックスキーの上限値を求める処理を説明する図であり、このうち図17(a)はカップルドノードツリーと検索キー設定エリア270を示し、図17(b)は探索経路スタック310を示す。図17(a)に示すように、検索キー設定エリア270には上限キーとして“101001”が設定されている。図17(a)においては、図2に示すカップルドノードツリーのうち、上限値の検索に関わる部分を抽出して記載している。
図16A及び図16Bを参照して説明したように、インデックスキーの上限値を求める処理においては、まず配列番号220のルートノードについて最大値が求められる。図17(a)に示す例によれば、配列番号(221f+1)のノードに含まれるインデックスキー“101100”が最大値として求められる。しかし、上限キー“101001”と大きさを比較すると、上限キーの方が小さいため、上限キーを検索キーとして更にカップルドノードツリーを検索する。検索の結果、配列番号221fのノードに含まれるインデックスキー“101011”が得られる。ステップS1007の処理で配列番号221fのノードに含まれるインデックスキー“101011”を得た段階における探索経路スタック310の状態を、図17(b)の(1)に示す。
配列番号221fのノードに含まれるインデックスキー“101011”は、上限キーよりも大きいため、次に大きいインデックスキーを検索する。検索の結果、配列番号(220f+1)のノードに含まれるインデックスキー“100011”を得る。ここで配列番号(220f+1)のノードを検索する処理は、図16A及び図16Bに示す処理のうち、ステップS1011からステップS1017までの処理に相当する。ステップS1017の処理まで実行された段階における探索経路スタック310の状態を図17(b)の(2)に示す。配列番号(220f+1)のノードに含まれるインデックスキー“100011”は、上限キー“101001”よりも小さいため、ステップS1010からステップS1018に進む。これにより、図16(a)に示すカップルドノードツリーにおいて上限キーを“101001”として上限値を求めた場合は、配列番号(220f+1)のノードに含まれるインデックスキー“100011”が上限値として設定される。
なお、上記の上限値および下限値の検索処理においては上限キーまたは下限キーを含む検索例を示したが、勿論、上限キーまたは下限キーを含まない検索も可能である。
上記の応用検索を複数組み合わせて、以下に示すような検索処理を行うことも可能である。
図18A及び図18Bは、検索範囲を指定して昇順でカップルドノードツリーに格納されたインデックスキーを検索する処理を示したフローチャートである。図18A及び図18Bを参照して、検索範囲の上限及び下限についてユーザ等により指定された場合における昇順での範囲検索処理について説明する。
まず、ステップS1101で、下限キーによりカップルドノードツリーを検索し、インデックスキーの下限値を得る。ステップS1101の処理は、図14A及び図14Bを参照して説明したとおりである。
次に、ステップS1102で、上限キーによりカップルドノードツリーを検索し、インデックスキーの上限値を得る。ステップS1102の処理は、図16A及び図16Bを参照して説明したとおりである。
そして、ステップS1103で、検索開始ノードの配列番号にルートノードの配列番号を設定して、ステップS1104で、上記下限値を用いてカップルドノードツリーを検索し、インデックスキーを得る。カップルドノードツリーの検索処理については、図4を参照して説明したとおりである。このステップS1104においては、先にステップS1101及びステップS1102において下限値及び上限値をそれぞれ求めた上でその下限値を用いて検索を行っている。このため、検索の結果得られるインデックスキーは、指定された下限キーから上限キーまでの範囲のうちで、実際にインデックスキーの含まれる範囲における最小値をとることとなる。
ステップS1105で、インデックスキーを取り出すと、以降は昇順にインデックスキーを取り出す処理を実行する。昇順でのインデックスキーの取り出し処理は、ステップS1106でインデックスキーが上限値に至るまで、あるいは、ステップS1107においてポインタがルートノードの配列番号を指すようになるまで繰り返される。
図19は、検索範囲を指定して昇順でカップルドノードツリーに格納されたインデックスキーを検索する処理を説明するための図であり、図19(a)はカップルドノードツリーを示し、図19(b)は探索経路スタック310を示す。以下の説明において、第1の検索キー設定エリア270には下限キー“010100”が設定され、第2の検索キー設定エリア271には上限キー“101001”が設定されているとする。
まず、ステップS1101及びステップS1102の処理を実行することにより、下限値及び上限値については、それぞれ配列番号(221c+1)のノードのインデックスキー“011010”及び配列番号(220f+1)のノードのインデックスキー“100011”と決定される。下限値の格納されている配列番号(221c+1)のノードを検索開始ノードとして昇順でインデックスキーを求めていくと、図19(a)に示すツリーにおいては、配列番号(221c+1)、220f及び(220f+1)のノードが順次取り出される。
昇順でこれらのノードのインデックスキーを取得する各段階における探索経路スタック310の状態を、図19(b)の(1)、(2)及び(3)にそれぞれ示す。図19(b)の(1)は、ルートノードの配列番号220を検索開始ノードの配列番号として、検索範囲内での上記最小値検索処理を実行した段階における探索経路スタック310および取り出されるインデックスキーを示し、(2)及び(3)は、それぞれ配列番号(220a+1)及び(220f+1)を検索開始ノードの配列番号として最小値検索処理を実行した段階における探索経路スタック310および取り出されるインデックスキーを示す。ここで実行される処理については、既述の昇順での検索処理を下限値から上限値の範囲内で行うものであるため、詳細については割愛する。
図19に示す例においては、ステップS1106の判定においてインデックスキーと上限値とを比較しているが、配列番号(220f+1)のノードのインデックスキー“100011”と上限値との比較においてはこれらの値が等しくなることから、配列番号(220f+1)のノードのインデックスキー“100011”をステップS1105で取り出した後、昇順検索を終了している。
図20A及び図20Bは、検索範囲を指定して降順でカップルドノードツリーに格納されたインデックスキーを検索する処理を示したフローチャートである。図20A及び図20Bを参照して、検索の上限及び下限についてユーザ等により指定された場合における降順での範囲検索処理について、上記昇順での検索処理と異なる点を中心に説明する。
ステップS1201及びステップS1202において、指定された上限キー及び下限キーに基づいて、インデックスキーの上限値及び下限値を取得する処理については、それぞれ図18AのステップS1102及びステップS1101の処理と同様である。
ステップS1203においては、図18AのステップS1103と同様に、ルートノードの配列番号を検索開始ノードの配列番号として設定し、ステップS1204で、求めた上限値を検索キーとしてカップルドノードツリーの検索処理を実行し、インデックスキーを取得する。ステップS1205以降の処理においては、上限値から下限値までの範囲に含まれるインデックスキーについて、順次降順に取り出していき、ステップS1206において、取り出したインデックスキーと下限値とが等しいと判定された場合か、あるいは、ステップS1207において、探索経路スタック310のポインタがルートノードの配列番号を指していると判定された場合は、降順でのインデックスキーの取り出し処理を終了する。
図21は、検索範囲を指定して降順でカップルドノードツリーに格納されたインデックスキーを検索する処理を説明するための図であり、図21(a)はカップルドノードツリーを示し、図21(b)は探索経路スタック310を示す。以下の説明において、第1の検索キー設定エリア270には上限キー“101001”が設定され、第2の検索キー設定エリア271には下限キー“011001”が設定されているとする。
まず、ステップS1201及びステップS1202の処理を実行することにより、上限値及び下限値として、それぞれ配列番号(220f+1)のノードのインデックスキー“100011”及び配列番号(221c+1)のノードのインデックスキー“011010”を得る。そして、上限値の格納されている配列番号(220f+1)のノードを検索開始ノードとして、降順でインデックスキーを順次求めていくと、図21(a)に示すツリーにおいては、配列番号(220f+1)のノードに続き、配列番号220f及び(221c+1)のノードが順次取り出される。
降順でこれらのノードのインデックスキーを取得する各段階における探索経路スタック310の状態を、図21(b)の(1)、(2)及び(3)にそれぞれ示す。図21(b)の(1)は、ルートノードの配列番号220を検索開始ノードの配列番号として、検索範囲内での上記最大値検索処理を実行した段階における探索経路スタック310および取り出されるインデックスキーを示し、(2)及び(3)は、それぞれ配列番号220f及び220aを検索開始ノードの配列番号として最大値検索処理を実行した段階における探索経路スタック310および取り出されるインデックスキーを示す。ここで実行される処理については、既述の降順での検索処理を上限値から下限値の範囲内で行うものであるため、詳細については割愛する。
図21に示す例においては、ステップS1206の判定においてインデックスキーと下限値とを比較しているが、配列番号(221c+1)のノードのインデックスキー“011010”と下限値との比較においてはこれらの値が等しくなることから、このノードのインデックスキー“011010”をステップS1205で取り出した後、降順検索を終了している。
検索範囲について上限値と下限値を定めた上で昇順あるいは降順での検索処理は、検索キーの一部と一致するインデックスキーを取り出す処理にも応用することができる。以下、一部一致検索の例として、前方一致検索処理について説明する。
図22は、カップルドノードツリーに格納されたインデックスキーについての前方一致検索処理を示したフローチャートである。図22を参照して、カップルドノードツリーに格納されているインデックスキーのうち、ビット位置<n>(nは0以上の整数)までが一致するビット列からなるインデックスキーを全て取り出す処理について説明する。
まず、ステップS1301で、下限キーを取得する。下限キーの各ビットの値については、先頭(ビット位置<0>)からビット位置<n>までは検索キーの各ビットとそれぞれ一致する値が設定され、ビット列のビット位置<n+1>以降のビットについては全て“0”が設定される。
次に、ステップS1302で、上限キーを取得する。上限キーの各ビットの値については、先頭からビット位置<n>までは検索キーの各ビットとそれぞれ一致する値が設定され、ビット列のビット位置<n+1>以降のビットについては全て“1”が設定される。
そして、ステップS1303で、先のステップにおいて設定した下限キー及び上限キーを用いて配列を範囲検索し、インデックスキーを取得し、処理を終了する。なお、ここでの範囲検索処理については、先に図18A及び図18Bを用いて説明したとおりである。
図23は、図22のフローチャートにより示した前方一致検索処理を説明する図であり、図23(a)はカップルドノードツリーを示し、図23(b)は探索経路スタック310を示す。図23(a)に示すように、前方一致検索を行うための検索キーである前方一致キーは、“10xxxx(xは任意のビット値)”であるものとする。すなわち、前方一致検索のビット列として、ユーザ等から“10”が指定されたとする。
先に説明したとおり、前方一致キーが“10xxxx”である場合、下限キー及び上限キーはそれぞれ“100000”及び“101111”と図示の設定エリアに設定される。この下限キー及び上限キーを用いてインデックスキーの検索範囲となる下限値及び上限値を設定すると、それぞれノード210gのインデックスキー“100010”が下限値として設定され、ノード211hのインデックスキー“101100”が上限値として設定される。例えば図18A及び図18Bに示すように、検索範囲内のインデックスキーについて昇順でインデックスキーを順次取り出すと、既述のとおりカップルドノードツリーにおいてインデックスキーはソートされて格納されていることから、所望の前方一致のインデックスキーを得ることができる。昇順でインデックスキーを取り出す処理を実行する際の探索経路スタック310の状態を、図23(b)の(1)から(4)に示す。もちろん、前方一致検索の検索結果を、図20A及び図20Bに示す検索方法により降順に取り出すことも可能である。また、前方一致検索の終了判定は、インデックスキーが上限キーより大きいかの判定でもよい。
図10から図23を参照して、インデックスキーの最小値/最大値を求める検索処理及び探索経路スタック310の情報を用いた応用検索について詳細に説明したが、以上の応用検索は、カップルドノードツリーのルートノードを検索開始ノードとしてカップルドノードツリーのインデックスキーの最小値/最大値を求める検索処理を行い、探索経路スタック310のポップ動作を行って探索経路スタック310から配列番号を読み出し、ポップ動作により読み出された配列番号の配列要素に格納されたノードと対をなすノードを検索開始ノードとしてその検索開始ノードをルートノードとするインデックスキーの最小値/最大値を求める検索処理を行うことによりカップルドノードツリーのインデックスキーの検索を行うビット列検索方法としてまとめることができる。
また、上記応用検索においては、探索経路スタック310のポップ動作を行って配列番号を読み出し、読み出された配列番号から、その配列番号のノードがノード対のどちらの配列要素に格納されているかのノード位置について、ノード[1]側か、あるいはノード[0]側かの判定を行っているが、この判定は代表ノード側か、それと対をなすノード側かの判定をしているものである。先に述べたように、代表ノードはノード対のうち、上記各実施例のように配列番号の小さい方の配列要素に格納されたものとすることに限らず、配列番号の大きい方の配列要素に格納されたものとすることも同様に可能であることから、上記ノード位置の判定は、探索経路スタック310から読み出された配列番号が、その配列番号の配列要素に格納されたノードを含むノード対の格納された配列要素の配列番号の大きい方であるか小さい方であるかの判定に相当する。
以上本発明を実施するための最良の形態について詳細に説明したが、本発明の実施の形態は上記に限ることなく種々の変形が可能であることは当業者に明らかである。また、本発明のビット列検索方法をコンピュータに実行させるプログラムによりコンピュータ上に構築可能なことは明らかである。
以上説明したように、本発明によれば、カップルドノードツリーを用いることにより、任意のビット列の集合から、最大値、最小値、昇順/降順でのインデックスキーの取り出し及び検索範囲の下限値/上限値の設定を簡便で高速な手法で求めることができ、更には、これらの手法を用いて、検索範囲を設定してから昇順/降順でのインデックスキーの取り出しや一部一致のインデックスキーの取り出しを高速に求めることが可能となる。
配列に格納されたカップルドノードツリーの構成例を説明する図である。 カップルドノードツリーのツリー構造を概念的に示す図である。 本発明を実施するためのハードウェア構成例を説明する図である。 本実施形態に係るビット列検索の基本動作を示したフローチャートである。 本実施形態に係るビット列検索の基本動作をカップルドノードツリーにより説明する図である。 カップルドノードツリーに格納されたインデックスキーの最小値を求める処理を示したフローチャートである。 インデックスキーの最小値を求める処理をカップルドノードツリーにより説明する図である。 カップルドノードツリーに格納されたインデックスキーの最大値を求める処理を示したフローチャートである。 インデックスキーの最値を求める処理をカップルドノードツリーにより説明する図である。 カップルドノードツリーに格納されたインデックスキーを昇順に取り出す処理を示したフローチャートである。 インデックスキーを昇順に取り出す処理について説明する図である。 カップルドノードツリーに格納されたインデックスキーを降順に取り出す処理を示したフローチャートである。 インデックスキーを降順に取り出す処理について説明する図である。 インデックスキーの下限値を求める処理の前段を示したフローチャートである。 インデックスキーの下限値を求める処理の後段を示したフローチャートである。 インデックスキーの下限値を求める処理を説明する図である。 インデックスキーの上限値を求める処理の前段を示したフローチャートである。 インデックスキーの上限値を求める処理の後段を示したフローチャートである。 インデックスキーの上限値を求める処理を説明する図である。 検索範囲を指定して昇順でインデックスキーを検索する処理の前段を示したフローチャートである。 検索範囲を指定して昇順でインデックスキーを検索する処理の後段を示したフローチャートである。 検索範囲を指定して昇順でインデックスキーを検索する処理を説明するための図である。 検索範囲を指定して降順でインデックスキーを検索する処理の前段を示したフローチャートである。 検索範囲を指定して降順でインデックスキーを検索する処理の後段を示したフローチャートである。 検索範囲を指定して降順でインデックスキーを検索する処理を説明するための図である。 カップルドノードツリーに格納されたインデックスキーについての前方一致検索処理を示したフローチャートである。 インデックスキーの前方一致検索処理を説明する図である。 従来の検索で用いられるパトリシアツリーの一例を示す図である。
符号の説明
10、20、30 配列番号
100 配列
101 ノード
102 ノード種別
103 弁別ビット位置
104 代表ノード番号
111 ノード対
112 ノード[0]、代表ノード
113 ノード[1]、代表ノードと対をなすノード
118 インデックスキー
301 データ処理装置
302 中央処理装置
303 キャッシュメモリ
304 バス
305 主記憶装置
306 外部記憶装置
307 通信装置
308 データ格納装置
309 配列
310 探索経路スタック

Claims (14)

  1. ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索装置において、
    前記ツリーの始点であるルートノードと、隣接した記憶領域に配置される代表ノードと非代表ノードである2つのノードを有する、ツリーの構成要素としてのノード対を有し、前記ノードは該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、前記ノード種別に加えて、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す位置情報を格納する領域を含むが、前記検索対象のビット列からなるインデックスキーを格納する領域を含まないものであり、前記リーフノードは、前記ノード種別に加えて、前記検索対象のビット列からなるインデックスキーを格納する領域を含むが、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す位置情報を格納する領域を含まないものである、カップルドノードツリーと、
    前記ノード対のどちらか一方のノードである検索開始ノードの位置を示す位置情報を取得し、該取得した検索開始ノードの位置を示す位置情報により検索開始ノードを読み出す検索開始ノード読出手段と、
    前記ノードのノード種別を格納する領域から当該ノード種別を読み出し、該ノード種別が前記リーフノードを示すものであるかブランチノードを示すものであるかを判定するノード種別判定手段と、
    前記リーフノードのインデックスキーを格納する領域から当該インデックスキーを読み出すインデックスキー読出手段と、
    前記ブランチノードの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す位置情報を格納する領域からそれぞれ当該弁別ビット位置とリンク先のノード対の代表ノードの位置を示す位置情報を読み出し、該読み出した弁別ビット位置の前記検索キーのビット値と前記読み出したリンク先のノード対の代表ノードの位置を示す位置情報との演算によりリンク先のノード対のどちらかのノードの位置を示す位置情報を求め、該求めたノードの位置を示す位置情報により示される記憶領域から、該記憶領域に配置されたノードをリンク先ノードとして読み出すリンク手段と、
    を備え、
    前記検索開始ノード読出手段で読み出した検索開始ノードのノード種別を前記ノード種別判定手段で判定し、該ノード種別がリーフノードを示すものであれば、該リーフノードから前記インデックスキー読出手段によりインデックスキーを読み出し、該ノード種別がブランチノードを示すものであれば、前記リンク手段によりリンク先ノードを読み出し、該読み出したリンク先ノードのノード種別を前記ノード種別判定手段で判定することを該ノード種別がリーフノードを示すものとなるまで繰り返し、該リーフノードから前記インデックスキー読出手段によりインデックスキーを読み出し、
    前記インデックスキー読出手段により読み出されたインデックスキーを、前記検索開始ノードをそのルートノードとする前記カップルドノードツリーの部分木の前記検索キーによる検索結果である検索結果キーとすることを特徴とするビット列検索装置。
  2. ビット列検索装置が、ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索方法において、
    前記ツリーの始点であるルートノードと、隣接した記憶領域に配置される代表ノードと非代表ノードである2つのノードを有する、ツリーの構成要素としてのノード対を有し、前記ノードは該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、前記ノード種別に加えて、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す位置情報を格納する領域をむが、前記検索対象のビット列からなるインデックスキーを格納する領域を含まないものであり、前記リーフノードは、前記ノード種別に加えて、前記検索対象のビット列からなるインデックスキーを格納する領域をむが、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す位置情報を格納する領域を含まないものである、カップルドノードツリーであって
    前記ノード対のどちらか一方のノードである検索開始ノードの位置を示す位置情報を取得し、該取得した検索開始ノードの位置を示す位置情報により検索開始ノードを読み出す検索開始ノード読出ステップと、
    前記ノードのノード種別を格納する領域から当該ノード種別を読み出し、該ノード種別が前記リーフノードを示すものであるかブランチノードを示すものであるかを判定するノード種別判定ステップと、
    前記リーフノードのインデックスキーを格納する領域から当該インデックスキーを読み出すインデックスキー読出ステップと、
    前記ブランチノードの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す位置情報を格納する領域からそれぞれ当該弁別ビット位置とリンク先のノード対の代表ノードの位置を示す位置情報を読み出し、該読み出した弁別ビット位置の前記検索キーのビット値と前記読み出したリンク先のノード対の代表ノードの位置を示す位置情報との演算によりリンク先のノード対のどちらかのノードの位置を示す位置情報を求め、該求めたノードの位置を示す位置情報により示される記憶領域から、該記憶領域に配置されたノードをリンク先ノードとして読み出すリンクステップと、
    を備え、
    前記検索開始ノード読出ステップで読み出した検索開始ノードのノード種別を前記ノード種別判定ステップで判定し、該ノード種別がリーフノードを示すものであれば、該リーフノードから前記インデックスキー読出ステップによりインデックスキーを読み出し、該ノード種別がブランチノードを示すものであれば、前記リンクステップにより前記リンク先ノードを読み出し、該読み出したリンク先ノードのノード種別を前記ノード種別判定ステップで判定することを該ノード種別がリーフノードを示すものとなるまで繰り返し、該リーフノードから前記インデックスキー読出ステップによりインデックスキーを読み出し、
    前記インデックスキー読出ステップにより読み出されたインデックスキーを、前記検索開始ノードをそのルートノードとする前記カップルドノードツリーの部分木の前記検索キーによる検索結果である検索結果キーとすることを特徴とするビット列検索方法。
  3. 前記カップルドノードツリーは、配列に記憶され、前記代表ノードの位置を示す位置情報は、代表ノードが格納された前記配列の配列要素の配列番号であり、
    前記検索開始ノードの格納された配列要素の配列番号及び前記検索開始ノードから前記リーフノードに至るリンク先のノードの格納された配列要素の配列番号は、順次スタックに保持されていくことを特徴とする請求項記載のビット列検索方法。
  4. ビット列検索装置が、ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索方法において、
    前記ツリーの始点であるルートノードと、隣接した記憶領域に配置される代表ノードと非代表ノードである2つのノードを有する、ツリーの構成要素としてのノード対を有し、前記ノードは該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、前記ノード種別に加えて、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す位置情報を格納する領域をむが、前記検索対象のビット列からなるインデックスキーを格納する領域を含まないものであり、前記リーフノードは、前記ノード種別に加えて、前記検索対象のビット列からなるインデックスキーを格納する領域を含むが、前記検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す位置情報を格納する領域を含まないものである、カップルドノードツリーであって
    前記ルートノード、あるいは、前記ノード対のどちらか一方のノード、である検索開始ノードの位置を示す位置情報を取得し、該取得した検索開始ノードの位置を示す位置情報により検索開始ノードを読み出す検索開始ノード読出ステップと、
    前記ノードのノード種別を格納する領域から当該ノード種別を読み出し、該ノード種別が前記リーフノードを示すものであるかブランチノードを示すものであるかを判定するノード種別判定ステップと、
    前記リーフノードのインデックスキーを格納する領域から当該インデックスキーを読み出すインデックスキー読出ステップと、
    前記ブランチノードのリンク先のノード対の代表ノードの位置を示す位置情報を格納する領域からリンク先のノード対の代表ノードの位置を示す位置情報を読み出し、該読み出したリンク先のノード対の代表ノードの位置を示す位置情報により示される記憶領域に配置された代表ノードのみをリンク先ノードとして読み出す、あるいは該読み出したリンク先のノード対の代表ノードの位置を示す位置情報に基づいて演算により求める位置情報により示される記憶領域に配置された非代表ノードのみをリンク先ノードとして読み出すリンクステップと、
    を備え、
    前記検索開始ノード読出ステップで読み出した検索開始ノードのノード種別を前記ノード種別判定ステップで判定し、該ノード種別がリーフノードを示すものであれば、該リーフノードから前記インデックスキー読出ステップによりインデックスキーを読み出し、該ノード種別がブランチノードを示すものであれば、前記リンクステップにより前記リンク先ノードを読み出し、該読み出したリンク先ノードのノード種別を前記ノード種別判定ステップで判定することを該ノード種別がリーフノードを示すものとなるまで繰り返し、該リーフノードから前記インデックスキー読出ステップによりインデックスキーを読み出し、
    前記インデックスキーステップにより読み出されたインデックスキーを、前記検索開始ノードをそのルートノードとする、前記カップルドノードツリーあるいは該カップルドノードツリーの部分木の、前記検索キーによる検索結果であるインデックスキーの最大値あるいは最小値として取得することを特徴とするビット列検索方法。
  5. 前記カップルドノードツリーは、配列に記憶され、前記代表ノードの位置を示す位置情報は、代表ノードが格納された前記配列の配列要素の配列番号であり、
    前記検索開始ノードの格納された配列要素の配列番号及び前記検索開始ノードから前記リーフノードに至るリンク先のノードの格納された配列要素の配列番号は、順次スタックに保持されていくことを特徴とする請求項記載のビット列検索方法。
  6. ビット列検索装置が、ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索方法において、
    請求項記載のビット列検索方法により前記カップルドノードツリーのルートノードを前記検索開始ノードとして前記カップルドノードツリーのインデックスキーの最小値を取得する最小値取得ステップと
    前記スタックのポップ動作による該スタックから配列番号の読出と該読み出した配列番号が代表ノードを格納する配列要素の配列番号であるかの判定を、 該読み出した配列番号が代表ノードを格納する配列要素の配列番号であると判定されるまで繰り返す代表ノードサーチステップと、
    前記代表ノードサーチステップにおいて代表ノードを格納する配列要素の配列番号であると判定された配列番号の配列要素に格納された代表ノードと対をなす非代表ノードを検索開始ノードとして請求項記載のビット列検索方法を行うことにより、該検索開始ノードをルートノードとする部分木のインデックスキーの最小値を取得する部分木最小値取得ステップと、を備え、
    前記代表ノードサーチステップと前記部分木最小値取得ステップを繰り返すことにより、前記カップルドノードツリーに格納されたインデックスキーを昇順に取り出すことを特徴とするビット列検索方法。
  7. ビット列検索装置が、ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索方法において、
    請求項記載のビット列検索方法により前記カップルドノードツリーのルートノードを前記検索開始ノードとして前記カップルドノードツリーのインデックスキーの最大値を取得する最大値取得ステップと
    前記スタックのポップ動作による該スタックから配列番号の読出と該読み出した配列番号が非代表ノードを格納する配列要素の配列番号であるかの判定を、該読み出した配列番号が非代表ノードを格納する配列要素の配列番号であると判定されるまで繰り返す非代表ノードサーチステップと、
    前記非代表ノードサーチステップにおいて非代表ノードを格納する配列要素の配列番号であると判定された配列番号の配列要素に格納された非代表ノードと対をなす代表ノードを検索開始ノードとして請求項記載のビット列検索方法を行うことにより、該検索開始ノードをルートノードとする部分木のインデックスキーの最大値を取得する部分木最大値取得ステップと、を備え、
    前記非代表ノードサーチステップと前記部分木最大値取得ステップを繰り返すことにより、前記カップルドノードツリーに格納されたインデックスキーを降順に取り出すことを特徴とするビット列検索方法。
  8. ビット列検索装置が、ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索方法において、
    検索範囲の下限を指定する下限キーを取得する下限キー取得ステップと
    請求項記載のビット列検索方法により前記カップルドノードツリーのルートノードを前記検索開始ノードとして前記カップルドノードツリーのインデックスキーの最小値を取得する最小値取得ステップと
    前記下限キー取得ステップで取得した下限キー前記最小値取得ステップで取得したインデックスキーの最小値を比較し、前記下限キーの方が大きければ、前記下限キーを検索キーとするとともに前記カップルドノードツリーのルートノードを前記検索開始ノードとして請求項記載のビット列検索方法により前記検索結果キーを取り出す検索結果キー取り出しステップと
    前記検索キーと前記検索結果キー取り出しステップで取り出した検索結果キーを比較しそれらの大小関係を判定する検索結果キー比較ステップと、
    前記スタックのポップ動作による該スタックから配列番号の読出と該読み出した配列番号が代表ノードを格納する配列要素の配列番号であるかの判定を、 該読み出した配列番号が代表ノードを格納する配列要素の配列番号であると判定されるまで繰り返す代表ノードサーチステップと
    前記代表ノードサーチステップにおいて代表ノードを格納する配列要素の配列番号であると判定された配列番号の配列要素に格納された代表ノードと対をなす非代表ノードを検索開始ノードとして請求項記載のビット列検索方法を行うことにより、該検索開始ノードをそのルートノードとする部分木のインデックスキーの最小値を取得する部分木最小値取得ステップと、を備え、
    前記検索結果キーが前記検索キーより大きいと判定されるまで、前記部分木最小値取得ステップで取得した最小値を検索結果キーとして前記検索結果キー比較ステップから前記部分木最小値取得ステップまでの処理を繰り返すことにより、前記検索キーより大きい前記検索結果キーを前記指定された下限キーに対する前記カップルドノードツリーの下限値として取得することを特徴とするビット列検索方法。
  9. ビット列検索装置が、ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索方法において、
    検索範囲の上限を指定する上限キーを取得する上限キー取得ステップと
    請求項記載のビット列検索方法により前記カップルドノードツリーのルートノードを前記検索開始ノードとして前記カップルドノードツリーのインデックスキーの最大値を取得する最大値取得ステップと
    前記上限キー取得ステップで取得した上限キー前記最大値取得ステップで取得したインデックスキーの最大値を比較し、前記上限キーの方が小さければ、前記上限キーを検索キーとするとともに前記カップルドノードツリーのルートノードを前記検索開始ノードとして請求項記載のビット列検索方法により前記検索結果キーを取り出す検索結果キー取り出しステップと
    前記検索キーと前記検索結果キー取り出しステップで取り出した検索結果キーを比較しそれらの大小関係を判定する検索結果キー比較ステップと、
    前記スタックのポップ動作による該スタックから配列番号の読出と該読み出した配列番号が非代表ノードを格納する配列要素の配列番号であるかの判定を、該読み出した配列番号が非代表ノードを格納する配列要素の配列番号であると判定されるまで繰り返す非代表ノードサーチステップと
    前記非代表ノードサーチステップにおいて非代表ノードを格納する配列要素の配列番号であると判定された配列番号の配列要素に格納された非代表ノードと対をなす代表ノードを検索開始ノードとして請求項記載のビット列検索方法を行うことにより、該検索開始ノードをそのルートノードとする部分木のインデックスキーの最大値を取得する部分木最大値取得ステップと、を備え、
    前記検索結果キーが前記検索キーより小さいと判定されるまで、前記部分木最大値取得ステップで取得した最大値を検索結果キーとして前記検索結果キー比較ステップから前記部分木最大値取得ステップまでの処理を繰り返すことにより、前記検索キーより小さい前記検索結果キーを前記指定された上限キーに対する前記カップルドノードツリーの上限値として取得することを特徴とするビット列検索方法。
  10. ビット列検索装置が、ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索方法において、
    検索範囲の上限を指定する上限キー及び検索範囲の下限を指定する下限キーを取得する第1の検索範囲取得ステップと
    前記第1の検索範囲取得ステップで取得した上限キーに基づいて請求項9記載のビット列検索方法によりカップルドノードツリーの上限値を取得するとともに、前記第1の検索範囲取得ステップで取得した下限キーに基づいて請求項8記載のビット列検索方法により前記カップルドノードツリーの下限値を取得する第2の検索範囲取得ステップと
    前記第2の検索範囲取得ステップで取得した下限値を検索キーとするとともに前記カップルドノードツリーのルートノードを検索開始ノードとして請求項記載のビット列検索方法により前記下限値に相当するインデックスキーを検索結果キーとして取り出す検索結果キー取り出しステップと
    前記第2の検索範囲取得ステップで取得した上限値と前記検索結果キー取り出しステップで取り出した検索結果キーを比較しそれらの大小関係を判定する検索結果キー比較ステップと、
    前記スタックのポップ動作による該スタックから配列番号の読出と該読み出した配列番号が代表ノードを格納する配列要素の配列番号であるかの判定を、 該読み出した配列番号が代表ノードを格納する配列要素の配列番号であると判定されるまで繰り返す代表ノードサーチステップと
    前記代表ノードサーチステップにおいて代表ノードを格納する配列要素の配列番号であると判定された配列番号の配列要素に格納された代表ノードと対をなす非代表ノードを検索開始ノードとして請求項記載のビット列検索方法を行うことにより、該検索開始ノードをそのルートノードとする部分木のインデックスキーの最小値を取得する部分木最小値取得ステップと、を備え、
    前記検索結果キーと前記上限値が等しいと判定されるまで、前記部分木最小値取得ステップで取得した最小値を検索結果キーとして取り出すとともに前記検索結果キー比較ステップから前記部分木最小値取得ステップまでの処理を繰り返すことにより、前記カップルドノードツリーに格納されたインデックスキーを指定された下限キーと上限キーの範囲で昇順に取り出すことを特徴とするビット列検索方法。
  11. ビット列検索装置が、ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索方法において、
    検索範囲の上限を指定する上限キー及び検索範囲の下限を指定する下限キーを取得する第1の検索範囲取得ステップと
    前記第1の検索範囲取得ステップで取得した上限キーに基づいて請求項9記載のビット列検索方法によりカップルドノードツリーの上限値を取得するとともに、前記第1の検索範囲取得ステップで取得した下限キーに基づいて請求項8記載のビット列検索方法により前記カップルドノードツリーの下限値を取得する第2の検索範囲取得ステップと
    前記第2の検索範囲取得ステップで取得した上限値を検索キーとするとともに前記カップルドノードツリーのルートノードを検索開始ノードとして請求項記載のビット列検索方法により前記上限値に相当するインデックスキーを検索結果キーとして取り出す検索結果キー取り出しステップと
    前記第2の検索範囲取得ステップで取得した下限値と前記検索結果キー取り出しステップで取り出した検索結果キーを比較しそれらの大小関係を判定する検索結果キー比較ステップと、
    前記スタックのポップ動作による該スタックから配列番号の読出と該読み出した配列番号が非代表ノードを格納する配列要素の配列番号であるかの判定を、該読み出した配列番号が非代表ノードを格納する配列要素の配列番号であると判定されるまで繰り返す非代表ノードサーチステップと
    前記非代表ノードサーチステップにおいて非代表ノードを格納する配列要素の配列番号であると判定された配列番号の配列要素に格納された非代表ノードと対をなす代表ノードを検索開始ノードとして請求項記載のビット列検索方法を行うことにより、該検索開始ノードをそのルートノードとする部分木のインデックスキーの最大値を取得する部分木最大値取得ステップと、を備え、
    前記検索結果キーと前記下限値が等しいと判定されるまで、前記部分木最大値取得ステップで取得した最大値を検索結果キーとして取り出すとともに前記検索結果キー比較ステップから前記部分木最大値取得ステップまでの処理を繰り返すことにより、前記カップルドノードツリーに格納されたインデックスキーを指定された上限キーと下限キーの範囲で降順に取り出すことを特徴とするビット列検索方法。
  12. ビット列検索装置が、ビット列からなる検索キーにより検索対象であるビット列からなるインデックスキーが格納されたツリーのデータ構造に基づいて前記インデックスキーを検索するビット列検索方法において、
    ビット列の前方一致検索を行うために指定された前方一致キーの無意ビットの値を0として下限キーを求めるとともに前記無意ビットの値を1として上限キーを求め、
    該上限キーと下限キーに基づき、請求項10又は請求項11記載のビット列検索方法を行い、前記カップルドノードツリーに格納されたインデックスキーを取り出し、該取り出したインデックスキーを前記前方一致キーによる前方一致検索の検索結果キーとすることを特徴とするビット列検索方法。
  13. 請求項〜請求項12いずれか1項記載のビット列検索方法をコンピュータに実行させるためのプログラム。
  14. 請求項2〜請求項12いずれか1項記載のビット列検索方法をコンピュータに実行させるためのプログラムを記憶したことを特徴とするコンピュータ読み取り可能な記憶媒体。
JP2006293619A 2006-07-07 2006-10-30 ビット列検索装置、検索方法及びプログラム Expired - Fee Related JP4271227B2 (ja)

Priority Applications (7)

Application Number Priority Date Filing Date Title
JP2006293619A JP4271227B2 (ja) 2006-10-30 2006-10-30 ビット列検索装置、検索方法及びプログラム
AT07827899T ATE516556T1 (de) 2006-10-30 2007-10-16 Bitsequenz-suchverfahren und programm
CN2007800407904A CN101535993B (zh) 2006-10-30 2007-10-16 比特序列检索装置及检索方法
EP07827899A EP2085897B1 (en) 2006-10-30 2007-10-16 Bit sequence searching method and program
PCT/JP2007/001120 WO2008053583A1 (fr) 2006-10-30 2007-10-16 Procédé et programme de recherche de séquence de bits
TW096140594A TW200821914A (en) 2006-10-30 2007-10-29 Bit sequence searching method and program
US12/385,956 US8150856B2 (en) 2006-07-07 2009-04-24 Bit string searching apparatus, searching method, and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006293619A JP4271227B2 (ja) 2006-10-30 2006-10-30 ビット列検索装置、検索方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2008112240A JP2008112240A (ja) 2008-05-15
JP4271227B2 true JP4271227B2 (ja) 2009-06-03

Family

ID=39343937

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006293619A Expired - Fee Related JP4271227B2 (ja) 2006-07-07 2006-10-30 ビット列検索装置、検索方法及びプログラム

Country Status (6)

Country Link
EP (1) EP2085897B1 (ja)
JP (1) JP4271227B2 (ja)
CN (1) CN101535993B (ja)
AT (1) ATE516556T1 (ja)
TW (1) TW200821914A (ja)
WO (1) WO2008053583A1 (ja)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8150856B2 (en) 2006-07-07 2012-04-03 S. Grants Co., Ltd. Bit string searching apparatus, searching method, and program
JP4379894B2 (ja) 2006-11-28 2009-12-09 株式会社エスグランツ カップルドノードツリーの分割/結合方法及びプログラム
JP4402120B2 (ja) 2007-01-24 2010-01-20 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
JP4514771B2 (ja) 2007-05-18 2010-07-28 株式会社エスグランツ カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム
JP4514768B2 (ja) 2007-04-19 2010-07-28 株式会社エスグランツ カップルドノードツリーの退避/復元装置、退避/復元方法及びプログラム
JP4439013B2 (ja) 2007-04-25 2010-03-24 株式会社エスグランツ ビット列検索方法及び検索プログラム
JP4527753B2 (ja) 2007-07-03 2010-08-18 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
CN101802822B (zh) 2007-09-14 2012-10-24 新叶股份有限公司 比特序列检索装置、检索方法以及程序
JP4502223B2 (ja) * 2007-12-05 2010-07-14 株式会社エスグランツ ビット列のマージソート装置、方法及びプログラム
JP4498409B2 (ja) * 2007-12-28 2010-07-07 株式会社エスグランツ データベースのインデックスキー更新方法及びプログラム
JP4567754B2 (ja) 2008-01-17 2010-10-20 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
JP4514810B2 (ja) * 2008-05-18 2010-07-28 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
JP5220483B2 (ja) * 2008-06-06 2013-06-26 インターナショナル・ビジネス・マシーンズ・コーポレーション 木構造のデータに対する集約計算を行うコンピュータ・システム、並びにその方法及びコンピュータ・プログラム
CN102741841A (zh) 2009-11-30 2012-10-17 新叶股份有限公司 比特序列检索装置、检索方法以及程序
US9361578B2 (en) * 2011-07-13 2016-06-07 Palo Alto Research Center Incorporated Memory efficient state-set representation for planning
CN102819536B (zh) * 2011-09-27 2015-08-19 金蝶软件(中国)有限公司 树型数据处理方法及装置
US9547729B2 (en) 2014-05-30 2017-01-17 International Business Machines Corporation Adaptive query processor for query systems with limited capabilities
CN113794558B (zh) * 2021-09-16 2024-02-27 烽火通信科技股份有限公司 一种XMSS算法中的L-tree计算方法、装置及系统

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6012061A (en) * 1997-11-25 2000-01-04 International Business Machines Corp. Method and apparatus for deleting nodes in Patricia trees
EP1107126A2 (en) * 1999-12-08 2001-06-13 Hewlett-Packard Company, A Delaware Corporation A fast, efficient, adaptive, hybrid tree
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 日本電気株式会社 情報検索方法及び装置
JP3691018B2 (ja) * 2002-01-31 2005-08-31 日本電信電話株式会社 最長一致検索回路および方法およびプログラムおよび記録媒体
CN1645374A (zh) * 2005-01-17 2005-07-27 徐文新 位标记字符串检索技术

Also Published As

Publication number Publication date
WO2008053583A1 (fr) 2008-05-08
EP2085897B1 (en) 2011-07-13
EP2085897A1 (en) 2009-08-05
CN101535993A (zh) 2009-09-16
EP2085897A4 (en) 2010-03-24
CN101535993B (zh) 2011-11-09
TW200821914A (en) 2008-05-16
ATE516556T1 (de) 2011-07-15
JP2008112240A (ja) 2008-05-15

Similar Documents

Publication Publication Date Title
JP4271227B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4271214B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4514771B2 (ja) カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム
JP4498409B2 (ja) データベースのインデックスキー更新方法及びプログラム
JP4527753B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4402120B2 (ja) ビット列検索装置、検索方法及びプログラム
JP4514768B2 (ja) カップルドノードツリーの退避/復元装置、退避/復元方法及びプログラム
JP4379894B2 (ja) カップルドノードツリーの分割/結合方法及びプログラム
JP4502223B2 (ja) ビット列のマージソート装置、方法及びプログラム
JP5473893B2 (ja) コード列検索装置、検索方法及びプログラム
JP4439013B2 (ja) ビット列検索方法及び検索プログラム
CN104268176A (zh) 一种基于搜索关键词的推荐方法及系统
US20100174742A1 (en) Bit string search apparatus, search method, and program
US8166043B2 (en) Bit strings search apparatus, search method, and program
WO2009122651A1 (ja) ビット列検索装置、検索方法及びプログラム
JP4417431B2 (ja) カップルドノードツリーの分割/結合方法及びプログラム
JP4567754B2 (ja) ビット列検索装置、検索方法及びプログラム
EP2149845B1 (en) Coupled node tree backup/restore apparatus, backup/restore method, and program
JP2011018296A (ja) カップルドノードツリーのインデックスキー挿入/削除方法
JP4813575B2 (ja) ビット列検索装置
JP2009199577A (ja) ビット列検索装置、検索方法及びプログラム

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20080702

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080818

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20081023

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20081117

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081202

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090128

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: 20090223

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: 20090224

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

Free format text: PAYMENT UNTIL: 20120306

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 4271227

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: 20150306

Year of fee payment: 6

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

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

Free format text: PAYMENT UNTIL: 20150306

Year of fee payment: 6

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: 20150306

Year of fee payment: 6

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

LAPS Cancellation because of no payment of annual fees