JP5473893B2 - コード列検索装置、検索方法及びプログラム - Google Patents
コード列検索装置、検索方法及びプログラム Download PDFInfo
- Publication number
- JP5473893B2 JP5473893B2 JP2010293635A JP2010293635A JP5473893B2 JP 5473893 B2 JP5473893 B2 JP 5473893B2 JP 2010293635 A JP2010293635 A JP 2010293635A JP 2010293635 A JP2010293635 A JP 2010293635A JP 5473893 B2 JP5473893 B2 JP 5473893B2
- Authority
- JP
- Japan
- Prior art keywords
- node
- code string
- search
- bit
- key
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 221
- 230000008569 process Effects 0.000 claims description 173
- 239000000470 constituent Substances 0.000 claims 2
- 238000012545 processing Methods 0.000 description 99
- 238000003780 insertion Methods 0.000 description 45
- 230000037431 insertion Effects 0.000 description 45
- 238000012217 deletion Methods 0.000 description 26
- 230000037430 deletion Effects 0.000 description 26
- 238000010586 diagram Methods 0.000 description 19
- 241000712062 Patricia Species 0.000 description 6
- 238000013500 data storage Methods 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 238000007726 management method Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
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)
Description
この検索対象文字列10を検索文字列40a「ABEABC」で検索すると、検索文字列40aに前方一致する検索対象文字列は「A」、「AB」、「ABEAB」となる。それらのうち最長の検索対象文字列は「ABEAB」なので、「ABEAB」が最長一致検索の検索結果文字列50aである。
さらに、検索対象文字列10を検索文字列40c「AB」で検索すると、前方一致する検索対象文字列は上と同じ「A」、「AB」となる。そのうち最長の検索対象文字列は「AB」であるので、上記と同じ「AB」が検索結果文字列50bである。
パトリシアツリーを用いた検索処理では、必要なビットの検査だけで検索できること、キー全体の比較は1回ですむことなどのメリットがあるが、各ノードから2つのリンクが必ずあることによる記憶容量の増大、バックリンクの存在による判定処理の複雑化、バックリンクにより戻ることで初めてインデックスキーと比較することによる検索処理の遅延及び追加削除等データメンテナンスの困難性などの欠点がある。
特許文献2及び特許文献3に開示されたカップルドノードツリーは、リンク先のデータを有するブランチノードと検索対象であるインデックスキーを有するリーフノードを備える。そしてそのツリー構造は、ルートノードと、隣接した記憶領域に配置されるブランチノードとリーフノード、ブランチノード同士又はリーフノード同士のノード対から構成される。
検索キーの弁別ビット位置は、検索キーのその位置のビット値を用いる点ではパトリシアツリーの検査ビット位置と同様であるが、パトリシアツリーでは検査ビット位置のビット値を判定してリンク先を求めるのに対して、カップルドノードツリーでは弁別ビット位置のビット値をリンク先のノードを求める演算に用いる点で異なる。
リーフノードに至ると、リーフノードの保持するインデックスキーを取り出す。取り出したインデックスキーと検索キーを比較し、一致すれば検索は成功し、一致しなければ、検索対象のインデックスキーには検索キーと一致するものはなかったので検索は失敗とすることができる。また、単に、取り出したインデックスキーを検索結果キーとすることもできる。
なお、以下の説明においては、記載を簡略化するため、リーフノードがインデックスキーに替えて参照ポインタを含むものであっても、インデックスキーを含むリーフノード、リーフノードに含まれるインデックスキーということがある。また、インデックスキーを含むリーフノードを有するカップルドノードツリーについて、インデックスキーが格納されたカップルドノードツリー、あるいはカップルドノードツリーに格納されたインデックスキーのような表現を用いることがある。さらに、リーフノードがインデックスキーを含む場合及びインデックスキーへの参照ポインタを含む場合の双方について、リーフノードに係るインデックスキー、あるいはインデックスキーに係るリーフノードということがある。
配列番号30及び31の配列要素に格納されたノード122とノード123からなるノード対121の内容は省略されている。
カップルドノードツリーを用いた検索においては、前段のブランチノードの弁別ビット位置にある検索キーのビット値である“0”か“1”に応じて[0]側のノードあるいは[1]側のノードにリンクする。したがって、前段のブランチノードの代表ノード番号に、検索キーの弁別ビット位置のビット値を加えることにより、リンク先のノードが格納された配列要素の配列番号を求めることができる。
なお、上記の例では代表ノード番号としてノード対の配置された配列番号のうち小さい方を採用しているが、大きいほうを採用することも可能であることは明らかである。
本発明においては、文字に限らず任意の記号や項目などを識別するために用いられるコードからなるコード列を対象とする。そして、本発明においては、コード列そのものを直接取り扱うのではなく、コード列に含まれる各コードを符号化した符号化コードの列を取り扱う。先に述べたように、各コードは、後続するコードが存在するか否かを示す識別ビットと各コードをビット表現した複数のビットを組み合わせることで符号化される。本発明においては、コード列の各コードを符号化した符号化コードの列である符号化コード列により検索等の処理を行う。
図2に示す例では、「A」、「B」、「C」、「D」、「E」、「F」及び「G」の各コード、並びに、コード列の終端を示すコード「*」の8種類のコードが存在するものとしている。各コードはそれぞれ複数のビットからなるビット列で表現されており、この例では、それぞれ、コード表13に示される3ビットの値で表現されている。
なお、コード「*」は、後の説明から理解されるように、先に述べた長さが0である無意のコードと等価なものである。
前記コード列50「ABEAB*」は、前記コード表13に記載されたコードのビット値により、図中60で示すビット表現されたコード列となる。この例では、ビット表現されたコード列60は、“001 010 101 001 010 000”である。
このようにして、前記コード列50は、1ビットの有意コード識別ビット73aと有意の各コードのビット値(3ビット)72からなる4ビットの符号化コード74と終端を示す無意コード識別ビット73bから構成される符号化コード列70に符号化される。以下の説明においては、ビット表現された符号化コード列を符号化ビット列という場合もある。
なお、符号化コード列の長さを示す「符号化ビット長」には、終端を示す無意コード識別ビット73bを含まないものとする。したがって、図2に示すように、コード列50を符号化した符号化コード列70の符号化ビット長は20ビットである。
なお、上記においては有意コード識別ビットの値を“1”、無意コード識別ビットの値を“0”としたが、逆にしてもよい。さらに、複数ビットからなる識別ビットを用いるようにしてもよい。
本発明においては、検索対象コード列を上記符号化方法で符号化した符号化ビット列であるインデックスキーの集合によりカップルドノードツリーを構成し、コード列からなる検索キーを上記符号化方法で符号化した符号化ビット列である符号化検索キーを用いて検索等の処理を行う。
図3は、カップルドノードツリーのツリー構造を概念的に示す図である。ここでは、検索対象コード列「BEAB*」、「BAB*」、「ABEAB*」、「AB*」、「A*」及び「*」を符号化したインデックスキーを格納するカップルドノードツリー200を例にとって説明する。これらのコード列は、前記図1Aに示した例の各コード列にコード列の終端を示すものとして無意のコード「*」を付加し、さらにコード列として、コード「*」のみからなるコード列が加えられている。
ここで、カップルドノードツリー200が、無意のコード「*」のみからなるコード列も含むようにしている理由は、後に詳細に説明する最長一致検索において、検索キーに前方一致する検索対象コード列が1つも存在しないことがないようにするためである。
もちろん、検索キーに前方一致する検索対象コード列が1つも存在しないことを許容し、カップルドノードツリー200が、無意のコード「*」のみからなるコード列を含まないようにすることも可能である。
カップルドノードツリー200が、無意のコード「*」のみからなるコード列も含むようにすることにより、どのような検索キーで検索しても、必ず検索結果キーを得ることができることについては、後の最長一致検索の説明において詳細に説明する。
ツリー構造としては、ルートノード210aの下にノード対201bが配置され、その下層にノード対201cが配置され、さらにその下層にノード対201dとノード対201fが配置され、ノード対201dの下層にはノード対201eが配置されている。
各ノードの前に付された“0”あるいは“1”の符号は、図1Bに関して前述した配列要素の前に付された符号と同じである。
ノード対201bはノード210bと211bで構成されている。ノード210bのノード種別260bには“1”が格納されているので、このノードはリーフノードであり、参照ポインタ250bを含んでいる。参照ポインタ250bには、コード列の格納領域311における、無意のコード「*」のみからなるコード列290bが格納されている領域を参照するポインタが格納されている。先に述べたように、参照ポインタ250bに格納されているポインタも参照ポインタといい、符号280bで表す。他のリーフノードについても同様に、参照ポインタに格納されたポインタを参照ポインタと呼ぶ。なお、参照ポインタ250bの近傍に記載された0は参照ポインタ280bで参照されるコード列を符号化した符号化コード列のビット表現であり、(*)は、そのビット表現がコード列「*」のビット表現であることを示している。他のリーフノードにおいても同様である。以下の説明においては、任意のコード列「ABC」に対して、そのビット表現を(ABC)と表記することがある。
ノード対201cはノード210cとノード211cで構成され、それらのノード種別260c、216cはともに“0”であり、プランチノードであることを示している。ノード210cの弁別ビット位置230cは“4”であり、代表ノード番号にはノード対201dの代表ノード210dの格納された配列要素の配列番号220cが格納されている。
ノード210dのノード種別260dには“1”が格納されているので、このノードはリーフノードであり、参照ポインタ250dには、符号290dで示すコード列「A*」が格納されている領域を指す参照ポインタ280dが格納されている。
ノード対201eはノード210eとノード211eで構成され、それらのノード種別260e、261eはともに“1”であり、双方ともリーフノードであることを示している。ノード210eの参照ポインタ250eには、符号290eで示すコード列「AB*」が格納されている領域を指す参照ポインタ280eが格納されており、ノード211eの参照ポインタ251eには符号291eで示すコード列「ABEAB*」が格納されている領域を指す参照ポインタ281eが格納されている。
ノード対201fはノード210fとノード211fで構成され、それらのノード種別260f、261fはともに“1”であり、双方ともリーフノードである。ノード210fの参照ポインタ250fには符号290fで示すコード列「BAB*」が格納されている領域を指す参照ポインタ280fが格納されており、ノード211fの参照ポインタ251fには符号291fで示すコード列「BEAB*」が格納されている領域を指す参照ポインタ281fが格納されている。
図3に示したカップルドノードツリー200における検索対象コード列と、各検索対象コード列を前記図2に関して説明した符号化方法により符号化した符号化ビット列(インデックスキー)は次の表1のようになる。
符号化ビット列のなかに、2ビット目のビット値が互いに異なるものがあることから、符号化ビット列の0ビット目の値が“1”のときのリンク先であるブランチノード211bの弁別ビット位置231bの値は“2”であり、符号化ビット列の2ビット目の値が“0”のときはノード対201cの代表ノード210cにリンクし、“1”のときはノード211cにリンクしている。
上記ブランチノード211bでの分岐をコード列の観点からみると、該分岐は、検索対象コード列中のコード列には、1番目のコード位置に位置するコードが「A」であるものと「B」であるものが存在することを反映している。以下の説明において、ブランチノード211bのように、その弁別ビット位置の値が識別ビットの位置と一致しないブランチノードをコード弁別ブランチノードということがある。なお、上述の例では、コード弁別ブランチノード211bにおいて、1番目のコードが「A」であるコード列と「B」であるコード列のように1番目のコードが完全に弁別されて分岐が行われるが、一般には、コード弁別ブランチノードでコードが完全に弁別されて分岐が行われるわけではない。
すなわち、カップルドノードツリーにインデックスキーの差分情報が登録されているということができる。
そして、インデックスキーの先頭に近いビット位置から順に、互いに異なるビット値となるビット位置ごとに、ビット値が“1”のノードとビット値が“0”のノードに分岐している。また、符号化によりコード列の大小関係が変わることはない。このことから、ノード[1]側とツリーの深さ方向を優先させてリーフノードをたどり、そのリーフノードに格納されている参照ポインタにより参照される検索対象コード列を見ると、検索対象コード列は降順にソートされている。
さらに、上記ノード[0]に係るコード列は、該ノード[0]と対をなす[1]側の子ノード以下に配置されたリーフノードに係るコード列に前方一致する。
なお、上述のコード列区切りブランチノードの子ノードのうちノード[0]はリーフノードであるという事項は、コード「*」を“0”と符号化することと対応している。コード「*」を“1”と符号化すると、コード列区切りブランチノードの子ノードのうちノード[1]がリーフノードとなることは明らかである。そこで、コード列区切りブランチノードの子ノードのうち、後続するコードが存在しないことを示すビット値により分岐するリーフノードをコード列終端側ノードあるいはコード列終端側子ノードといい、それと対をなすノードをコード列連結側ノードあるいはコード列連結側子ノードという。すると、コード列終端側ノードは、リーフノードである。また、コード列終端側ノードに係るコード列は、該コード列終端側ノードと対をなすコード列連結側ノード以下に配置されたリーフノードに係るコード列に前方一致する。さらに、コード列終端側ノードに係るコード列の長さは、該コード列終端側ノードと対をなすコード列連結側ノード以下に配置されたリーフノードに係るコード列の長さより短いことは明らかである。
本発明のコード列検索装置による検索処理及びデータメンテナンスは中央処理装置302及びキャッシュメモリ303を少なくとも備えたデータ処理装置301によりデータ格納装置308を用いて実施される。カップルドノードツリーが配置される配列309、検索中にたどるノードが格納された配列要素の配列番号を記憶する探索経路スタック310及びコード列の格納領域311を有するデータ格納装置308は、主記憶装置305又は外部記憶装置306で実現することができ、あるいは通信装置307を介して接続された遠方に配置された装置を用いることも可能である。図1Bの配列100は、配列309の一例である。
また、特に図示されてはいないが、処理の途中で得られた各種の値を後の処理で用いるためにそれぞれの処理に応じた一時記憶装置が用いられることは当然である。
ステップS505の判定において、読み出したノードがブランチノードである場合は、ステップS506に進み、ノードから弁別ビット位置についての情報を取り出し、更に、ステップS507で、取り出した弁別ビット位置に対応するビット値を符号化検索キーから取り出す。そして、ステップS508で、ノードから代表ノード番号を取り出して、ステップS509で、符号化検索キーから取り出したビット値と代表ノード番号とを加算し、新たな配列番号として、ステップS502に戻る。
このように、リーフノードに到達したときに検索が終了し、検索中に前記リーフノードに至るまでにたどったブランチノードが格納された配列要素の配列番号が順次、探索経路スタックに格納される。
次にステップS603において、ステップS602で作成した符号化コード列を符号化検索キーに設定し、ステップS602で得た符号化コード列の符号化ビット長を符号化検索キーの符号化ビット長に設定する。
上述のステップS601とステップS603の処理は、ステップS602の符号化処理を図7に示す各種コード列に共通な符号化処理を検索キーに適用するためのものである。図7に示す共通な符号化処理を用いることに替えて、図7に示す処理を検索キーの符号化処理用のもののように特定のコード列の符号化に変更して符号化処理を行うことも可能である。以下の符号化処理の説明においては、そのような場合についても、図7に示す処理フローにより実現されると表記する場合がある。
この符号化処理は、図6のステップS602及び後に説明する図9BのステップS902において実行される処理である。
次に、ステップS702に進み、コード列中のコードのうち次に処理すべきコードの位置を示すコード位置を初期化する。本実施の形態では第0番目のコードから順に処理するために、コード位置を“0”に初期化する。
そして、ステップS703において、この符号化処理により生成される符号化コード列の符号化コードが格納される符号化コードの格納位置を初期値にセットする。
そして、ステップS706aで、符号化コードに、後続するコードが存在することを示す識別ビット(この例では、“1”)を設定する。
次に、ステップS706bで、該符号化コードの末尾に前記ステップS705で得たコードのビット値を連結する。
続いて、ステップS707で、符号化コード列の符号化コードの格納位置の指す位置に、ステップS706bでビット値が連結された符号化コードを格納する。
そして、ステップS708aでコード位置を次のコード位置に進め、ステップS708bで符号化コードの格納位置を次の符号化コードの格納位置に進めて、前記ステップS704に戻る。図2に示す例では、次の符号化コードの格納位置は、識別ビット分の1ビットとコードのビット長分の3ビットの和である4ビット分進められる。
そして、ステップS710で符号化ビット長に符号化コードの格納位置を設定して、処理を終了する。
以上の処理により、設定されたコード列から前記図2に示した符号化方法により符号化された符号化コード列と、その符号化ビット長を得ることができる。
また、本実施の形態では、図7に例示するようにコード列を構成する全てのコードを一括して符号化しているが、検索キーであるコード列が検索対象コード列に比べて長いものである場合には、検索処理において、探索経路上のブランチノードの弁別ビット位置の範囲までのコードを逐次符号化してもよい。
図8Aは、符号化検索キーによる初期検索の流れを概念的に示す図である。図8Aには、符号化検索キー270と図3に示すカップルドノードツリー200の一部と探索経路スタック310が記載されている。
符号化検索キー270には、検索キー「ACE*」を符号化した符号化検索キー(ACE*)である符号化ビット列
“1001101111010”(以下、符号化検索キー70ということもある。)が格納されている。
カップルドノードツリー200のノード211cより下位の部分は省略され、符号化検索キー70でルートノード210aから初期検索を行ったときの探索経路が太線の枠と矢印で示されている。
図8Bは、前記図6のステップS605の処理の詳細を示すものであり、符号化検索キーによる初期検索の処理フロー例を説明する図である。
まず、ステップS801において、探索経路スタック310のスタックポインタの値を初期値に設定する。この初期値は、探索経路スタック310に何も格納されていないときの値である。本実施の形態の図8Bの処理におけるスタックポインタは、後述のステップS813において次の配列番号を格納する探索経路スタック310上の位置を示すものとして以下では説明する。
次に、ステップS803で、カップルドノードツリーのノードを格納する配列から、配列番号の指す配列要素をノードとして読み出す。
そして、ステップS804で、ステップS803で読み出したノードからノード種別の情報を取り出し、ステップS805で、そのノードがブランチノードであるか否かを判定する。
そして、ステップS807で、取り出した弁別ビット位置に対応するビット値を符号化検索キーから取り出し、ステップS808で、そのノードから代表ノード番号の情報を取り出す。
なお、前述のように、識別ビットの位置は符号化方法に依存する。前記図2に示した例のように固定長コードの場合には、計算等により識別ビットの位置を求めることができるが、可変長コードの場合には、弁別ビット位置により識別ビットと可変長コードの位置をマップしたビットマップを索引する方法などを用いても良い。
この場合は、ステップS813に進んで、ステップS803で読み出したノードの配列番号を親ノードの配列番号として探索経路スタック310に格納する。
続いてステップS814で、ステップS808で取り出した代表ノード番号に1を加えた値を新たな配列番号として設定する。
そして、ステップS815で、ステップS814で得た配列番号を子ノードの配列番号として探索経路スタック310に格納し、スタックポインタの値を1つ増やしてから、ステップS803に戻る。
すなわち、本実施の形態における探索経路スタック310には、スタックポインタの一つの値により指定される記憶場所に、コード列区切りブランチノードの配列番号と、そのコード列区切りブランチノードの子ノードのうちコード列連結側ノードの配列番号の2つの配列番号からなる組が格納される。
また、コード列終端側ノード自体、あるいはコード列終端側ノードから取り出した参照ポインタあるいは参照ポインタの指すコード列を探索経路スタック310に格納する実施の形態も可能である。
いずれにしろ、ステップS815の処理は、コード列終端側ノードに係る検索対象コード列にアクセスするための情報を探索経路スタックに格納する処理ということができる。
以降、ステップS805の判定においてリーフノードと判定されるまで、ステップS803からステップS815までのループ処理を繰り返す。このループ処理においては、ステップS809又はステップS814で設定された配列番号がステップS803で使われる。
図9Aは最長一致検索の処理の流れを概念的に示す図である。図9Aには、図8Aと同様にカップルドノードツリー200、符号化検索キー270及び探索経路スタック310が記載されており、図8Aに例示する初期検索が終了した後の最長一致検索の流れが概念的に示されている。
すなわち、探索経路スタックから順次親ノードの配列番号を読み出して該配列番号の指す配列要素に配置されたコード列区切りブランチノードから弁別ビット位置を取り出す。そして、該弁別ビット位置が上記差分ビット位置と等しいかあるいは上位の位置関係であれば、該コード列区切りブランチノードのコード列終端側子ノードの参照ポインタの指すコード列を最長一致キーとする。
図9Aの太線の矢印で示す弁別ビット位置探索は、上述の差分ビット位置と等しいかあるいは上位の位置関係にある弁別ビット位置を探索する処理の流れを示すものである。
また、図9Aの太線の矢印で示す最長一致キー決定は、弁別ビット位置が差分ビット位置と上述の位置関係にあるコード列区切りブランチノードのコード列終端側子ノードの参照ポインタの指すコード列を最長一致キーとする処理の流れを示すものである。
最初に、以下の説明のため、用語の定義を行う。
初期検索において、探索経路スタックに、親ノードの配列番号として格納された配列番号のコード列区切ブランチノードのコード列終端側子ノードに係るコード列を、初期検索の探索経路のコード列という。図8Aに示す例では、初期検索の探索経路のコード列は、「*」、「A*」「AB*」である。
以上のとおりであるから、上述の手法により求められた最長一致キーが、検索対象コード列のうち検索キーに前方一致する最長のコード列である。
図9Bは、最長一致検索の初段の処理フロー例を説明する図である。図9Bに示す初段の処理の内容は、インデックスキーを初期検索の検索結果コード列を符号化したものから符号化ビット長の短いものに順次更新し、該インデックスキーの符号化ビット長を符号化検索キーの符号化ビット長以下のものとすることにより、符号化検索キーに前方一致することのないインデックスキーを図9C以下の処理で扱わないようにするものである。
上述のステップS901とステップS903の処理は、図6におけるステップS601とステップS603の処理と同様に、ステップS902の符号化処理を図7に示す各種コード列に共通な符号化処理を検索キーに適用するためのものである。図6の場合と同様に、図7に示す共通な符号化処理を用いることに替えて、図7に示す処理をインデックスキーの符号化処理用のもののように特定のコード列の符号化に変更して符号化処理を行うことも可能である。
なお、ステップS901の最初の処理で設定されたコード列を初期検索の検索結果コード列ということがある。また、ステップS902とステップS903の最初の処理において設定されるインデックスキーを、初期検索で得られたインデックスキーということがある。
インデックスキーの符号化ビット長が符号化検索キーの符号化ビット長以下でなければ、すなわち符号化前の検索対象コード列のコード数が検索キーのコード数より大きければ、その検索対象コード列が検索キーに前方一致することはない。
そこでステップS904の判定が否定的なものであると、ステップS905〜ステップS909の処理を行ってステップS901に戻り、初期検索の探索経路のコード列に順次アクセスすることを、ステップS904での判定が肯定的になるまで繰り返す。
次に、ステップS907で、前記読み出した子ノードの配列番号と対をなす配列番号を得る。そしてステップS908に進み、カップルドノードツリーのノードを格納する配列から、ステップS907で得た配列番号の指す配列要素をノードとして読み出す。
続いて、ステップS909で、ステップS908で読み出したノードから参照ポインタを取り出して、ステップS901に戻る。ステップS901の2回目以降の処理においては、参照ポインタは、ステップS909で取り出されたものである。
また、初期検索において、コード列終端側ノードを探索経路スタックに格納する場合には、ステップS905において、探索経路スタックからスタックポインタの指すコード列終端側ノードを読み出し、ステップS907〜ステップS908をスキップし、ステップS909において、ステップS905で読み出したコード列終端側ノードから参照ポインタを取り出して、ステップS901に戻ることになる。
さらに初期検索において、探索経路スタックに参照ポインタが格納される場合、あるいは検索対象コード列が格納される場合に図9Bの処理フローをどのように変更すればよいかは以上の説明から当業者に明らかである。
図9Aの例示では、ステップS904の最初の判定時にはインデックスキーの符号化ビット長は20であり、符号化検索キーの符号化ビット長は12であるから、判定は否定的となる。したがって、ステップS905〜ステップS909及びステップS901の処理により初期検索の探索経路上のコード列「AB*」が読み出される。そのコード列を符号化したインデックスキー(AB*)の符号化ビット長は8であるから、2回目のステップS904における判定は肯定的なものになり、図9CのステップS910に進む。探索経路スタック310のスタックポインタは、ステップS906の処理により、配列番号221bを指している。
そして、ステップS911で、符号化検索キーとインデックスキーのビット値が、前記比較ビット長の範囲において等しいか否かを判定する。これは、検索キーと検索結果コード列が検索結果コード列の長さの範囲で一致するか否かを判定することに相当する。この判定の結果、符号化検索キーとインデックスキーが比較ビット長の範囲、すなわちインデックスキーの符号化ビット長の範囲で一致している場合(前方一致)は、ステップS911aに進み、そのインデックスキーに符号化されたコード列を検索結果コード列に設定して処理を終了する。この検索結果コード列が検索キーに最長一致するコード列である。
ステップS912では、符号化検索キーとインデックスキーを比較ビット長の範囲でビット比較して、比較ビット長の差分ビット列を得る。差分ビット列は、例えば、符号化検索キーとインデックスキーで値が一致する位置のビットは値が“0”で、一致しない位置のビットは値が“1”となるビット列であり、例えば符号化検索キーとインデックスキーの排他的論理和演算によって得ることができる。
そして、差分ビット位置には、“7”が設定される。
図に示すように、ステップS913において、探索経路スタックから配列番号を取り出して、スタックポインタを1つ戻す。そして、ステップS914で、配列から配列番号の指す配列要素をノードとして読み出し、ステップS915において、該ノードから弁別ビット位置を取り出す。
次に、ステップS918で、該子ノードの配列番号と対をなすノードの配列番号を得て、ステップS919で、該対をなすノードの配列番号の指すノードを読み出す。
そして、ステップS920で、該ノードから参照ポインタを取り出し、ステップS921で、コード列の格納領域311から、参照ポインタの指すコード列を読み出して、検索結果コード列に設定する。
また、初期検索において、コード列終端側ノードを探索経路スタックに格納する場合には、ステップS917において、探索経路スタックからスタックポインタの指すコード列終端側ノードを読み出し、ステップS918〜ステップS919をスキップし、ステップS920において、ステップS917で読み出したコード列終端側ノードから参照ポインタを取り出すことになる。
さらに初期検索において、探索経路スタックに参照ポインタが格納される場合、あるいは検索対象コード列が格納される場合に図9Dの処理フローをどのように変更すればよいかは以上の説明から当業者に明らかである。
以下説明する具体例のカップルドノードツリーは、図3に例示したものである。符号化検索キーは、3つのタイプのものが例示される。図11Aに示す例では、符号化検索キーとして、(ABEABC*)が用いられる。図11B、図11Cに示す例では、それぞれ符号化検索キーとして、(ACEABC*)、(ACE*)が用いられる。それぞれの符号化検索キーによる初期検索の結果は図9Aの例示と同一である。
探索経路スタック310には、図11A、図11B、図11Cに示す例の符号化検索キーによる初期検索の結果、図9Aに示すものと同一の配列番号が格納されている。
点線の矢印でそれぞれ示すように、配列番号220c+1と符号61cで示すインデックスキー(A*)が対応し、図9Bに示すステップS905で配列番号220c+1が読み出されると、ステップS903において、(A*)すなわち“10010”がインデックスキーに設定され、配列番号221d+1と符号61bで示すインデックスキー(AB*)が対応し、図9Bに示すステップS905で配列番号221d+1が読み出されると、ステップS903において、(AB*)すなわち“100110100”がインデックスキーに設定される。また、太線の矢印で示すように、スタックポインタは、親ノードの配列番号220c+1を指す。
先に述べたように、符号化検索キー51aは、検索キー「ABEABC*」を符号化した(ABEABC*)である。ビット表現では、“1001101011011001101010110”となり、その符号化ビット長52aは24ビットとなる。
先に述べたように、符号化検索キー51bは、検索キー「ACEABC*」を符号化した(ACEABC*)である。ビット表現では、“1001101111011001101010110”となり、その符号化ビット長52bは24ビットとなる。
ビット列比較2(92b)には、符号化検索キー51bとインデックスキー61bのビット位置のうち差分ビット位置72bに該当するビット位置を示す矢印と、インデックスキー61bのビット位置のうちその値が“8”である弁別ビット位置81bに該当するビット位置を示す矢印が記載されている。
ビット列比較3(93b)には、インデックスキー61bのビット位置のうちその値が“4”である弁別ビット位置81bに該当するビット位置を示す矢印と、インデックスキー61cの、弁別ビット位置81cより上位に位置する有意のコードを符号化した部分が、符号化検索キー51bに前方一致することを示す矢印とが記載されている。
先に述べたように、符号化検索キー51cは、検索キー「ACE*」を符号化した(ACE*)である。ビット列表現では、“1001101111010”となり、その符号化ビット長52cは12ビットとなる。
ビット列比較2(92c)においては、まずステップS904で、インデックスキー61bの符号化ビット長62bは、符号化検索キー51cの符号化ビット長62aより短いことが判定される。そこで、ステップS910の処理により、インデックスキー61bの符号化ビット長62bが比較ビット長71cに設定される。
また、ビット列比較2(92c)には、符号化検索キー51cとインデックスキー61bのビット位置のうち差分ビット位置72cに該当するビット位置を示す矢印と、インデックスキー61bのビット位置のうちその値が“8”である弁別ビット位置81bに該当するビット位置を示す矢印が記載されている。
まず、ステップS1201で、カップルドノードツリーに挿入するコード列(挿入キー)を記憶した記憶領域のポインタを取得する。
すなわち、ステップS1205に進み、配列から空きのノード対を求め、そのノード対のうち代表ノードとなるべき配列要素の配列番号を取得する。
次に、ステップS1206において、ステップS1205で得た配列番号に値“0”を加えた配列番号を求める(本実施の形態では、ステップS1205で取得した配列番号に等しい配列番号がここで得られるので、ステップS1206は省略可能である)。
そして、ステップS1208で、ステップS1206で取得した配列番号をルートノードの配列番号としてカップルドノードツリーの管理手段に登録して、図12の処理を終了する。
次に、ステップS1310aに進み、符号化検索キーにより、前記検索開始ノードからカップルドノードツリーが格納された配列を検索し、参照ポインタを得る。この処理は、前記図5示す基本検索処理により実現される。
このステップS1312において、配列から空きのノード対を求め、そのノード対のうち代表ノードとなるべき配列要素の配列番号を取得する。
次に、ステップS1313に進み、符号化挿入キーとステップS1310cで作成したインデックスキーの大小を比較し、符号化挿入キーの方が大きいときは値“1”(真)、小さいときは値“0”(偽)のブール値を得る。
続いて、ステップS1315に進み、ステップS1312で得た代表ノードの配列番号にステップS1313で得たブール値をビット反転した値(ブール値の論理否定値)を加算した配列番号を得る。この配列番号は、挿入キーが記憶されている記憶領域を指す参照ポインタを保持するリーフノードと対を成すノードが格納される配列要素の配列番号となる。
すなわち、図13Aに示した検索処理で得られたリーフノードに格納された参照ポインタにより参照されるコード列を符号化して得られるインデックスキーと符号化挿入キーとの大小比較の結果により、挿入されるノード対のうちどちらのノードが、挿入キーが記憶されている記憶領域を指す参照ポインタを保持するリーフノードとされるかが決定される。
次に、図13Cに示すステップS1316以降の処理に進む。
そして、ステップS1318において、探索経路スタック310のスタックポインタがルートノードの配列番号を指しているか否かを判定する。ルートノードの配列番号を指していればステップS1324に進み、指していなければステップS1319に進む。
最後にステップS1328において、ステップS1324で得た配列番号の指す配列要素のノード種別に“0”(ブランチノード)を、弁別ビット位置にステップS1317で得たビット位置を、代表ノード番号にステップS1312で得た配列番号を書き込み、処理を終了する。
このように、ステップS1324以下の処理で、各ノードにデータを設定して挿入処理が完成する。
まず、ステップS1401で、カップルドノードツリーから削除するコード列(削除キー)を削除コード列に設定する。次に、ステップS1402で、削除コード列を符号化して符号化削除キーを作成する。ステップS1402における符号化処理は、図7に示す処理フローにより実現可能である。
次にステップS1414において、ステップS1413で得た配列番号の配列要素の内容を配列から読み出し、ステップS1415において探索経路スタックのスタックポインタを1つ戻して配列番号を取り出す。
最後にステップS1417においてステップS1405でコールしている図5のステップS508で得た代表ノード番号の指すノード対を削除して、削除処理を終了する。
そこで、本発明に係るコード列検索装置の機能構成について、以下に説明する。
図15に示すように、コード列検索装置500は、図4に例示するデータ処理装置301により実現される初期検索部510と最長一致検索部520、及びカップルドノードツリー200が配置される配列309、探索経路スタック310、コード列の格納領域311が設けられたデータ格納装置308を含む。
検索対象文字列
13
コード表
50
コード列
60
コード列(ビット表現)
70
符号化コード列(ビット表現)
100 配列
101 ルートノード
102、114、117、124、126 ノード種別
103、115 弁別ビット位置
104、116 代表ノード番号
111、121 ノード対
118 参照ポインタ
200
カップルドノードツリー
301
データ処理装置
302
中央処理装置
303
キャッシュメモリ
304
バス
305
主記憶装置
306
外部記憶装置
307
通信装置
308
データ格納装置
309
配列
310
探索経路スタック
311
コード列の格納領域
500
コード列検索装置
510
初期検索部
511 検索結果コード列取得手段
512 探索経路記憶手段
520 最長一致検索部
521
前方一致判定手段
522
第1の最長一致キー取得手段
523
第2の最長一致キー取得手段
Claims (15)
- コード列からなる検索キーを符号化したビット列である符号化検索キーによりツリーのデータ構造に基づいて検索対象コード列を検索するコード列検索装置において、
前記ツリーの始点であるルートノードと、隣接した記憶領域に配置される代表ノードと非代表ノードである2つのノードを有する、ツリーの構成要素としてのノード対を有し、前記ノードは該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、前記ノード種別に加えて、前記符号化検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す情報を格納する領域を含み、前記リーフノードは、前記ノード種別に加えて、前記検索対象コード列あるいは検索対象コード列の記憶領域を指す参照ポインタを格納する領域を含むものであって、前記検索対象コード列を符号化したビット列であるインデックスキーのビット値により決定されるデータ構造を有する、カップルドノードツリーと、
前記符号化検索キーにより前記カップルドノードツリーのデータ構造に基づいて、前記検索対象コード列を検索して初期検索における検索結果コード列を求めるとともに、該初期検索でたどる前記カップルドノードツリー上の経路を記憶する初期検索部と、
前記初期検索における検索結果コード列と、前記記憶された前記カップルドノードツリー上の経路に存在するリーフノードに含まれる検索対象コード列あるいは該リーフノードに含まれる参照ポインタの指す記憶領域に記憶された検索対象コード列から、前記検索キーに前方一致する最長の検索対象コード列を最長一致キーとして求める最長一致検索部を備え、
前記コード列からなる検索キーと検索対象コード列の符号化は、それぞれのコード列を構成する各コードを表すビット列の先頭に該コードが後続することを示す識別ビットである有意コード識別ビットを付加し、かつ、それぞれのコード列の終端に該コード列の終端を示す識別ビットである無意コード識別ビットを付加するものであり、
前記初期検索部は、
前記ルートノードを検索開始ノードとして、前記ブランチノードにおいて、その弁別ビット位置の情報とリンク先のノード対の代表ノードの位置を示す情報を読み出し、前記符号化検索キーの該読み出した弁別ビット位置のビット値と該読み出した代表ノードの位置を示す情報との演算によりノードの位置を示す情報を求め、該求めた位置のノードをリンク先ノードとして読み出すことを、該読み出したリンク先ノードのノード種別がリーフノードとなるまで繰り返し、該到達したリーフノードに含まれる検索対象コード列を初期検索の検索結果コード列として取得する、あるいは到達したリーフノードに含まれる参照ポインタを取得して該参照ポインタの指す記憶領域に記憶された検索対象コード列を初期検索の検索結果コード列として取得する検索結果コード列取得手段と、
前記リーフノードに到達する過程でたどったブランチノードのうち、その弁別ビット位置の値が、前記符号化検索キーを構成するビット列のうちいずれかの前記識別ビットが存在する位置と一致するブランチノードであるコード列区切りブランチノードの位置を示す情報と、該コード列区切りブランチノードのリンク先のノード対のうち前記弁別ビット位置の値が前記無意コード識別ビットの値であるときにそのノード位置が演算されるノードであるコード列終端側ノードに係る検索対象コード列にアクセスするための情報をスタックに格納することで、前記初期検索でたどる前記カップルドノードツリー上の経路を記憶する探索経路記憶手段を含み、
前記最長一致検索部は、
前記初期検索の検索結果コード列を符号化したインデックスキーが前記符号化検索キーに前方一致するか判定する前方一致判定手段と
前記初期検索の検索結果コード列を符号化したインデックスキーが前記符号化検索キーに前方一致すると判定された場合に、該検索結果コード列を前記最長一致キーとして求める第1の最長一致キー取得手段と、
前記初期検索の検索結果コード列を符号化したインデックスキーが前記符号化検索キーに前方一致しないと判定された場合に、前記スタックから前記コード列終端側ノードに係る検索対象コード列にアクセスするための情報を最後に格納されたものから順次取り出し、該取り出された情報によりアクセスされる検索対象コード列を符号化したインデックスキーのビット長が前記符号化検索キーのビット長以下となる最初のインデックスキーの無意コード識別ビットを除いた範囲のビット列と前記符号化検索キーの無意コード識別ビットを除いた範囲のビット列を比較して上位から見て最初にビット値が不一致となるビット位置である差分ビット位置を取得し、さらに前記スタックからコード列区切りブランチノードの位置を示す情報を順次取り出し、該取り出した位置を示す情報の位置にあるコード列区切りブランチノードの弁別ビット位置が最初に前記差分ビット位置より上位となるコード区切りブランチノードのリンク先のノード対のうちのコード列終端側ノードに係る検索対象コード列にアクセスするための情報を取り出し、該取り出した情報に基づいてアクセスされる検索対象コード列を前記最長一致キーとして求める第2の最長一致キー取得手段を含む、
ことを特徴とするコード列検索装置。 - 請求項1に記載のコード列検索装置において、前記カップルドノードツリーは配列に配置され、前記代表ノードの位置を示す情報及びコード列区切りブランチノードの位置を示す情報は、それぞれのノードが格納された前記配列の配列要素の配列番号であることを特徴とするコード列検索装置。
- 請求項2に記載のコード列検索装置において、前記コード列終端側ノードに係る検索対象コード列にアクセスするための情報は、該コード列終端側ノードが格納された前記配列の配列要素の配列番号、あるいは該コード列終端側ノードと対をなすノードが格納された前記配列の配列要素の配列番号であることを特徴とするコード列検索装置。
- 請求項1に記載のコード列検索装置において、前記コード列終端側ノードに係る検索対象コード列にアクセスするための情報は、該コード列終端側ノードに係る検索対象コード列あるいは該コード列終端側ノードに係る検索対象コード列が記憶された記憶領域を指す参照ポインタであることを特徴とするコード列検索装置。
- コード列検索装置が、コード列からなる検索キーを符号化したビット列である符号化検索キーによりツリーのデータ構造に基づいて検索対象コード列を検索するコード列検索方法において、
前記ツリーは、該ツリーの始点であるルートノードと、隣接した記憶領域に配置される代表ノードと非代表ノードである2つのノードを有する、ツリーの構成要素としてのノード対を有し、前記ノードは該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、前記ノード種別に加えて、前記符号化検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す情報を格納する領域を含み、前記リーフノードは、前記ノード種別に加えて、前記検索対象コード列あるいは検索対象コード列の記憶領域を指す参照ポインタを格納する領域を含むものであって、前記検索対象コード列を符号化したビット列であるインデックスキーのビット値により決定されるデータ構造を有する、カップルドノードツリーであり、
前記符号化検索キーへの符号化と後記検索対象コード列の符号化は、それぞれのコード列を構成する各コードを表すビット列の先頭に該コードが後続することを示す識別ビットである有意コード識別ビットを付加し、かつ、それぞれのコード列の終端に該コード列の終端を示す識別ビットである無意コード識別ビットを付加するものであって、
前記ルートノードを検索開始ノードとして、前記ブランチノードにおいて、その弁別ビット位置の情報とリンク先のノード対の代表ノードの位置を示す情報を読み出し、前記符号化検索キーの該読み出した弁別ビット位置のビット値と該読み出した代表ノードの位置を示す情報との演算によりノードの位置を示す情報を求め、該求めた位置のノードをリンク先ノードとして読み出すことを、該読み出したリンク先ノードのノード種別がリーフノードとなるまで繰り返し、該到達したリーフノードに含まれる検索対象コード列を初期検索の検索結果コード列として取得する、あるいは到達したリーフノードに含まれる参照ポインタを取得して該参照ポインタの指す記憶領域に記憶された検索対象コード列を初期検索の検索結果コード列として取得するとともに、前記リーフノードに到達する過程でたどったブランチノードのうち、その弁別ビット位置の値が、前記符号化検索キーを構成するビット列のうちいずれかの前記識別ビットが存在する位置と一致するブランチノードであるコード列区切りブランチノードの位置を示す情報と、該コード列区切りブランチノードのリンク先のノード対のうち前記弁別ビット位置の値が前記無意コード識別ビットの値であるときにそのノード位置が演算されるノードであるコード列終端側ノードに係る検索対象コード列にアクセスするための情報をスタックに格納する初期検索ステップと、
前記初期検索の検索結果コード列を符号化したインデックスキーが前記符号化検索キーに前方一致するか判定する前方一致判定ステップと
前記初期検索の検索結果コード列を符号化したインデックスキーが前記符号化検索キーに前方一致すると判定された場合に、該検索結果コード列を、前記検索キーに前方一致する最長の検索対象コード列である最長一致キーとして求める第1の最長一致キー取得ステップと、
前記初期検索の検索結果コード列を符号化したインデックスキーが前記符号化検索キーに前方一致しないと判定された場合に、前記スタックから前記コード列終端側ノードに係る検索対象コード列にアクセスするための情報を最後に格納されたものから順次取り出し、該取り出された情報によりアクセスされる検索対象コード列を符号化したインデックスキーのビット長が前記符号化検索キーのビット長以下となる最初のインデックスキーの無意コード識別ビットを除いた範囲のビット列と前記符号化検索キーの無意コード識別ビットを除いた範囲のビット列を比較して上位から見て最初にビット値が不一致となるビット位置である差分ビット位置を取得し、さらに前記スタックからコード列区切りブランチノードの位置を示す情報を順次取り出し、該取り出した位置を示す情報の位置にあるコード列区切りブランチノードの弁別ビット位置が最初に前記差分ビット位置より上位となるコード区切りブランチノードのリンク先のノード対のうちのコード列終端側ノードに係る検索対象コード列にアクセスするための情報を取り出し、該取り出した情報に基づいてアクセスされる検索対象コード列を前記最長一致キーとして求める第2の最長一致キー取得ステップを含む、
ことを特徴とするコード列検索方法。 - 請求項5に記載のコード列検索方法において、前記カップルドノードツリーは配列に配置され、前記代表ノードの位置を示す情報及びコード列区切りブランチノードの位置を示す情報は、それぞれのノードが格納された前記配列の配列要素の配列番号であることを特徴とするコード列検索方法。
- 請求項6に記載のコード列検索方法において、前記コード列終端側ノードに係る検索対象コード列にアクセスするための情報は、該コード列終端側ノードが格納された前記配列の配列要素の配列番号、あるいは該コード列終端側ノードと対をなすノードが格納された前記配列の配列要素の配列番号であることを特徴とするコード列検索方法。
- 請求項5に記載のコード列検索方法において、前記コード列終端側ノードに係る検索対象コード列にアクセスするための情報は、該コード列終端側ノードに係る検索対象コード列あるいは該コード列終端側ノードに係る検索対象コード列が記憶された記憶領域を指す参照ポインタであることを特徴とするコード列検索方法。
- 請求項5〜請求項8のいずれか1項に記載のコード列検索方法をコンピュータに実行させるためのプログラム。
- 請求項9に記載のプログラムを記録したコンピュータ読み取り可能な記憶媒体。
- コード列検索装置が、コード列からなる検索キーを符号化したビット列である符号化検索キーにより検索対象コード列を検索するコード列検索方法のためのデータ構造において、
ツリーの始点であるルートノードと、隣接した記憶領域に配置される代表ノードと非代表ノードである2つのノードを有する、ツリーの構成要素としてのノード対を有し、前記ノードは該ノードがブランチノードであるかリーフノードであるかを示すノード種別を格納する領域を有し、前記ブランチノードは、前記ノード種別に加えて、前記符号化検索キーの弁別ビット位置を格納する領域とリンク先のノード対の代表ノードの位置を示す情報を格納する領域を含み、前記リーフノードは、前記ノード種別に加えて、前記検索対象コード列あるいは検索対象コード列の記憶領域を指す参照ポインタを格納する領域を含むものであって、前記検索対象コード列を符号化したビット列であるインデックスキーのビット値により決定されるデータ構造を有し、前記符号化検索キーへの符号化と前記検索対象コード列の符号化は、それぞれのコード列を構成する各コードを表すビット列の先頭に該コードが後続することを示す識別ビットである有意コード識別ビットを付加し、かつ、それぞれのコード列の終端に該コード列の終端を示す識別ビットである無意コード識別ビットを付加するものである、カップルドノードツリー
を備え、
前記コード列検索装置が、
前記ルートノードを検索開始ノードとして、前記ブランチノードにおいて、その弁別ビット位置の情報とリンク先のノード対の代表ノードの位置を示す情報を読み出し、前記符号化検索キーの該読み出した弁別ビット位置のビット値と該読み出した代表ノードの位置を示す情報との演算によりノードの位置を示す情報を求め、該求めた位置のノードをリンク先ノードとして読み出すことを、該読み出したリンク先ノードのノード種別がリーフノードとなるまで繰り返し、該到達したリーフノードに含まれる検索対象コード列を初期検索の検索結果コード列として取得する、あるいは到達したリーフノードに含まれる参照ポインタを取得して該参照ポインタの指す記憶領域に記憶された検索対象コード列を初期検索の検索結果コード列として取得するとともに、前記リーフノードに到達する過程でたどったブランチノードのうち、その弁別ビット位置の値が、前記符号化検索キーを構成するビット列のうちいずれかの前記識別ビットが存在する位置と一致するブランチノードであるコード列区切りブランチノードの位置を示す情報と、該コード列区切りブランチノードのリンク先のノード対のうち該コード列区切りブランチノードのリンク先のノード対のうち前記弁別ビット位置の値が前記無意コード識別ビットの値であるときにそのノード位置が演算されるノードであるコード列終端側ノードに係る検索対象コード列にアクセスするための情報をスタックに格納する初期検索ステップと、
前記初期検索の検索結果コード列を符号化したインデックスキーが前記符号化検索キーに前方一致するか判定する前方一致判定ステップと
前記初期検索の検索結果コード列を符号化したインデックスキーが前記符号化検索キーに前方一致すると判定された場合に、該検索結果コード列を、前記検索キーに前方一致する最長の検索対象コード列である最長一致キーとして求める第1の最長一致キー取得ステップと、
前記初期検索の検索結果コード列を符号化したインデックスキーが前記符号化検索キーに前方一致しないと判定された場合に、前記スタックから前記コード列終端側ノードに係る検索対象コード列にアクセスするための情報を最後に格納されたものから順次取り出し、該取り出された情報によりアクセスされる検索対象コード列を符号化したインデックスキーのビット長が前記符号化検索キーのビット長以下となる最初のインデックスキーの無意コード識別ビットを除いた範囲のビット列と前記符号化検索キーの無意コード識別ビットを除いた範囲のビット列を比較して上位から見て最初にビット値が不一致となるビット位置である差分ビット位置を取得し、さらに前記スタックからコード列区切りブランチノードの位置を示す情報を順次取り出し、該取り出した位置を示す情報の位置にあるコード列区切りブランチノードの弁別ビット位置が最初に前記差分ビット位置より上位となるコード区切りブランチノードのリンク先のノード対のうちのコード列終端側ノードに係る検索対象コード列にアクセスするための情報を取り出し、該取り出した情報に基づいてアクセスされる検索対象コード列を前記最長一致キーとして求める第2の最長一致キー取得ステップを含む、コード列検索方法を実行可能とする
ことを特徴とするコード列検索方法のためのデータ構造。 - 請求項11に記載のコード列検索方法のためのデータ構造において、前記カップルドノードツリーは配列に配置され、前記代表ノードの位置を示す情報及びコード列区切りブランチノードの位置を示す情報は、それぞれのノードが格納された前記配列の配列要素の配列番号であることを特徴とするコード列検索方法のためのデータ構造。
- 請求項12に記載のコード列検索方法のためのデータ構造において、前記コード列終端側ノードに係る検索対象コード列にアクセスするための情報は、該コード列終端側ノードが格納された前記配列の配列要素の配列番号、あるいは該コード列終端側ノードと対をなすノードが格納された前記配列の配列要素の配列番号であることを特徴とするコード列検索方法のためのデータ構造。
- 請求項11に記載のコード列検索方法のためのデータ構造において、前記コード列終端側ノードに係る検索対象コード列にアクセスするための情報は、該コード列終端側ノードに係る検索対象コード列あるいは該コード列終端側ノードに係る検索対象コード列が記憶された記憶領域を指す参照ポインタであることを特徴とするコード列検索方法のためのデータ構造。
- 請求項11〜請求項14のいずれか1項に記載のコード列検索方法のためのデータ構造を有するデータを記録したことを特徴とするコンピュータ読み取り可能な記憶媒体。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010293635A JP5473893B2 (ja) | 2010-12-28 | 2010-12-28 | コード列検索装置、検索方法及びプログラム |
PCT/JP2011/079375 WO2012090763A1 (ja) | 2010-12-28 | 2011-12-19 | コード列検索装置、検索方法及びプログラム |
US13/926,545 US20130297641A1 (en) | 2010-12-28 | 2013-06-25 | Code string search apparatus, search method, and program |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010293635A JP5473893B2 (ja) | 2010-12-28 | 2010-12-28 | コード列検索装置、検索方法及びプログラム |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2012141760A JP2012141760A (ja) | 2012-07-26 |
JP2012141760A5 JP2012141760A5 (ja) | 2013-12-19 |
JP5473893B2 true JP5473893B2 (ja) | 2014-04-16 |
Family
ID=46382874
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010293635A Expired - Fee Related JP5473893B2 (ja) | 2010-12-28 | 2010-12-28 | コード列検索装置、検索方法及びプログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US20130297641A1 (ja) |
JP (1) | JP5473893B2 (ja) |
WO (1) | WO2012090763A1 (ja) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8654966B2 (en) * | 2007-01-24 | 2014-02-18 | Audiocodes Ltd. | Method for dial plan parsing and a system incorporating the same |
WO2014045318A1 (ja) * | 2012-09-21 | 2014-03-27 | 富士通株式会社 | 圧縮プログラム、圧縮方法及び圧縮装置 |
US9680749B2 (en) * | 2015-02-27 | 2017-06-13 | Arista Networks, Inc. | System and method of using an exact match table and longest prefix match table as a combined longest prefix match |
US10516613B1 (en) | 2015-10-14 | 2019-12-24 | Innovium, Inc. | Network device storage of incremental prefix trees |
US10528488B1 (en) * | 2017-03-30 | 2020-01-07 | Pure Storage, Inc. | Efficient name coding |
US10230639B1 (en) * | 2017-08-08 | 2019-03-12 | Innovium, Inc. | Enhanced prefix matching |
US10528556B1 (en) * | 2017-12-31 | 2020-01-07 | Allscripts Software, Llc | Database methodology for searching encrypted data records |
US11140078B1 (en) | 2018-10-18 | 2021-10-05 | Innovium, Inc. | Multi-stage prefix matching enhancements |
US11106657B2 (en) * | 2018-11-20 | 2021-08-31 | International Business Machines Corporation | Optimizing hash storage and memory during caching |
CN110222143B (zh) * | 2019-05-31 | 2022-11-04 | 北京小米移动软件有限公司 | 字符串匹配方法,装置,存储介质及电子设备 |
CN110909212B (zh) * | 2019-10-11 | 2024-04-09 | 中国平安财产保险股份有限公司 | 一种银行标识代码的匹配方法和设备 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH11136287A (ja) * | 1997-10-25 | 1999-05-21 | Masaya Yoneda | 検索装置およびそれを用いたデータ転送システム |
US6993025B1 (en) * | 1999-12-30 | 2006-01-31 | Nortel Networks Limited | Method and apparatus for encoding a plurality of pre-defined codes into a search key and for locating a longest matching pre-defined code |
JP3691018B2 (ja) * | 2002-01-31 | 2005-08-31 | 日本電信電話株式会社 | 最長一致検索回路および方法およびプログラムおよび記録媒体 |
JP3660311B2 (ja) * | 2002-02-07 | 2005-06-15 | 日本電信電話株式会社 | テーブル検索装置および方法およびプログラムおよび記録媒体 |
US7079056B2 (en) * | 2003-01-15 | 2006-07-18 | Delphi Technologies, Inc. | Method of encoding and storing in a machine control computer a compressed data lookup table |
JP4514771B2 (ja) * | 2007-05-18 | 2010-07-28 | 株式会社エスグランツ | カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム |
JP4514768B2 (ja) * | 2007-04-19 | 2010-07-28 | 株式会社エスグランツ | カップルドノードツリーの退避/復元装置、退避/復元方法及びプログラム |
JP4527753B2 (ja) * | 2007-07-03 | 2010-08-18 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
US9009655B2 (en) * | 2008-09-28 | 2015-04-14 | KOUSOKUYA, Inc. | Code string search apparatus, search method, and program |
-
2010
- 2010-12-28 JP JP2010293635A patent/JP5473893B2/ja not_active Expired - Fee Related
-
2011
- 2011-12-19 WO PCT/JP2011/079375 patent/WO2012090763A1/ja active Application Filing
-
2013
- 2013-06-25 US US13/926,545 patent/US20130297641A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
JP2012141760A (ja) | 2012-07-26 |
WO2012090763A1 (ja) | 2012-07-05 |
US20130297641A1 (en) | 2013-11-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5473893B2 (ja) | コード列検索装置、検索方法及びプログラム | |
JP4271214B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP4527753B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP4271227B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
CN102541995B (zh) | 对散列序列矩阵的索引和查询 | |
JP4514768B2 (ja) | カップルドノードツリーの退避/復元装置、退避/復元方法及びプログラム | |
JP4402120B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP4514771B2 (ja) | カップルドノードツリーの最長一致/最短一致検索装置、検索方法及びプログラム | |
JP5165662B2 (ja) | ビット列キー分類・分配装置、分類・分配方法及びプログラム | |
JP2009140161A (ja) | ビット列のマージソート方法及びプログラム | |
EP2149845B1 (en) | Coupled node tree backup/restore apparatus, backup/restore method, and program | |
WO2009122651A1 (ja) | ビット列検索装置、検索方法及びプログラム | |
EP2249257B1 (en) | Bit string retrieval device, retrieval method and program | |
JP4417431B2 (ja) | カップルドノードツリーの分割/結合方法及びプログラム | |
JP2011018296A (ja) | カップルドノードツリーのインデックスキー挿入/削除方法 | |
WO2010125742A1 (ja) | インデックス更新データ作成装置、作成方法及びプログラム | |
JP4813575B2 (ja) | ビット列検索装置 | |
KR102326105B1 (ko) | 워드 추출 방법 및 장치 | |
JP5220057B2 (ja) | ビット列検索装置、検索方法及びプログラム | |
JP2000029884A (ja) | 文字コード登録探索装置、及び文字コード登録探索方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A712 Effective date: 20121010 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20131101 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20131101 |
|
A871 | Explanation of circumstances concerning accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20131101 |
|
A975 | Report on accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A971005 Effective date: 20131202 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20131210 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20131218 |
|
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: 20140204 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20140204 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |