JP2008287533A - カップルドノードツリーの最長一致/最短一致検索方法及びプログラム - Google Patents

カップルドノードツリーの最長一致/最短一致検索方法及びプログラム Download PDF

Info

Publication number
JP2008287533A
JP2008287533A JP2007132289A JP2007132289A JP2008287533A JP 2008287533 A JP2008287533 A JP 2008287533A JP 2007132289 A JP2007132289 A JP 2007132289A JP 2007132289 A JP2007132289 A JP 2007132289A JP 2008287533 A JP2008287533 A JP 2008287533A
Authority
JP
Japan
Prior art keywords
node
search
key
tree
bit position
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
Application number
JP2007132289A
Other languages
English (en)
Other versions
JP2008287533A5 (ja
JP4514771B2 (ja
Inventor
Toshio Shinjo
敏男 新庄
Mitsuhiro Kokubu
光裕 國分
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
Application filed by S Grants Co Ltd filed Critical S Grants Co Ltd
Priority to JP2007132289A priority Critical patent/JP4514771B2/ja
Priority to PCT/JP2008/000983 priority patent/WO2008132806A1/ja
Priority to EP08738589.4A priority patent/EP2149845B1/en
Priority to CN2008800122779A priority patent/CN101657818B/zh
Priority to TW097114278A priority patent/TW200846955A/zh
Publication of JP2008287533A publication Critical patent/JP2008287533A/ja
Priority to US12/588,523 priority patent/US8214405B2/en
Publication of JP2008287533A5 publication Critical patent/JP2008287533A5/ja
Application granted granted Critical
Publication of JP4514771B2 publication Critical patent/JP4514771B2/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

Abstract

【課題】カップルドノードツリーを検索対象とする最長一致/最短一致検索の方法を提供する。
【解決手段】カップルドノードツリーは、ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対とからなる。ブランチノードは検索キーの弁別ビット位置とリンク先のノード対の一方のノードの位置を示す情報を含み、リーフノードは検索対象のビット列からなるインデックスキーを含む。最長一致/最短一致検索キーを用いてカップルドノードツリーを検索し、検索結果のインデックスキーと最長一致/最短一致検索キーとの差分ビット位置と、検索時に記憶したルートノードからの検索経路上のブランチノードの弁別ビット位置との比較に基づいて、最長一致/最短一致ノードを決定する。
【選択図】図1

Description

本発明は、ビット列を記憶するツリー状のデータ構造を用いてビット列の集合から所望のビット列を検索する検索方法に関するものであり、特に本出願人が特願2006−187827において提案したカップルドノードツリーの最長一致検索/最短一致検索方法及びそのプログラムに関するものである。
近年、社会の情報化が進展し、大規模なデータベースが各所で利用されるようになってきている。このような大規模なデータベースからレコードを検索するには、各レコードの記憶されたアドレスと対応づけられたレコード内の項目をインデックスキーとして検索をし、所望のレコードを探し出すことが通例である。また、全文検索における文字列も、文書のインデックスキーと見なすことができる。
そして、それらのインデックスキーはビット列で表現されることから、データベースの検索はビット列の検索に帰着されるということができる。
上記ビット列の検索を高速に行うために、ビット列を記憶するデータ構造を種々に工夫することが従来から行われている。このようなものの1つとして、パトリシアツリーという木構造が知られている。
図13は、上述の従来の検索処理に用いられているパトリシアツリーの一例を示すものである。パトリシアツリーのノードは、インデックスキー、検索キーの検査ビット位置、左右のリンクポインタを含んで構成される。明示はされていないが、ノードにはインデックスキーに対応するレコードにアクセスするための情報が含まれていることは勿論である。
図13の例では、インデックスキー“100010”を保持するノード1750aがルートノードとなっており、その検査ビット位置1730aは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を右ポインタ1741cが指定していることを表している。
ノード1750dの右ポインタ1741dはノード1750d自身を指しており、左リンク1740dにはノード1750eが接続されている。ノード1750eの保持するインデックスキーは“010010”、検査ビット位置1730eは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を指している。
図13の例では、ルートノード1750aからツリーを降りるにしたがって、各ノードの検査ビット位置が大きくなるように構成されている。
ある検索キーで検索を行うとき、ルートノードから順次各ノードに保持される検索キーの検査ビット位置を検査していき、検査ビット位置のビット値が1であるか0であるか判定を行い、1であれば右リンクをたどり、0であれば左リンクをたどる。そして、リンク先のノードの検査ビット位置がリンク元のノードの検査ビット位置より大きくなければ、すなわち、リンク先が下方でなく上方に戻れば(図13において点線で示されたこの逆戻りのリンクをバックリンクという)、リンク先のノードのインデックスキーと検索キーの比較を行う。比較の結果、等しければ検索成功であり、等しくなければ検索失敗であることが保証されている。
上記のように、パトリシアツリーを用いた検索処理では、必要なビットの検査だけで検索できること、キー全体の比較は1回ですむことなどのメリットがあるが、各ノードからの2つのリンクが必ずあることにより記憶容量が増大することや、バックリンクの存在による判定処理の複雑化、バックリンクにより戻ることで初めてインデックスキーと比較することによる検索処理の遅延及び追加削除等データメンテナンスの困難性などの欠点がある。
これらのパトリシアツリーの欠点を解消しようとするものとして、例えば下記特許文献1に開示された技術がある。下記特許文献1に記載されたパトリシアツリーにおいては、下位の左右のノードは連続した領域に記憶することによりポインタの記憶容量を削減するとともに、次のリンクがバックリンクであるか否かを示すビットを各ノードに設けることにより、バックリンクの判定処理を軽減している。
しかしながら、下記特許文献1に開示されたものにおいても、1つのノードは必ずインデックスキーの領域とポインタの領域を占めること、下位の左右のノードを連続した領域に記憶するようにしてポインタを1つとしたため、例えば図13に示したパトリシアツリーの最下段の部分である左ポインタ1740c、右ポインタ1741h等の部分にもノードと同じ容量の記憶領域を割り当てる必要があるなど、記憶容量の削減効果はあまり大きいものではない。また、バックリンクによる検索処理の遅延の問題や追加削除等の処理が困難であることも改善されていない。
上述の従来の検索手法における問題点を解決するものとして、本出願人は、特願2006−187827において、ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対からなるビット列検索に用いるツリーであって、ルートノードはツリーの始点を表すノードであって、該ツリーのノードが1つのときはリーフノード、ツリーのノードが2つ以上のとき
は前記ブランチノードであり、前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含むカップルドノードツリーを用いたビット列検索を提案した。
上記出願においては、与えられたインデックスキーの集合からカップルドノードツリーを生成する方法と、カップルドノードツリーから単一のインデックスキーを検索する手法等の、カップルドノードツリーを用いた基本的な検索手法が示されている。
また、ビット列の検索には、最小値、最大値を求めたり、ある範囲の値のものを求める等の各種の検索要求が存在する。そこで、本出願人は、特願2006−293619において、カップルドノードツリーの任意の部分木に含まれるインデックスキーの最大値/最小値を求める手法等を提案した。
さらに、ビット列の検索には、検索キーと完全に一致する値の検索の他に、検索キーと少なくとも一部が一致する値の検索がある。最上位のビットから1ビット以上が検索キーと一致し、その一致する範囲がなるべく大きい(あるいは小さい)インデックスキーを検索しようとする最長一致(あるいは最短一致)検索がその例である。
最長一致検索は、ルーティングテーブルの検索や、上位ビットが共通の複数のアドレス宛にデータを同報送信する場合の、同報アドレスの検索などに利用可能である。また、最短一致検索は、正規表現による文字列検索や検索対象の絞り込みなどに利用可能である。したがって、これらの検索を高速化し、様々な応用分野における処理効率を向上させることが望まれている。
特許文献2にはパトリシアツリーを用いた最長一致検索を高速化する技術が記載されているが、カップルドノードツリーは本出願人が発明した新規なデータ構造であるため、従来の最長一致検索手法を使うことはできない。
特開2001−357070号公報 特開2003−224581号公報
本発明の目的は、カップルドノードツリーを検索対象として最長一致/最短一致検索を行う方法およびプログラムを提供することである。
本発明が検索対象とするカップルドノードツリーは、ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーである。前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードである。前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含む。
前記カップルドノードツリーは、前記ツリーの任意のノードを検索開始ノードとして、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより
、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索の結果である検索結果キーとするように構成されている。
本発明による前記カップルドノードツリーを用いた最長一致検索方法は、前記カップルドノードツリーの前記ルートノードを前記検索開始ノードとし、指定された最長一致検索キーを前記検索キーとして、前記ルートノードからの経路を記憶しながら前記検索を行って前記検索結果キーを取得する検索ステップと、前記最長一致検索キーと前記検索結果キーのビット列を比較して、ビット値が一致しない不一致ビットの位置のうち最も上位の位置である差分ビット位置を取得する差分ビット位置取得ステップと、前記差分ビット位置がビット列の最上位以外の位置のとき、記憶された前記経路を参照して最長一致ノードを設定する最長一致ノード設定ステップであって、前記ルートノードが前記リーフノードの場合または前記ルートノードが前記ブランチノードであり該ルートノードの前記弁別ビット位置が前記差分ビット位置よりも下位の位置の場合は、前記ルートノードを前記最長一致ノードとして設定し、その他の場合は、前記経路上のノードであって前記弁別ビット位置が前記差分ビット位置よりも上位にある前記ブランチノードのうち前記弁別ビット位置が最下位の前記ブランチノードの次に前記検索ステップにおいて記憶された前記ブランチノードまたは前記リーフノードを前記最長一致ノードとして設定する最長一致ノード設定ステップと、を備える。
本発明による前記カップルドノードツリーを用いた最短一致検索方法は、前記最長一致検索キーのかわりに最短一致検索キーを用いる以外は上記と同様の検索ステップおよび差分ビット位置取得ステップと、前記差分ビット位置がビット列の最上位以外の位置のとき、記憶された前記経路を参照して最短一致ノードを設定する最短一致ノード設定ステップであって、前記経路が、前記ルートノードと、該ルートノードのリンク先の前記ノード対の一方の前記ブランチノードである第一のノードとを含み、前記ルートノードの前記弁別ビット位置が前記差分ビット位置よりも上位の位置の場合は、前記第一のノードのリンク先の前記ノード対のうち、前記経路に記憶されていない方のノードである第二のノードを前記最短一致ノードとして設定する最短一致ノード設定ステップと、を備える。
本発明によれば、カップルドノードツリーを検索対象として最長一致/最短一致検索を行うことが可能となる。よって、最長一致/最短一致検索が必要な各種応用分野にカップルドノードツリーを用いることが可能となる。カップルドノードツリーは、検索を高速化するよう構成されているため、カップルドノードツリーを用いた最長一致/最短一致検索は高速である。よって、各種応用分野における最長一致/最短一致検索の処理の高速化が実現される。
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。
最初に、本出願人により先の上記出願において提案された、本発明の前提となるカップルドノードツリーについて、カップルドノードツリーを配列に格納する例を説明する。ブランチノードが保持するリンク先の位置を示すデータとして、記憶装置のアドレス情報とすることもできるが、ブランチノードあるいはリーフノードのうち占有する領域の記憶容量の大きい方を格納可能な配列要素からなる配列を用いることにより、ノードの位置を配列番号で表すことができ、位置情報の情報量を削減することができる。
図1は、配列に格納されたカップルドノードツリーの構成例を説明する図である。
図1を参照すると、ノード101が配列100の配列番号10の配列要素に配置されている。ノード101はノード種別102、弁別ビット位置103及び代表ノード番号10
4で構成されている。ノード種別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ビットのインデックスキーは、図13に例示されたパトリシアツリーのものと同じである。
符号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を含んでいる。インデックスキー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を介して接続された遠方に配置された装置を用いることも可能である。図1の配列100は、配列309の一例である。
図3の例示では、主記憶装置305、外部記憶装置306及び通信装置307が一本のバス304によりデータ処理装置301に接続されているが、接続方法はこれに限るものではない。また、主記憶装置305をデータ処理装置301内のものとすることもできるし、探索経路スタック310を中央処理装置302内のハードウェアとして実現することも可能である。あるいは、配列309は外部記憶装置306に、探索経路スタック310を主記憶装置305に持つなど、使用可能なハードウェア環境、インデックスキー集合の大きさ等に応じて適宜ハードウェア構成を選択できることは明らかである。
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶装置が用いられることは当然である。
次に、上述の出願において、本出願人により提案されたカップルドノードツリーを用いた基本的な検索処理、カップルドノードツリーにおける挿入削除処理、及びカップルドノードツリーに含まれるインデックスキーの最大値/最小値を求める処理等の応用処理の一部について、図4〜図5を参照することにより、本発明を理解するために必要な範囲で紹介する。
図4は、本出願人による出願である上記特願2006−293619で提案されたビット列検索の基本動作を示したフローチャートである。
まず、ステップS401で、検索開始ノードの配列番号を取得する。取得された配列番号に対応する配列要素は、カップルドノードツリーを構成する任意のノードを格納したも
のである。検索開始ノードの指定は、後に説明する各種応用検索において行われる。
次に、ステップS402で、探索経路スタック310に取得された配列番号を格納し、ステップS403で、その配列番号に対応する配列要素を参照すべきノードとして読み出す。そして、ステップS404で、読み出したノードから、ノード種別を取り出し、ステップS405で、ノード種別がブランチノードであるか否かを判定する。
ステップS405の判定において、読み出したノードがブランチノードである場合は、ステップS406に進み、ノードから弁別ビット位置についての情報を取り出し、更に、ステップS407で、取り出した弁別ビット位置に対応するビット値を検索キーから取り出す。そして、ステップS408で、ノードから代表ノード番号を取り出して、ステップS409で、検索キーから取り出したビット値と代表ノード番号とを加算し、新たな配列番号として、ステップS402に戻る。
以降、ステップS405の判定においてリーフノードと判定されてステップS410に進むまで、ステップS402からステップS409までの処理を繰り返す。ステップS410で、リーフノードからインデックスキーを取り出して、処理を終了する。
以上、本発明の基礎となるカップルドノードツリーについてとビット列検索の基本動作について詳細に説明した。カップルドノードツリーの生成処理については、特に図示はしていないが、本出願人による上記先の出願である特願2006−187827において説明したように、ビット列の集合があるとき、そこから任意のビット列を順次取り出してインデックスキーとして挿入する処理を繰り返すことにより可能である。
先に述べたように、カップルドノードツリーに格納されたインデックスキーの値は、ノード[1]側とツリーの深さ方向をたどることにより降順にソートされてツリー上に配置されていることから、インデックスキーの挿入処理は、挿入するインデックスキーを検索キーとしてカップルドノードツリーから該当するリーフノードを検索するとともに、該リーフノードに至るまでたどったリンク経路のブランチノード及び該リーフノードが格納された配列要素の配列番号をスタックに順次格納し、検索キーと該当するリーフノードに含まれるインデックスキーの間で大小比較とビット列比較を行い、ビット列比較で異なるビット値となる先頭のビット位置と上記スタックに格納されているブランチノードの弁別ビット位置との相対的位置関係により挿入されるインデックスキーを含むリーフノードともう一方のノードからなるノード対の挿入位置を決定し、上記大小関係により挿入するインデックスキーを含むリーフノードを上記挿入されるノード対のどちらのノードとするかを決定することにより実施することができる。
図5は、本出願人による出願である上記特願2006−293619で提案されたカップルドノードツリー(部分木を含む)に格納されたインデックスキーの最小値を求める処理を示したフローチャートである。先に述べたようなインデックスキーのツリー上の配置から、インデックスキーの最小値を求める処理は検索開始ノードからノード[0]をリーフノードに至るまでツリー上でたどることに相当する。
まず、ステップS501の検索開始ノードの配列番号の取得からステップS505のノード種別の判定までは、それぞれ上述の図4のステップS401からステップS405の処理と同様である。
ステップS505のノード種別の判定においてノード種別がブランチノードと判定されると、ステップS506に進み、ノードから配列の代表ノード番号を取り出し、ステップS507で、取り出した代表ノード番号に値「0」を加算してその結果を新たな配列番号
とし、ステップS502に戻る。以降、ステップS505においてそのノードがリーフノードと判定されるまでステップS502からステップS507までの処理を繰り返し、ステップS508で、リーフノードからインデックスキーを取り出し、処理を終了する。
上記の図5に示す処理においては、ノード[0]をたどるため、代表ノード番号に一律「0」を加算している。すなわち、図5の処理によれば、リンク先のノードは、ノード対のうち必ずノード[0]とし、より小さい値のインデックスキーが格納されているノードのほうに分岐している。これにより、ツリー構造が先に述べたように順列構成であるカップルドノードツリーの最小のインデックスキーを取り出すことができる。
なお、図5と類似の方法で、カップルドノードツリー(部分木を含む)に格納されたインデックスキーの最大値を求めることができるのは当然である。具体的には、図5の処理を、ステップS507において「0」ではなく「1」を加算するように変更すれば、インデックスキーの最大値を求めることができる。この変更により、代表ノード番号が表すノード対のうち、ノード[1]に常にリンクすることとなり、リーフノードに至るまでツリー構造の階層を順次たどっていくことができるからである。
図4と図5に示すように、検索キーと一致するインデックスキーを検索する基本動作やインデックスキーの最小値/最大値の検索処理を実行する際には、探索経路スタック310に参照した配列の配列番号が順次格納されていく。
なお、上述の図5を参照したインデックスキーの最小値/最大値の検索処理では、カップルドノードツリーは配列に記憶されたものとして説明したが、カップルドノードツリーが配列に記憶されることは必須ではなく、ノード対を構成する2つのノードのうちの代表ノードのみあるいは代表ノードと隣接した記憶領域に配置されたノードのみをリンクしてリーフノードに至ることによりインデックスキーの最小値/最大値の検索が可能であることは明らかである。
以上、カップルドノードツリーの最長一致/最短一致検索の前提となる技術を説明したが、必要とあれば、上述の特許出願の明細書及び図面の記載を参照されたい。
以下では、本発明によるカップルドノードツリーの最長一致/最短一致検索について説明する。まず、下記の実施形態で用いる用語と、下記の実施形態における前提条件を説明する。
(a)最長一致検索は、指定された検索キーである最長一致検索キーと部分一致するインデックスキーのうち、差分ビット位置が最も下位となるインデックスキーを検索する処理である。そのようなインデックスキーを「最長一致条件を満たすインデックスキー」と定義する。最長一致条件を満たすインデックスキーは存在しないこともあるし、1つまたは複数存在することもある。なお、差分ビット位置とは、2つのビット列を比較したときにビット値が一致しない不一致ビットのうち、最も上位の位置を表す。
(b)最短一致検索は、指定された検索キーである最短一致検索キーと部分一致するインデックスキーのうち、差分ビット位置が上位のものを優先的に検索する処理である。最短一致の定義の細部については実施形態によって違いがあってもよい。以下の実施形態では、最短一致を次のように定義して最短一致検索方法について詳しく説明する。
ルートノードの弁別ビット位置までのビット値が最短一致検索キーと完全に一致するが、ルートノードの弁別ビット位置以降のビット値には最短一致検索キーと不一致のビットが存在するインデックスキーを「最短一致条件を満たすインデックスキー」と定義する。最短一致条件を満たすインデックスキーは存在しないこともあるし、1つまたは複数存在
することもある。
次に、カップルドノードツリーの最長一致検索の具体的な方法について図6、8、10、11を参照して説明する。
図6は、本発明の一実施形態における最長一致検索処理のフローチャートである。図6の処理の概要は、ステップS601〜S606で最長一致ノードを取得し、ステップS607〜S608で最長一致ノードをルートノードとする部分木の中から一つのインデックスキーを取得する、というものである。なお、ある部分木に含まれるすべてのリーフノードのインデックスキーが最長一致条件を満たすとき、その部分木のルートノードを最長一致ノードと定義する。よって、ステップS607〜S608により取得されたインデックスキーは最長一致条件を満たす。より詳細には、図6の処理は下記のとおりである。
ステップS601で指定された最長一致検索キーを検索キーに設定し、ステップS602でカップルドノードツリーのルートノードを検索開始ノードに設定する。
次に、ステップS603において、ステップS601で設定された検索キーを用いて配列309を検索し、インデックスキーを取得する。この検索は、図4に示したとおりである。ステップS602で検索開始ノードにルートノードが設定されているので、検索対象はカップルドノードツリー全体である。ステップS603の検索で探索経路スタック310に格納された内容は、後にステップS606で利用される。
ステップS603でインデックスキーを取得した後、処理はステップS604に進み、ステップS601で設定された検索キー、すなわち最長一致検索キーと、ステップS603で取得されたインデックスキーとの差分ビット位置を求める。この処理の詳細は図10と合わせて後述する。
次に、ステップS605において、ステップS604で求めた差分ビット位置が0か否かを判定する。
差分ビット位置が0のとき、判定は「はい」となり、最長一致検索処理を終了する。この場合、最長一致検索キーと、ステップS603で取得されたインデックスキーは、先頭の0ビット目が不一致である。また、カップルドノードツリーの構造から、カップルドノードツリーに含まれる他のすべてのインデックスキーも、最長一致検索キーと先頭の0ビット目が不一致である。したがって、カップルドノードツリー内に部分一致条件を満たすインデックスキーを含むリーフノードが存在しないため、「最長一致条件を満たすインデックスキーは存在しない」という検索結果が得られる。
差分ビット位置が0ではないとき、ステップS605の判定が「いいえ」となり、処理はステップS606に進む。この場合、カップルドノードツリー内に最長一致条件を満たすインデックスキーが少なくとも1つ存在する。しかし、ステップS605の段階では、最長一致条件を満たすインデックスキーの存在が判明しただけなので、ステップS606では、具体的な最長一致ノードを取得する。
ステップS606では、ステップS603の検索によって配列309の配列番号が格納された探索経路スタック310を参照し、ステップS604で求めた差分ビット位置に基づいて、最長一致ノードを取得する。
最長一致ノードの取得後、次のステップS607において最長一致ノードを検索開始ノードに設定する。そして、その次のステップS608において、検索開始ノードより、図5に示した最小値検索処理を実行し、最長一致条件を満たすインデックスキーのうちの最小値を取得し、取得した最小値を最長一致検索の結果として出力して、最長一致検索処理を終了する。
なお、ステップS607とS608は、実施形態に応じて様々に変形可能である。本実施形態のように、最長一致条件を満たす1つ以上のインデックスキーの中から最小値を選択することは、処理の一例にすぎない。他の変形例については後述する。
次に、図6のステップS604の処理について図10を参照して説明する。後述するように、図10の処理は、最短一致検索処理からも呼び出される。
ステップS101において、検索キーを比較キー1に設定し、インデックスキーを比較キー2に設定する。最長一致検索処理の場合、ここでの「検索キー」はステップS601で設定された最長一致検索キーであり、ここでの「インデックスキー」はステップS603で取得されたインデックスキーである。
次に、ステップS102において、最上位の0ビット目から順に比較キー1と比較キー2のビット列を比較する。比較キー1と比較キー2で値が一致しない不一致ビットのうち最初に見つかったもののビット位置が、差分ビット位置として取得されて図10の処理が終了する。上記の説明から明らかなとおり、図6のステップS604から図10の処理が呼び出された場合、ステップS102では、最長一致検索キーとステップS603で取得されたインデックスキーとの差分ビット位置が得られる。
次に、図6のステップS606で行われる最長一致ノードを取得する処理について図8を参照して説明する。図8の処理を理解しやすくするために、説明は(A1)〜(A3)の3つの場合に分けて行う。
(A1)ルートノードがリーフノードの場合
この場合、図6のステップS603で取得されたインデックスキーはルートノードに格納されたインデックスキーである。よって、最長一致検索キーとインデックスキーとの差分ビット位置が0より大きければ、インデックスキーは最長一致条件を満たし、ルートノードは最長一致ノードに該当する。
また、図6のステップS605から明らかなとおり、図8の処理が行われるのは差分ビット位置が0より大きい場合のみなので、(A1)の場合、図8の処理によって必ずルートノードが最長一致ノードに設定される。具体的には次のとおりである。
ステップS801で、探索経路スタック310のスタックポインタを1つ戻す。
また、(A1)の場合、探索経路スタック310に格納されている配列309の配列番号はルートノードの配列番号のみである。よって、ステップS801の実行後、スタックポインタが指す内容は、ルートノードの配列番号である。この状態で処理はステップS802に移行する。
ステップS802で、探索経路スタック310のスタックポインタがルートノードの配列番号を指しているか否かを判定する。(A1)の場合は、上記のとおりであるから、判定の結果は「はい」となり、ステップS808に進む。
ステップS808で、探索経路スタック310から、スタックポインタの指す配列番号を取り出す。つまり、(A1)の場合は、ルートノードの配列番号が取り出される。
そして、続くステップS809では、ステップS808で取得された配列番号、すなわちルートノードの配列番号を最長一致ノードの配列番号に設定し、図8の処理が終了する。
(A2)ルートノードがブランチノードであり、ルートノードの弁別ビット位置が0の場

この場合、0ビット目が0のインデックスキーと0ビット目が1のインデックスキーの双方を検索対象のカップルドノードツリーが含む。よって、少なくとも0ビット目が一致するインデックスキーが必ず存在する。これは、最長一致条件を満たすインデックスキーが必ず存在することと、図6のステップS604で取得された差分ビット位置が0より大きいことを意味する。つまり、(A2)の場合、ステップS605の判定は必ず「いいえ」となり、必ず図8の処理が実行される。
ステップS801で、探索経路スタック310のスタックポインタを1つ戻す。その結果、スタックポインタが指す内容は、ステップS603で取得されたインデックスキーを格納しているリーフノードの配列番号となる。(A2)の場合、このリーフノードはルートノードではない。ステップS801の実行後、ステップS802〜S806のループが繰り返し実行される。このループは、探索経路スタック310を遡る操作である。
ステップS802では、探索経路スタック310のスタックポインタがルートノードの配列番号を指しているか否かを判定する。(A2)の場合、1回目にステップS802を実行した時点での判定は「いいえ」となり、ステップS803に移行する。
ステップS803では、探索経路スタック310のスタックポインタを1つ戻し、スタックポインタが指す配列番号を取り出す。続くステップS804では、配列309から、ステップS803で取得した配列番号の指す配列要素をノードとして読み出す。そして、次のステップS805では、ステップS804で読み出したノードから弁別ビット位置を取り出す。
なお、ステップS803〜S806は、ステップS802の判定が「いいえ」の場合のみ実行される。よって、ステップS803でスタックポインタを1つ戻したときにアンダーフローを起こさないことが保証される。また、図4とステップS802の説明から分かるとおり、ステップS803〜S806が実行されるのは、探索経路スタック310にルートノード以外のノードの配列番号が1つ以上格納されている場合である。よって、ステップS803の実行後にスタックポインタが指すのは、ルートノードであるブランチノードまたはそれ以外のブランチノードの配列番号である。
ステップS805の次のステップS806では、取り出された弁別ビット位置が、図10のステップS102で得た差分ビット位置よりも上位か否かが判定される。弁別ビット位置が差分ビット位置よりも上位の場合、判定は「はい」となってステップS807に進み、下位の場合、判定は「いいえ」となってステップS802に戻る。
(A2)の場合は必ず、ステップS802〜S806のループを1回以上繰り返して実行した後、ステップS806の判定が「はい」となって、ステップS807、S808、S809と順に処理が進む。
ステップS807では、探索経路スタック310のスタックポインタを1つ進める。ステップS807が実行されるのはステップS803が1回以上実行された後なので、ステップS807の操作によりオーバーフローが生じることはない。
続くステップS808で探索経路スタック310からスタックポインタの指す配列番号を取り出し、次のステップS809において、ステップS808で取得された配列番号を最長一致ノードの配列番号に設定し、図8の処理が終了する。
上記の処理により(A2)の場合に最長一致ノードとして設定されるノードは、次の2
つのいずれかである。
ステップS603で取得されたインデックスキーを格納するリーフノードにリンクするブランチノードの弁別ビット位置が、差分ビット位置よりも上位の場合、上記リーフノードが最長一致ノードとして設定される。
弁別ビット位置がmであるブランチノードの配列番号と、そのブランチノードからリンクされ弁別ビット位置がnであるブランチノードの配列番号が探索経路スタック310に順に格納されており、弁別ビット位置mと弁別ビット位置nと差分ビット位置dとの関係が、m<d<nの場合、弁別ビット位置がnであるブランチノードが最長一致ノードとして設定される。
(A3)ルートノードがブランチノードであり、ルートノードの弁別ビット位置が0より大きい場合
この場合、図6のステップS605の判定が「はい」になることもある点が、(A2)の場合と異なる。
ステップS801で探索経路スタックのスタックポインタを1つ戻すことと、ステップS802〜S806のループの1回目の実行時にはステップS802の判定が必ず「いいえ」になることと、続くステップS803〜S806の動作は、(A2)の場合と同様である。
ステップS806で判定が「いいえ」となってステップS802に戻った場合、再度ステップS802の判定が行われる。(A3)の場合は、ステップS802の2回目以降の実行において判定が「はい」となることがある点で、(A2)の場合と異なる。
上記のとおり、ステップS802の1回目の実行時には判定が必ず「いいえ」になる。ステップS802の2回目以降の実行時には、直前にステップS806が実行され、ステップS806で「いいえ」と判定されている。つまり、ループを1回以上繰り返して実行した結果、スタックポインタがルートノードの配列番号を指すまで探索経路スタック310を遡った場合であって、ルートノードの弁別ビット位置が差分ビット位置よりも下位の場合にのみ、ステップS802で「はい」と判定される。
ステップS802で「はい」と判定されると、ステップS808に進み、(A1)の場合と同様にして、ルートノードの配列番号が最長一致ノードの配列番号に設定され、図8の処理が終了する。
(A3)の場合はルートノードの弁別ビット位置が0より大きいので、ルートノードの弁別ビット位置mと差分ビット位置dとの関係は、下記のとおりである。カップルドノードツリーに含まれるすべてのインデックスキーは、0〜(m−1)ビット目が共通である。また、(A3)の場合でステップS802において「はい」と判定された場合は、0<d<mである。よって、この場合は、カップルドノードツリーに含まれるすべてのインデックスキーは、0〜(d−1)ビット目が最長一致検索キーと一致している。したがって、この場合は上記のとおり、ルートノードの配列番号を最長一致ノードの配列番号に設定する。
また、(A2)の場合と同様に、(A3)の場合でも、ステップS802〜S806のループを1回以上繰り返して実行した後、ステップS806の判定が「はい」となって、ステップS807、S808、S809と順に処理が進むことがある。その場合の処理の内容は(A2)の場合と同様である。
次に、図11を参照して、最長一致検索の具体例について説明する。図11のカップルドノードツリーは、“000111”、“010010”、“010011”、“011010”、“100010”、“100011”、“101100”、“101111”なる8つのインデックスキーを含む。図11と図2のカップルドノードツリーは同じ構造を有しているので、同じ参照符号を付した。ただし、ノード211fの弁別ビット位置231fの値と、ノード210hのインデックスキー250hの値と、ノード211hのインデックスキー251hの値は、図2とは異なる。
以下では最長一致検索キーとして“101010”が指定された場合について説明する。
図6のステップS601で“101010”が検索キーに設定され、ステップS602でルートノードが検索開始ノードに設定される。ステップS603から図4の処理が呼び出されると、探索経路スタック310には、配列番号220、(220a+1)、(221b+1)、(221f+1)が順に格納される。また、ステップS603で得られるインデックスキーは、配列番号(221f+1)の配列要素であるノード211hのインデックスキー251hに格納された“101111”である。図11では、このことをノード211hの横の「初期検索」で示した。
ステップS604で、“101111”なる値のインデックスキー251hと“101010”なる値の検索キーの差分ビット位置が求められ、その値3は0より大きいのでステップS605の判定は「いいえ」となる。そのため、ステップS606、すなわち図8の処理が実行される。ステップS802〜S806の繰り返しにより探索経路スタック310を遡り、配列番号(220a+1)が得られると、配列番号(220a+1)の配列要素に格納されたノード211bの弁別ビット位置231bが2であり、弁別ビット位置と差分ビット位置との関係は2<3なので、ステップS806で「はい」と判定される。よって、ステップS807でスタックポインタが1つ進められ、ステップS808で配列番号(221b+1)が取り出され、配列番号(221b+1)が最長一致ノードの配列番号に設定される。つまり、配列番号(221b+1)の配列要素に格納されたノード211fが最長一致ノードに設定される。
ここで処理は図6に戻り、ステップS607でノード211fが検索開始ノードに設定され、ステップS608の処理、すなわち図5の最小値検索が行われる。図11のとおり、最長一致ノードに設定されたブランチノードであるノード211fの子孫のリーフノードは、ノード210hとノード211hの2つである。両ノードのインデックスキーの値は“101100”と“101111”である。いずれも、最長一致検索キー“101010”とは0〜2ビット目が一致し、3ビット目が不一致である。また、カップルドノードツリーに含まれる他の6つのインデックスキーは、いずれも、最長一致検索キー“101010”との差分ビット位置が3より小さい。ステップS608の処理により、“101100”と“101111”のうちの最小値である“101100”が選択され、図6の処理は終了する。
次に、カップルドノードツリーの最短一致検索の具体的な方法について図7、9、10、12を参照して説明する。
図7は、本発明の一実施形態における最短一致検索処理のフローチャートである。図7は、図6における「最長一致」を「最短一致」に変えた図である。
まず、ステップS701で最短一致検索キーを検索キーにし、ステップS702でルートノードを検索開始ノードに設定する。
次に、ステップS703において、ステップS701で設定された検索キーを用いて配列を検索し、インデックスキーを取得する。この検索は、図4に示したとおりである。ス
テップS702で検索開始ノードにルートノードが設定されているので、検索対象はカップルドノードツリー全体である。ステップS703の検索で探索経路スタック310に格納された内容は、後にステップS706で利用される。インデックスキーの取得後、処理はステップS704に進む。
ステップS704では、ステップS701で設定された検索キー、すなわち最短一致検索キーと、ステップS703で取得されたインデックスキーとの差分ビット位置を求める。
この処理の詳細は図10と合わせて既に述べたとおりである。ただし、ステップS704から図10の処理を呼び出す場合には、ステップS101で設定される比較キー1が最短一致検索キーであり、比較キー2がステップS703で取得されたインデックスキーである点が、最長一致検索の場合と異なる。
ステップS704の実行後、ステップS705において、ステップS704で求めた差分ビット位置が0か否かを判定する。
差分ビット位置が0のとき、判定は「はい」となり、最短一致検索処理を終了する。この場合、最短一致検索キーと、ステップS703で取得されたインデックスキーは、先頭の0ビット目が不一致である。また、カップルドノードツリーの構造から、カップルドノードツリーに含まれる他のすべてのインデックスキーも、最短一致検索キーと先頭の0ビット目が不一致である。したがって、「最短一致条件を満たすインデックスキーは存在しない」という検索結果が得られる。
差分ビット位置が0ではないとき、ステップS705の判定は「いいえ」となり、処理がステップS706に進む。この場合、カップルドノードツリー内に最短一致条件を満たすインデックスキーが少なくとも1つは存在する。しかし、ステップS705の段階では最短一致条件を満たすインデックスキーの存在が判明しただけなので、ステップS706では、具体的な最短一致ノードを取得する。なお、ある部分木に含まれるすべてのリーフノードのインデックスキーが最短一致条件を満たすとき、その部分木のルートノードを最短一致ノードと定義する。
ステップS706では、ステップS703の検索によって配列309の配列番号が格納された探索経路スタック310を参照し、ステップS704で求めた差分ビット位置に基づいて、最短一致ノードを取得する。
最短一致ノードの取得後、次のステップS707において最短一致ノードを検索開始ノードに設定する。そして、その次のステップS708において、検索開始ノードより、図5に示した最小値検索処理を実行し、最短一致条件を満たすインデックスキーのうちの最小値を取得し、取得した最小値を最短一致検索の結果として出力して、最短一致検索処理を終了する。
なお、図6と同様に、ステップS707とS708は、実施形態に応じて様々に変形可能である。
次に、図7のステップS706で行われる最短一致ノードを取得する処理について図9を参照して説明する。図9の処理は、上記(b)の「最短一致条件」の定義にしたがった処理だが、図9の処理を理解しやすくするために、説明は(B1)〜(B4)の4つの場合に分けて行う。(B1)と(B2)は最短一致キーによる検索の結果、探索経路スタック上に少なくとも3つのノードの配列番号が格納されている場合であり、(B3)と(B4)はそれ以外の場合である。
(B1)ルートノードがブランチノードであり、ステップS703で取得されたインデックスキーを格納するリーフノードへのルートノードからの経路上には、ルートノード以外のブランチノードが少なくとも1つ存在し、ルートノードの弁別ビット位置をmとすると最短一致検索キーと0〜mビット目までの範囲が一致するインデックスキーが存在する場合
この場合、上記経路上には少なくとも3つのノードが存在する。探索経路スタック310には、ルートノード、ルートノードの子ノードであるブランチノード、そのブランチノードの子ノードの順で、配列番号が格納されている。上記(b)の定義より、この場合、ルートノードの子ノードであるブランチノードからリンクされ、探索経路スタック310に配列番号が格納されたノードと対をなすノードが最短一致ノードに該当する。(B1)の場合における図9の処理は、このノードを最短一致ノードに設定する処理である。
まず、ステップS901で探索経路スタック310のスタックポインタを退避エリアに設定する。
続くステップS902〜S903はループを形成しており、1回以上繰り返し実行される。このループは、スタックポインタがルートノードの配列番号を指すまで探索経路スタック310を遡ることを表す。まず、ステップS902で、探索経路スタック310のスタックポインタを1つ戻す。続くステップS903で、探索経路スタック310のスタックポインタがルートノードの配列番号を指すか否かが判定される。スタックポインタがルートノードの配列番号を指している場合は判定が「はい」となってステップS904に進み、それ以外の場合は判定が「いいえ」となってステップS902に戻る。
ステップS904では、スタックポインタと退避エリアの値が比較される。ここで、ステップS904が実行されるのは、スタックポインタがルートノードの配列番号を指す場合のみである。つまり、ステップS904は、図9の処理の開始直前のスタックポインタがルートノードの配列番号を指すスタックポインタとどれほど離れているかを調べる処理であり、退避エリアの値とスタックポインタを比較し、その差に応じて処理を分岐させる処理である。
(B1)の場合、上記のとおり探索経路スタック310には少なくとも3つのノードの配列番号が格納されているため、ステップS904の比較結果は必ず「差>2」となる。よって、処理は必ずステップS905に進む。
ステップS905において、探索経路スタック310からスタックポインタの指す配列番号、すなわちルートノードの配列番号を取り出す。続くステップS906において、ステップS905で取り出した配列番号の指す配列要素を配列309からノードとして読み出す。次のステップS907では、ステップS906で読み出されたノード、すなわちルートノードから、弁別ビット位置を取り出す。
続くステップS908では、ステップS907で取り出された弁別ビット位置が、図10のステップS102で得た差分ビット位置よりも上位か否かが判定される。弁別ビット位置が差分ビット位置よりも上位の場合、判定は「はい」となってステップS909に進み、下位の場合、判定は「いいえ」となってステップS914に進む。
(B1)の場合、ステップS908の判定は必ず「はい」になる。理由は次のとおりである。
図9の処理が実行されるのは差分ビット位置が0より大きいときのみなので、ステップS907で取り出されたルートノードの弁別ビット位置が0のときは必ずステップS908の判定が「はい」となる。
また、ステップS907で取り出されたルートノードの弁別ビット位置が0より大きい場合、ルートノードの弁別ビット位置をmとすると、カップルドノードツリーに含まれるすべてのインデックスキーは0〜(m−1)ビット目の範囲が同一である。また、(B1)の場合、最短一致検索キーとmビット目まで一致するインデックスキーが存在する。よって、カップルドノードツリーに含まれるすべてのインデックスキーは0〜(m−1)ビット目の範囲が最短一致検索キーと一致するので、弁別ビット位置mと差分ビット位置dとの関係は、m≦dである。よって必ずステップS908の判定が「はい」となる。
ステップS908で「はい」と判定すると、ステップS909では探索経路スタック310のスタックポインタを2つ進める。
続くステップS910で探索経路スタック310からスタックポインタの指す配列番号を取り出す。
次のステップS911では、ステップS910で得た配列番号と対をなす配列番号を得る。
ステップS911の実行後、処理はステップS914に進み、ステップS911で得られた配列番号を最短一致ノードの配列番号に設定する。そして、図9の処理が終了する。
(B2)ルートノードがブランチノードであり、ステップS703で取得されたインデックスキーを格納するリーフノードへのルートノードからの経路上には、ルートノード以外のブランチノードが少なくとも1つ存在し、ルートノードの弁別ビット位置をmとすると最短一致検索キーと0〜mビット目までの範囲が一致するインデックスキーが存在しない場合
この場合、(B1)と違うのは、最短一致検索キーと0〜mビット目までの範囲が一致するインデックスキーが存在しない点のみである。よって、ステップS907までの処理は(B1)の場合とまったく同じである。
ステップS907の次のステップS908において、(B2)の場合は「いいえ」と判定され、ステップS914に移行する。この場合、配列番号はステップS905で取り出された配列番号、すなわちルートノードの配列番号である。よって、ステップS914ではルートノードの配列番号を最短一致ノードの配列番号に設定し、処理を終了する。
(B3)ルートノードがブランチノードであり、ステップS703で取得されたインデックスキーを格納するリーフノードがルートノードからリンクされている場合
この場合、上記経路上には2つのノードのみが存在する。つまり、探索経路スタック310は、ルートノードの配列番号とインデックスキーを格納するリーフノードの配列番号が格納された状態である。
(B3)の場合も、ステップS901〜S903は(B1)の場合と同様である。しかし、ステップS903の次のステップS904における比較結果が(B1)の場合とは異なる。(B3)の場合、ステップS901で退避エリアに設定された値とスタックポインタが比較され、「差=2」という結果が得られる。よって、処理は必ずステップS912に進む。
ステップS912では探索経路スタック310のスタックポインタを1つ進める。次のステップS913で探索経路スタック310からスタックポインタの指す配列番号を取り出す。つまり、リーフノードの配列番号を取り出す。そして処理はステップS914に進み、ステップS913で取り出されたリーフノードの配列番号を最短一致ノードの配列番号に設定し、処理を終了する。
(B4)ルートノードがリーフノードの場合
この場合、図7のステップS703で取得されたインデックスキーはルートノードに格納されたインデックスキーである。よって、最短一致検索キーとインデックスキーとの差分ビット位置が0より大きければ、インデックスキーは最短一致条件を満たし、ルートノードは最短一致ノードに該当する。また、図7のステップS705から明らかなとおり、図9の処理が行われるのは差分ビット位置が0より大きい場合のみなので、(B4)の場合、図9の処理によって必ずルートノードが最短一致ノードに設定される。具体的には次のとおりである。
ステップS901は(B1)の場合と同様である。
続くステップS902において、スタックポインタの値を1減らす。また、(B4)の場合、探索経路スタック310に格納されている配列309の配列番号はルートノードの配列番号のみである。したがって、ステップS902の実行後、スタックポインタが指す配列番号は、すなわち、ルートノードの配列番号である。この状態で処理はステップS903に移行する。
ステップS903では、探索経路スタック310のスタックポインタがルートノードの配列番号を指しているか否かが判定される。(B4)の場合は、上記のとおりであるから、判定の結果は「はい」となり、ステップS904に移行する。
ステップS904では、スタックポインタと退避エリアの値を比較する。(B4)の場合、「差=1」という結果が得られ、この結果にしたがって処理はステップS913に移行する。
ステップS913では、探索経路スタック310からスタックポインタの指す配列番号、つまりルートノードの配列番号を取り出す。そして、続くステップS914では、ルートノードの配列番号を、最短一致ノードの配列番号に設定し、図9の処理が終了する。
次に、図12を参照して、最短一致検索の具体例について説明する。図12のカップルドノードツリーは図11のものと全く同一である。
以下では最短一致検索キーとして“101010”が指定された場合について説明する。
図7のステップS701〜S705の処理は、図11の例と全く同様なので説明を省略する。ステップS705で「いいえ」と判定されてステップS706、すなわち図9の処理が実行される。まず、ステップS901でスタックポインタの値を退避エリアに設定する。次に、ステップS902〜S903の繰り返しにより探索経路スタック310を遡り、配列番号220が得られたらステップS903の判定が「はい」となってステップS904に進む。ここでスタックポインタと退避エリアの値が比較され、その結果ステップS905に進み、ステップS905〜S907によってルートノード210aの弁別ビット位置230aが取り出される。弁別ビット位置230aの値は0なので、ステップS908の判定は「はい」となり、ステップS909でスタックポインタを2つ進める。その結果、ステップS910では配列番号(221b+1)が取り出され、ステップS911ではそれと対の配列番号221bが取得される。よって、ステップS914では配列番号221bが最短一致ノードの配列番号に設定される。
ここで処理は図7に戻り、ステップS707で最短一致ノードであるノード210fが検索開始ノードに設定され、ステップS708の処理、すなわち図5の最小値検索が行われる。図12のとおり、最短一致ノードに設定されたブランチノードであるノード210fの子孫のリーフノードは、ノード210gとノード211gである。両ノードのインデ
ックスキーの値は“100011”と“100010”である。いずれも、最短一致検索キー“101010”とは0〜1ビット目が一致し、2ビット目が一致しない。
ルートノードからの経路上のブランチノードにおける弁別ビット位置と対比すると、ルートノード210aの弁別ビット位置230aは0、次のノード211bの弁別ビット位置231bは2である。よって、0〜0ビット目の範囲ではこの2つのインデックスキーは最短一致検索キーと一致し、1〜2ビット目の範囲では不一致のビットが存在する。
一方、カップルドノードツリーに含まれる他のインデックスキーは、部分一致条件を満足しないインデックスキー250c、251d、250e、251eと、0〜2ビット目が一致し、3ビット目が一致しないインデックスキー250hと251hである。よって、最短一致検索により、最短一致検索キーと部分一致するインデックスキーのうち、一致部分の短いものが優先的に検索されることが分かる。
上記実施形態では、“100011”と“100010”のうちの最小値である“100010”がステップS708により選択される。
なお、本発明の実施形態は上述のものに限られず、様々な変形が可能である。
上記の実施形態では、最左という物理的なビット位置が最上位という論理的なビット位置に対応していたが、別の実施形態では、別の対応関係であってもよく、例えば、最右ビットを最上位ビットとしてもよい。図8のステップS806や図9のステップS908における判定は、論理的なビット位置にしたがった判定である。
また、上記の最長一致検索では、最長一致条件を満たすインデックスキーのうちの最小値を結果として取得している。しかし、様々な実施形態に応じた適切なものを検索結果として得るように、上記の最長一致検索処理を変形することが可能である。例えば、最長一致条件を満たすインデックスキーのうちの最大値を、最長一致検索処理の結果として取得してもよい。
同様に、最短一致検索も、検索結果として何を取得するかは実施形態に応じて様々である。
図9のステップS902〜S903のループでは探索経路スタック310を1つずつ遡っているが、例えば、スタックポインタにルートノードの配列番号を指すスタックポインタを代入するステップでこのループを置き換えてもよい。
また、最短一致検索の定義の細部は実施形態によって様々に変形可能である。図7のステップS704で得られた差分ビット位置が、ルートノードとその直下のブランチノードの弁別ビット位置の間の値である場合、図9の処理を変形して、ルートノードの直下のブランチノードを最短一致ノードに設定してもよい。
また、ルートノードの弁別ビット位置が、0より大きく、ステップS704で得られた差分ビット位置より小さい場合、別の変形も可能である。この場合、最短一致検索キーとの差分ビット位置が最も上位なのは、ルートノードからリンクされたノード対のうち、ステップS703の検索で探索経路スタック310に配列番号が格納されなかった方のノードをルートノードとする部分木に含まれるリーフノードに格納されたインデックスキーである。よって、ステップS908の判定が「はい」の場合、ルートノードの弁別ビット位置の値が0より大きければ、ステップS909でスタックポインタを1つだけ進めるように図9の処理を変形してもよい。
また、ステップS704で得られた差分ビット位置がルートノードの弁別ビット位置の
値よりも小さいとき、図9の処理を変形し、ルートノードを最短一致ノードに設定してもよい。
また、ルートノードの弁別ビット位置の値が0より大きく、ステップS704で得た差分ビット位置の値よりも小さければ、ステップS913で取り出した配列番号と対になる配列番号を最短一致ノードの配列番号として設定してもよい。
なお、当然ながら、上記で説明した最長一致/最短一致検索の方法は、プログラムによってコンピュータに実行させることができる。
配列に格納されたカップルドノードツリーの構成例を説明する図である。 カップルドノードツリーのツリー構造を概念的に示す図である。 本発明を実施するためのハードウェア構成例を説明する図である。 ビット列検索の基本動作を示すフローチャートである。 カップルドノードツリーに格納されたインデックスキーの最小値を求める処理を示すフローチャートである。 最長一致検索処理を示すフローチャートである。 最短一致検索処理を示すフローチャートである。 最長一致ノードを取得する処理を示すフローチャートである。 最短一致ノードを取得する処理を示すフローチャートである。 差分ビット位置を取得する処理を示すフローチャートである。 最長一致検索の一例をカップルドノードツリーにより説明する図である。 最短一致検索の一例をカップルドノードツリーにより説明する図である。 従来の検索で用いられるパトリシアツリーの一例を示す図である。
符号の説明
10、20、30 配列番号
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 ノード対
112、122、210a〜210h ノード[0]、代表ノード
113、123、211b〜211h ノード[1]、代表ノードと対をなすノード
118、125、126、250c〜250h、251d〜251h インデックスキー
301 データ処理装置
302 中央処理装置
303 キャッシュメモリ
304 バス
305 主記憶装置
306 外部記憶装置
307 通信装置
308 データ格納装置
309 配列
310 探索経路スタック
1730a〜1730h 検査ビット位置
1740a〜1740f 左リンク
1741a〜1741f 右リンク
1750a〜1750h インデックスキー

Claims (9)

  1. ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いるツリーであって、
    前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、
    前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、
    前記ツリーの任意のノードを検索開始ノードとして、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索の結果である検索結果キーとするように構成されたカップルドノードツリーを用いた最長一致検索方法であって、
    前記カップルドノードツリーの前記ルートノードを前記検索開始ノードとし、指定された最長一致検索キーを前記検索キーとして、前記ルートノードからの経路を記憶しながら前記検索を行って前記検索結果キーを取得する検索ステップと、
    前記最長一致検索キーと前記検索結果キーのビット列を比較して、ビット値が一致しない不一致ビットの位置のうち最も上位の位置である差分ビット位置を取得する差分ビット位置取得ステップと、
    前記差分ビット位置がビット列の最上位以外の位置のとき、記憶された前記経路を参照して最長一致ノードを設定する最長一致ノード設定ステップであって、
    前記ルートノードが前記リーフノードの場合または前記ルートノードが前記ブランチノードであり該ルートノードの前記弁別ビット位置が前記差分ビット位置よりも下位の位置の場合は、前記ルートノードを前記最長一致ノードとして設定し、
    その他の場合は、前記経路上のノードであって前記弁別ビット位置が前記差分ビット位置よりも上位にある前記ブランチノードのうち前記弁別ビット位置が最下位の前記ブランチノードの次に前記検索ステップにおいて記憶された前記ブランチノードまたは前記リーフノードを前記最長一致ノードとして取得する最長一致ノード取得ステップと、
    を備えることを特徴とする最長一致検索方法。
  2. 前記最長一致ノードをルートノードとする前記カップルドノードツリーの部分木に含まれる前記リーフノードを選択し、選択した該リーフノードに含まれるインデックスキーを取得するインデックスキー取得ステップをさらに備えることを特徴とする請求項1に記載の最長一致検索方法。
  3. 前記カップルドノードツリーは、配列に記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であることを特徴とする請求項1に記載の最長一致検索方法。
  4. 前記検索ステップにおいて、前記経路上のノードの格納された前記配列要素の前記配列番号が順次スタックに保持されていくことにより、前記経路が記憶されることを特徴とする請求項3に記載の最長一致検索方法。
  5. ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノードまたはブランチノード同士またはリーフノード同士のノード対、からなるビット列検索に用いる
    ツリーであって、
    前記ルートノードは、ツリーの始点を表すノードであって、該ツリーのノードが1つのときは前記リーフノード、ツリーのノードが2つ以上のときは前記ブランチノードであり、
    前記ブランチノードは、ビット列検索を行う検索キーの弁別ビット位置とリンク先のノード対の一方のノードである代表ノードの位置を示す位置情報を含み、前記リーフノードは検索対象のビット列からなるインデックスキーを含み、
    前記ツリーの任意のノードを検索開始ノードとして、前記ブランチノードにおいて該ブランチノードに含まれる弁別ビット位置の検索キーのビット値に応じてリンク先のノード対の代表ノードかあるいはそれと隣接した記憶領域に配置されたノードにリンクすることを順次前記リーフノードに至るまで繰り返すことにより、前記リーフノードに格納されたインデックスキーを、前記検索開始ノードをルートノードとする前記ツリーの任意の部分木の前記検索キーによる検索の結果である検索結果キーとするように構成されたカップルドノードツリーを用いた最短一致検索方法であって、
    前記カップルドノードツリーの前記ルートノードを前記検索開始ノードとし、指定された最短一致検索キーを前記検索キーとして、前記ルートノードからの経路を記憶しながら前記検索を行って前記検索結果キーを取得する検索ステップと、
    前記最短一致検索キーと前記検索結果キーのビット列を比較して、ビット値が一致しない不一致ビットの位置のうち最も上位の位置である差分ビット位置を取得する差分ビット位置取得ステップと、
    前記差分ビット位置がビット列の最上位以外の位置のとき、記憶された前記経路を参照して最短一致ノードを設定する最短一致ノード設定ステップであって、
    前記経路が、前記ルートノードと、該ルートノードのリンク先の前記ノード対の一方の前記ブランチノードである第一のノードとを含み、前記ルートノードの前記弁別ビット位置が前記差分ビット位置よりも上位の位置の場合は、前記第一のノードのリンク先の前記ノード対のうち、前記経路に記憶されていない方のノードである第二のノードを前記最短一致ノードとして取得する最短一致ノード取得ステップと、
    を備えることを特徴とする最短一致検索方法。
  6. 前記最短一致ノードをルートノードとする前記カップルドノードツリーの部分木に含まれる前記リーフノードを選択し、選択した該リーフノードに含まれるインデックスキーを取得するインデックスキー取得ステップをさらに備えることを特徴とする請求項5に記載の最短一致検索方法。
  7. 前記カップルドノードツリーは、配列に記憶され、前記位置情報は、該位置情報に対応する前記代表ノードが格納された前記配列の配列要素の配列番号であることを特徴とする請求項5に記載の最短一致検索方法。
  8. 前記検索ステップにおいて、前記経路上のノードの格納された前記配列要素の前記配列番号が順次スタックに保持されていくことにより、前記経路が記憶されることを特徴とする請求項7に記載の最短一致検索方法。
  9. 請求項1〜4のいずれか1項に記載の最長一致検索方法または請求項5〜8のいずれか1項に記載の最短一致検索方法をコンピュータに実行させるためのプログラム。
JP2007132289A 2007-04-19 2007-05-18 カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム Expired - Fee Related JP4514771B2 (ja)

Priority Applications (6)

Application Number Priority Date Filing Date Title
JP2007132289A JP4514771B2 (ja) 2007-05-18 2007-05-18 カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム
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,523 US8214405B2 (en) 2007-05-18 2009-10-19 Longest-match/shortest-match search apparatus, search method, and program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007132289A JP4514771B2 (ja) 2007-05-18 2007-05-18 カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム

Publications (3)

Publication Number Publication Date
JP2008287533A true JP2008287533A (ja) 2008-11-27
JP2008287533A5 JP2008287533A5 (ja) 2010-03-11
JP4514771B2 JP4514771B2 (ja) 2010-07-28

Family

ID=40147188

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007132289A Expired - Fee Related JP4514771B2 (ja) 2007-04-19 2007-05-18 カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム

Country Status (2)

Country Link
US (1) US8214405B2 (ja)
JP (1) JP4514771B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012090763A1 (ja) * 2010-12-28 2012-07-05 株式会社エスグランツ コード列検索装置、検索方法及びプログラム
CN103544191A (zh) * 2012-07-17 2014-01-29 人人游戏网络科技发展(上海)有限公司 一种用于读取缓存数据的方法和设备
CN108616403A (zh) * 2018-05-09 2018-10-02 马鞍山优途网络科技有限公司 一种基于云计算的资源管理系统
CN109783206A (zh) * 2019-01-04 2019-05-21 智恒科技股份有限公司 一种用于描述大数据任务流整体结构的方法

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8429526B2 (en) * 2006-04-10 2013-04-23 Oracle International Corporation Efficient evaluation for diff of XML documents
US8527546B2 (en) 2010-11-25 2013-09-03 International Business Machines Corporation Generating a checkpoint image for use with an in-memory database
US9155320B2 (en) 2011-07-06 2015-10-13 International Business Machines Corporation Prefix-based leaf node storage for database system
KR101341507B1 (ko) * 2012-04-13 2013-12-13 연세대학교 산학협력단 수정된 b+트리 노드 검색 방법 및 장치
EP2945071B1 (en) * 2013-01-11 2020-08-26 NEC Corporation Index generating device and method, and search device and search method
US9817852B2 (en) * 2014-08-28 2017-11-14 Samsung Electronics Co., Ltd. Electronic system with version control mechanism and method of operation thereof
CN105817029B (zh) * 2016-03-14 2019-09-03 安徽大学 六子棋博弈系统中基于路和棋型的混合搜索方法
KR102195836B1 (ko) * 2019-02-07 2020-12-28 주식회사 티맥스티베로 인덱스 관리 방법
US20230195705A1 (en) * 2021-12-20 2023-06-22 Sap Se Branching for tree structure in database system

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001357070A (ja) * 2000-06-13 2001-12-26 Nec Corp 情報検索方法及び装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3887867B2 (ja) * 1997-02-26 2007-02-28 株式会社日立製作所 構造化文書の登録方法
US6029170A (en) * 1997-11-25 2000-02-22 International Business Machines Corporation Hybrid tree array data structure and method
JP3368237B2 (ja) * 1999-04-14 2003-01-20 キヤノン株式会社 コード処理方法、端末装置及び記憶媒体
US6662184B1 (en) * 1999-09-23 2003-12-09 International Business Machines Corporation Lock-free wild card search data structure and method
US6675163B1 (en) * 2000-04-06 2004-01-06 International Business Machines Corporation Full match (FM) search algorithm implementation for a network processor
US6594655B2 (en) * 2001-01-04 2003-07-15 Ezchip Technologies Ltd. Wildcards in radix- search tree structures
US6785699B1 (en) * 2001-05-04 2004-08-31 Lsi Logic Corporation Prefix comparator
JP3691018B2 (ja) 2002-01-31 2005-08-31 日本電信電話株式会社 最長一致検索回路および方法およびプログラムおよび記録媒体
US6934252B2 (en) * 2002-09-16 2005-08-23 North Carolina State University Methods and systems for fast binary network address lookups using parent node information stored in routing table entries
US6915300B1 (en) * 2003-12-19 2005-07-05 Xerox Corporation Method and system for searching indexed string containing a search string
JP2006293619A (ja) 2005-04-08 2006-10-26 Toshiba Tec Corp コンピュータ装置及びログ出力プログラム
JP4271227B2 (ja) 2006-10-30 2009-06-03 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム
JP4271214B2 (ja) 2006-07-07 2009-06-03 株式会社エスグランツ ビット列検索装置、検索方法及びプログラム

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001357070A (ja) * 2000-06-13 2001-12-26 Nec Corp 情報検索方法及び装置

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012090763A1 (ja) * 2010-12-28 2012-07-05 株式会社エスグランツ コード列検索装置、検索方法及びプログラム
JP2012141760A (ja) * 2010-12-28 2012-07-26 S Grants Co Ltd コード列検索装置、検索方法及びプログラム
CN103544191A (zh) * 2012-07-17 2014-01-29 人人游戏网络科技发展(上海)有限公司 一种用于读取缓存数据的方法和设备
CN108616403A (zh) * 2018-05-09 2018-10-02 马鞍山优途网络科技有限公司 一种基于云计算的资源管理系统
CN109783206A (zh) * 2019-01-04 2019-05-21 智恒科技股份有限公司 一种用于描述大数据任务流整体结构的方法
CN109783206B (zh) * 2019-01-04 2022-12-13 智恒科技股份有限公司 一种用于描述大数据任务流整体结构的方法

Also Published As

Publication number Publication date
US8214405B2 (en) 2012-07-03
JP4514771B2 (ja) 2010-07-28
US20100042597A1 (en) 2010-02-18

Similar Documents

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

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100120

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100120

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20100120

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20100210

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100223

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100416

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20100511

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100511

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20130521

Year of fee payment: 3

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

Free format text: PAYMENT UNTIL: 20130521

Year of fee payment: 3

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

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

Free format text: PAYMENT UNTIL: 20130521

Year of fee payment: 3

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees