JP5736589B2 - 数列データ検索装置、数列データ検索方法及びプログラム - Google Patents

数列データ検索装置、数列データ検索方法及びプログラム Download PDF

Info

Publication number
JP5736589B2
JP5736589B2 JP2012016524A JP2012016524A JP5736589B2 JP 5736589 B2 JP5736589 B2 JP 5736589B2 JP 2012016524 A JP2012016524 A JP 2012016524A JP 2012016524 A JP2012016524 A JP 2012016524A JP 5736589 B2 JP5736589 B2 JP 5736589B2
Authority
JP
Japan
Prior art keywords
sequence
sequence data
bit
bit string
search
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
JP2012016524A
Other languages
English (en)
Other versions
JP2013156822A (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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2012016524A priority Critical patent/JP5736589B2/ja
Publication of JP2013156822A publication Critical patent/JP2013156822A/ja
Application granted granted Critical
Publication of JP5736589B2 publication Critical patent/JP5736589B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、数列データまたは文字列データの検索に関し、特に、文字列または文書の検索を行う検索装置の改良に関する。
オフィスにおける文書情報の電子化、インターネットの普及・拡大により、膨大な量の電子文書が作成され、蓄積されている。こうして作成及び蓄積された電子文書から、所望の情報を抽出するため、高速に検索を行う技術が重要となっている。ウェーブレット木は数列データを検索するために設計されたデータ構造であり、圧縮接尾辞配列等の文書検索技術に用いられている。また、近年では、ウェーブレット木をXML文書の検索に利用することが考えられている。
ウェーブレット木では、数列データが圧縮された状態で保持されており、Rank、Select、Lookupの3種のデータ検索が可能である。この3種のデータ検索方法は以下のような関数として表現される。Rank(c,p)は保持された数列上のpの位置までに、数字cが含まれる数を返す関数であり、Select(c,n)はn番目の数字cが出現する数列上の位置を返す関数であり、Lookup(p)は数列上のpの位置にある数字を返す関数である。図18は、数列データ「3141042103」におけるデータ検索の一例を示している。
図18において、Rank(1,5)は数字「1」が5番目の位置までに2回出現していることから、「2」となる。Select(4,1)は数字「4」が1番目に出現する場所が3番目の位置であることから、「3」となる。Lookup(5)は5番目の位置にある数字が「0」であることから値も「0」となる。
ウェーブレット木は、図19に示すように、通常は2分木を元にしたデータ構造である。数列データ101内にある各数字は、どの符号語も他の符号語の接頭語にならないという条件(接頭語条件)を満たす形で2進数表現により符号化されており、構造の主となる2分木は、この2進数表現に合わせた形で構成されている。そして、2分木の葉ノードは各数字に対応した形となっている。また、前記2分木では、各分岐点において0、1が割り振られ、数字の2進数表現を辿れば、数字に対応した葉へ到達できる。葉ノード以外のノードにおいては、そのノードの子孫にある葉に対応した数字からなる、数列データ101の部分列の情報を保持する。この部分列の情報は、各数字が対応した子孫にある葉ノードへ辿るために向かう子ノードの方向、0、1を元に部分列の各数字を0、1に置き換え得られたビット列となっている。
図19では、数列データ「3141042103」にある数字0、1、2、3、4への2進数表現の一例と、その2進数表現によって生成されたウェーブレット木を構成する2分木と2分木内に登録されたデータを示している。
図19において、数字「1」は「01」と2進数で表現されるが、図中根ノード201から分岐を2進数表現に合わせて0、1と辿ることで、数字1に対応した葉ノード203へ到達できることが分かる。すなわち、各数字の2進数表現は、数字に対応した子ノードへ到達するための分岐に対応している。根ノード201でのビット列の登録について、10進数の数字「1」、「2」、「3」では2進数表現の先頭の数字204が「0」であるが、「0」、「4」では「1」であるため、数列データ「3141042103」において、「1」、「2」、「3」を、「0」に、「4」を「1」に置き換えることで得られる、「0010110010」というビット列が根ノード201に登録される。
根ノード201から「0」の方向にある子ノード202で、子孫にある葉ノードは、数字「1」、「2」、「3」に対応していることから、数列データ「3141042103」のうち数字「1」、「2」、「3」からなる部分数列「311213」として生成されたビット列が登録される。「2」、「3」の2進数表現の2番目の数字205が「0」であるが、「1」は「1」であるため、「011010」が登録される。他の葉ノード以外のノードでも同様な形で部分数列が生成され、上述のビット列の形で各ノードに登録される。
ウェーブレット木へのRank、Select、Lookupは、各ノードに保持されたビット列へのRank、Select、Lookupから得られた結果から計算される。ビット列へのRank、Select、LookupはSuccinct Bit Vectorと呼ばれる構造で、高速に計算可能である(例えば、非特許文献1)。このSuccinct Bit Vectorでは、ビット列が多くの場合、例えば、32ビット整数の配列として格納される。ビット列へのLookup(p)の計算は、p/32が商=q、余り=rのとき、配列のq+1番目の要素のr番目のビットの値が0か1をビット演算で計算することで求められる。
Rank、Selectの計算では、ビット列を大まかなブロックに分け、ブロックの終わり部分にあるビットに相当する値等を事前に計算して、これを辞書と呼ばれるデータ構造に保持することで、高速な計算が可能である(例えば、非特許文献1)。
例えば、Rankの場合では、ビット列をブロックに分け、ブロックの終わりの部分にビットのRankの値が計算され、辞書として保持されている。このため、辞書を利用することで、辞書にある位置までのRankの値と、辞書でカバーされていない部分のRankを計算し、足し合わせることで、任意の位置に対するRankの答えが得られる。このようにすれば、ビット列全体を走査することなく、Rankの値を定数オーダーで計算できる。Selectの場合も、少し複雑ではあるが、同様の計算が行われる。
Navarro, G. and Makinen, V., Compressed full-text indexes, ACM Computing Surveys 39(1), 2007 Ferragina, P., Manzini, G., Makinen, V., and Navarro, G., Compressed representations of sequences and full-text indexes, ACM Transactions on Algorithms 3(2): Article 1, 2007.
ウェーブレット木は2分木からなるデータ構造であるが、これを多分木、例えば、K分木1401へ拡張することで、木の高さが低くなることから、Rank、Select、Lookup計算時に辿る段数が削減されるため、高速化が期待される。
しかしながら、葉ノードに辿るまでの各ノードにおけるRank、Select、Lookupの計算は、上記のようなビット列である2進数ではなく、K進数となるため、Succinct Bit VectorをK進数が扱えるように拡張する必要がある。そこで、非特許文献2では、Succinct Bit Vectorを一般化し、整数0からK−1を並べたK進数列に対して、Kが比較的小さい場合、0からK−1の各数字を符号化し、Rank、Select、Lookupの計算を可能とする方法が提案されている。この場合も、辞書情報と辞書の範囲外である短いK進数列の符号語に対して表が用意される。
ここで、K進数列データの長さをnとしたとき、辞書サイズは少なくとも
2*K*n*lg(lg(n))/log(K,n)ビット
となる。ここで、lg(n)は2を底とする対数より大きい最小の整数を示し、log(K,n)はKを底とする対数より大きい最小の整数を返す関数を表す。
K進数列の長さがnの時、非圧縮状態におけるデータサイズはn*lg(K)ビットとなるため、nが巨大になるほど、データサイズに対して、辞書サイズは相対的に小さくなる。しかしながら、実際には、K=4のとき、長さ40億の4進数列に対して、数列自体のデータサイズは10GBとなるが、辞書のサイズは11.7GBとなり、数列自体のデータサイズより大きくなる。また、ウェーブレット木内では、数列データは、葉ノード以外のノードにおいて、元の数列データ長よりも短いK進数列として保持されることから、既存手法の問題点はより顕著になる。
そこで本発明は、上記問題点に鑑みてなされたもので、検索速度を損なうことなく、より小さなデータ領域で計算する手法を提供することを目的とする。
本発明は、プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納する記憶装置と、を備え、入力された数列データを保持し、検索クエリを受け付けて、前記受け付けた前記検索クエリから前記数列データを検索する数列データ検索装置であって、前記数列データの分岐数Kを受け付けて、前記数列データからK分木を構築するK分木構築部と、前記分岐数Kから前記数列データをK進数列に変換し、前記構築したK分木のうち葉ノード以外のノードにおいて、分岐数Kの2を底とする対数と等しいかより大きい整数の中で最小の値zを算出し、前記K進数列の0からK−1の各数字を前記最小の値z桁で2進数列化し、前記最小の値z本のビット列に各桁を格納する多段ビット列を含む多分岐ウェーブレット木データ構築部と、前記検索クエリに含まれる検索対象の数字の位置のビットが所定値であるビット列を前記多段ビット列から求める検索を備える。
したがって、本発明によれば、分岐数を4とした場合、葉以外ノードにおいて保持されるビット列は漸近的に2倍となり、また、Rank、Selectのために保持される辞書サイズも漸近的に2倍となるが、木の高さは半減するため、保持されるビット列、辞書サイズの合計は従来のウェーブレット木と変わらない。一方、計算速度においては、木の高さは半減するが、各ノードでの演算速度は、ビット演算が非常に高速であることから、ほとんど変わらないため、全体でのRank、Select、Lookupの演算速度が2倍になる。
本発明の実施形態の、数列データ検索装置1の構成例を示すブロック図である。 本発明の実施形態の、数列データ検索装置1のソフトウェアの構成例を示すブロック図である。 本発明の実施形態の、多分岐ウェーブレット木データ部107の概要を示す図である。 本発明の実施形態の、多分岐ウェーブレット木データ部の構築処理407の概要の説明図である。 本発明の実施形態のK分木構築部408によって実行される処理のフローチャートである。 本発明の実施形態のK進数列記録構造104の構築処理の概要の説明図である。 本発明の実施形態の多分岐ウェーブレット木データ部の構築部407の処理のデータの流れの説明図である。 本発明の実施形態の検索部413による検索処理のデータの流れを説明する図である。 本発明の実施形態の検索部413によって実行される処理の概要の説明図である。 本発明の実施形態のRank計算によって実行される処理のフローチャートである。 本発明の実施形態のSelect計算によって実行される処理のフローチャートである。 本発明の実施形態のLookup計算によって実行される処理のフローチャートである。 本発明の実施形態の辞書を用いたK進数列のRank計算の流れを説明する図である。 本発明の実施形態のビットベクトル抽出部によって実行される処理のフローチャートである。 本発明の実施形態の4分岐ウェーブレット木の構造を示す図である。 本発明の実施形態の4分岐ウェーブレット木におけるRank計算の流れを説明する図である。 本発明の実施形態の4分岐ウェーブレット木の非葉ノードに記録された多段ビットベクトルと辞書によるRank計算の流れを説明する図である。 本発明の実施形態の4分岐ウェーブレット木の非葉ノードに記録された多段ビットベクトルの要素から所望の数字のビットのみ立ったビットベクトルを取り出す方法を説明する図である。 従来例を示し、数列データ101に対するRank、Select、Lookupをクエリとする検索の一例を示す図である。 従来のウェーブレット木の構造を示す図である。
以下、本発明の実施形態を添付図面に基づいて説明する。
図1A、図1Bは、本発明の実施形態の数列データ検索装置1の構成例を示す図である。数列データ検索装置1は、CPU(Central Processing Unit)401、主記憶装置(メモリ)402、補助記憶装置403、ユーザインタフェース部406を備えた計算機で構成される。この数列データ検索装置1は、LAN(Local Area Network)等のネットワーク405を介して外部のネットワークに接続されている。
CPU401は、主記憶装置402に格納されたプログラム(多分岐ウェーブレット木データ構築部407、K分木構築部408、数列登録部409、K進数列記録構造構築部410、K進数列登録部411、辞書作成部412、検索部413、K進数列検索部417、ビット列検索部421)を実行する中央演算装置である。
主記憶装置402は、上記プログラム及び上記プログラムの実行に用いるK分木105、K進数配列データ等を記憶するRAM(Random Access Memory)等の記憶装置である。主記憶装置402は、数列データ101も、必要があれば一時的に記憶する。補助記憶装置403は、数列データ101や上記プログラム等を格納するHDD等の記憶装置または記憶媒体である。
リムーバブルメディア404は、ウェーブレット木の構造、数列データ101等を記録したCD−ROMや、DVD等の記録媒体である。補助記憶装置403およびリムーバブルメディア404に記録された各データは、必要に応じて数列データ検索装置1の起動時に主記憶装置402に読み出される。
ユーザインタフェース部406は、ユーザインタフェースを提供する入出力装置(例えば、キーボード、マウス、ディスプレイ)である。
以上に示す装置構成において、CPU401は、主記憶装置402、補助記憶装置403、リムーバブルメディア404、又は、ネットワーク405を介した外部から、必要に応じて数列データ101を取得する。その後、CPU401は、取得した数列データ101に基づいて、多分岐ウェーブレット木データ部107を構築する。
図1Aにおいて、数列データ101、多分岐ウェーブレット木データ部107は、主記憶装置402、補助記憶装置403、リムーバブルメディア404、ネットワーク405上の装置に格納される例を示したが、CPU401が読み書き可能な装置上であればよい。例えば、数列データ101を補助記憶装置403に格納し、多分岐ウェーブレット木データ部107を主記憶装置402に生成して格納するようにしても良い。
CPU401は、各機能部のプログラムに従って動作することによって、所定の機能を実現する機能部として動作する。例えば、CPU401は、多分岐ウェーブレット木データ構築プログラムに従って動作することで多分岐ウェーブレット木データ構築部407として機能する。他のプログラムについても同様であり。CPU401はK進数列記録構造構築プログラムに従って動作することで、K進数列記録構造構築部410として機能し、また、検索プログラムに従って動作することでCPU401は検索部413として機能する。さらに、CPU401は、各プログラムが実行する複数の処理のそれぞれを実現する機能部としても動作する。
多分岐ウェーブレット木データ構築部407、K進数列記録構造構築部410及び検索部413の各機能を実現するプログラム、テーブル等の情報は、補助記憶装置403やリムーバブルメディア404や不揮発性半導体メモリ、ハードディスクドライブ、SSD(Solid State Drive)等の記憶デバイス、または、ICカード、SDカード、DVD等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
図2は、多分岐ウェーブレット木データ部107の概要を示す図である。多分岐ウェーブレット木データ部107は、後述のK分木構築部408により構築されたK分木105と後述の数列登録部409により、K分木105の葉ノード以外のノードに、後述のK進数列記録構造104を設けた構造である。K進数列記録構造104は、後述の多段ビット列1041と後述の辞書1042からなるデータ構造である。
図3は、本発明の実施形態の多分岐ウェーブレット木データ構築部407の処理の概要を示す図である。個々の処理の概略を述べる。
<K分木の構築408>
多分岐ウェーブレットの分岐数をKとし、0からMの数字から構成される数列データ101を入力データとする。0からMの各数字には、K進数列からなる符号語が、前記背景技術で述べた接頭語条件を満たす形で割り振られる。
K分木処理部408は予め設定されたK進数に基づいてK分木105を生成し、数列登録部409はK分木105の葉ノード以外のノードに、後述のK進数列記録構造104を付加して分岐ウェーブレット木データ部107を構築する。なお、K進数の設定は数列データ検索装置1のユーザインターフェース部406で行うことができる。
図4は、本発明の実施形態において、予め設定されたK進数表現を用いてK分木構築部408で行われる処理の一例を示すフローチャートである。以下、K分木構築部408の各処理について説明する。なお、この処理は、数列データ検索装置1の利用者または管理者などによって開始される。
まず、ステップS101では、K分木構築部408を実行するCPU401は、0からMの数字を表す変数iを0にセットする。次に、ステップS102では、変数iに割り当てられたK進数表現をfとする。ここで、K進数表現とは前記従来例の19で示したように、入力された数列データ101をK分木のノードに設定し、各ノードにビット列を設定するための変換情報である。このK進数表現については後述する。
ステップS103では、CPU401が、現在処理の対象としているノードの位置を表す変数をvとし、変数vに根のノードをセットする。次に、ステップS104ではK進数表現fの先頭の数字を変数kに設定する。そして、ステップS105では、K進数表現fの先頭の数字を削除する。
ステップS106では、CPU401が、変数vが示すノードが子ノードを持つか否かを判定し、変数vが示すノードが子ノードを持つ場合にはステップS108へ進み、そうでない場合にはステップS107へ進む。
ステップS107では、変数vが示すノードにk個の子ノードを作成して、0からk−1の番号を設定する。そして、ステップS108では、変数vを変数vが現在示しているノードのk番目の子ノードにセットし直す。
ステップS109では、K進数表現fの要素がなくなるまで、ステップS103〜S108までの処理を繰り返す。そして、K進数表現fの要素がなくなると、ステップS110に進んで、変数vを数字iに該当する葉ノードとする。そして、CPU401は、変数iに1を加算する。
ステップS111では、変数iが所定値Mより大きくなるまで、ステップS102〜S110までの処理を繰り返す。
上記の処理によって、図2で示したようなK分木105が生成されて主記憶装置402等に保持される。
<数列登録部409>
数列データ登録部409は、数列データ101からK分木105の葉ノード以外のノードについて、K進数列記録構造(K進数列データ)104の登録を行う。図5は、本発明の実施形態のK分木105の葉ノード以外のノードへデータを登録する数列データ登録部409の処理の一例を示すフローチャートである。このフローチャートは、図4のK分木構築部408の処理の後に実行される。図5に示す数列データ登録部409の処理により、多分岐ウェーブレット木データ部107が構築される。以下、K分木105の葉ノード以外のノードへのデータ登録の処理について説明する。
まず、ステップS201で数列データ登録部409を実行するCPU401は、K分木105の葉ノード以外の各ノードに後述のK進数列記録構造104を作成する。次に、ステップS202では、数列データ101の先頭の数字を取り出し、これを変数dとする。ステップS203でCPU401は、変数dに設定した数列データ101の先頭の数字を削除する。
ステップS204では、CPU401は、変数dに割り当てるK進数表現をfとする。ステップS205では、現在処理対象となっているノードをあらわす変数をvとし、根のノードを変数vにセットする。S206では、K進数表現fの先頭の数字を取り出して、変数kにセットする。そして、ステップS207では、変数kにセットしたK進数表現fの先頭の数字を削除する。
次に、CPU401はステップS208で、現在処理対象となっている変数vが示すノードに設定されるK進数列記録構造104に変数kを追加登録する。そして、CPU401はステップS209で変数vを、変数vが現在示しているノードのk番目の子ノードにセットする。
ステップS210ではCPU401が、K進数表現fの要素がなくなるまで、ステップS206〜S209までの処理を繰り返す。
K進数表現fの要素がなくなったステップS211では、CPU401が、数列データdの要素がなくなるまで、S202〜S210までの処理を繰り返す。
数列データdの要素がなくなったステップS212では、CPU401が、後述の辞書作成部412により、各ノードに設定されるK進数列記録構造104に辞書1042を作成する。
以上の処理によって、K分木105の葉ノード以外のノードには、図2のようにK進数列記録構造104が付加されて分岐ウェーブレット木データ部107が構築される。
K進数列記録構造104は、多段ビット列1041によるK進数列のデータを記録・保持し、検索のための辞書1042を保持する。以下、K進数列記録構造構築部410の各処理について説明する。
<K進数列登録部411>
K進数列登録部411は、Kの2を底とする対数より大きい整数の中で、最小の値を変数zに設定する。K進数列記録構造104は、1からzまでの番号が振られたz本の整数配列(以下、多段ビット列)を用いて、K進数列を記録する。
K進数列毎の各整数配列について、登録されている最後尾のビットを保持している配列要素と、この配列要素において、最後尾のビットの保持されているビットでの位置は全て等しい。これらの位置を保持する変数をそれぞれa、bとする。
初期状態では、変数a、bは、K進数列登録部411によって共に1にセットされている。0からK−1を含む変数kは、K進数列登録部411によって次の形で記録される。K進数列登録部411は、変数kの2進数列表現をmとし、mのi番目の数字が1のとき、CPU401は、i番目の配列のa番目の配列要素で整数を表すビット列のb番目のビットを立てる(1にセットする)。CPU401は、mを構成する数字で1となっている2進数列表現の全てについて、上記の内容で登録を行う。登録終了後、CPU401は、変数bに1を足す。CPU401は、変数bが配列要素を構成する整数のビット幅より大きくなる場合には、変数bを1にセットし、変数aに1を足す。
<辞書作成部412>
辞書作成部412は、K進数列のRank、Selectの計算に用いられる辞書1042を構築する。辞書作成部412は、0からK−1の値を含む変数kについて、z本の各配列から、変数kの値に該当する部分のビットのみが立っている整数列を作成する。
整数列を生成した以降は、公知または周知の手法を用いて、Rank、Selectそれぞれについて辞書1042の作成が可能である。例えば、非特許文献1に基づいて辞書1042を作成することができる。
Rankに関する辞書1042としては、数字cが数列データ101上のある位置pまでに出現する回数を返す計算をRank(c,p)とする時、数列データ101上の0からK−1の各数字に対し、多段ビット列1041のRankを計算した結果を辞書作成部412がデータ構造(1041)に保持する。
また、Selectに関する辞書1042としては、数字cがある回数n出現するときの数列データ101上の位置を返す計算をSelect(c,n)とする時、数列データ101上0からK−1の各数字に対し、多段ビット列1041のSelectを計算した結果を辞書作成部412がデータ構造(1041)に保持する。
<多分岐ウェーブレット木データ構築部407>
図6は、本発明の実施形態の多分岐ウェーブレット木データ部107の構築部407の処理におけるデータの流れを説明するタイムチャートである。
まず、ユーザインタフェース部406を介して機能するプログラム(K分木構築部408)を数列データ検索装置1で実行し、主記憶装置402上にK分木105を構築する。
次に、CPU401は、多分岐ウェーブレット木データ構築部407として機能するプログラムを実行し、主記憶装置402上にある、K分木105と数列データ101を参照し、主記憶装置402上に多分岐ウェーブレット木データ部107を構築する。
CPU401は、以上の処理の実行が終了すると、構築処理終了通知をユーザインタフェース部406に出力する。
多分岐ウェーブレット木データ構築部407は、まず、K分木構築部408で数列データ101を読み込んでK分木105を生成する。次に、数列データ登録部409が数列データ101からK分木105の葉ノード以外のノードについて、K進数列記録構造(K進数列データ)104の登録を行う。K進数列記録構造104の登録は、数列データ登録部409とK進数列登録部411によって行われる。
図7は、本発明の実施形態の検索部413による検索処理のデータの流れを説明するタイムチャートである。
まず、CPU401は、図6で示したように多分岐ウェーブレット木データ構築部407が構築した、多分岐ウェーブレット木データ部107を補助記憶装置403、リムーバブルメディア404又はネットワーク405を介して接続される図示しない装置の記憶領域から主記憶装置402上にロードする。
次に、ユーザインタフェース部406を介して、ユーザからRank、Select又はLookupのうちいずれかの検索クエリが数列データ検索装置1に入力され、検索部413が受け付ける。検索部413は、K進数列検索部417とビット列検索部421を用いて検索を実行する。なお、検索クエリには、Rank、Select又はLookupの何れかの検索コマンドと、検索対象の数字や位置などが含まれる。
図8は、本発明の第1の実施形態のK進数列検索部417を構成する検索部413で行われる処理の概要を示す図である。
検索部413では、CPU401は、多分岐ウェーブレット木データ部107に対して、後述のK進数列検索部417を用いて検索クエリであるRank、Select又はLookupのいずれかの計算を行う。以下、検索部413の各処理について説明する。なお、K進数列検索部417は、検索コマンドがRankであればRank計算部414を起動し、検索コマンドがSelectであればSelect計算部415を起動し、検索コマンドがLookupであればLookup計算部416を起動する。
<Rank計算部414の処理>
Rank(c,p)計算部414は、多分岐ウェーブレット木データ部107に登録された数列データ101について検索対象の数字cが位置pまでに出現する回数を結果として返す。
図9は、本実施形態のRank(c,p)計算部414の処理の一例を示すフローチャートである。以下、Rank(c,p)計算部413の各処理について説明する。
まず、Rank計算部413を実行するCPU401は、ステップS301で、検索対象の数字cに割り当てられたK進数表現を変数fとする。次に、ステップS302では、現在いるノードを表す変数をvとし、変数vに根ノードをセットする。
ステップS303でCPU401は、K進数表現上の位置を表す変数をqとし、変数qをpにセットする。
ステップS304でCPU401は、K進数表現fの先頭の数字を取り出し、これを数字kとする。ステップS305でCPU401は、数字kにセットされたK進数表現fの先頭の数字を削除する。ステップS306でCPU401は、変数vが示すノードにあるK進数列記録構造104からK進数列検索部416のビット列検索部421により、Rank(k,q)を計算し、この結果を変数qにセットする。
ステップS307でCPU401は、変数vをvが現在示しているのk番目の子ノードにセットする。CPU401は、ステップS308で、K進数表現fの要素がなくなるまで、上記ステップS304〜S307までの処理を繰り返す。そして、CPU401は全てのK進数表現fの要素について上記処理を実行すると、ステップS309で変数qが、演算の結果として出力される。
<Select計算部415の処理>
Select(c,n)計算部415は、K分木105に登録された数列データ101について検索対象の数字cがn回目に出現する位置を結果として返す。図10は、本実施形態のSelect(c,n)計算部414の処理の一例を示すフローチャートである。以下、Select(c,n)計算部415の各処理について説明する。
Select計算部415を実行するCPU401は、ステップS401で検索対象の数字cに割り当てられたK進数表現を変数fとする。
ステップS402でCPU401は、数字の出現回数を表す変数をmとし、変数mに所定の回数nをセットする。ステップS403でCPU401は、現在いるノード(処理対象のノード)を表す変数をvとし、この変数vを数字cに該当する葉ノードにセットする。そして、ステップS404でCPU401は、変数vを親ノードにセットする。
次に、ステップS405でCPU401は、K進数表現fの末尾の数字を取り出し、これを変数kとする。ステップS406でCPU401は、が数字kにセットしたK新数列fの末尾の数字を削除する。ステップS407でCPU401は、変数vが示すノードにあるK進数列記録構造104からK進数列検索部416のビット列検索部421により、Select(k,m)を計算し、この結果を変数mにセットする。ステップS408でCPU401は、K進数表現fの要素がなくなるまで、上記ステップS404〜S407までの処理を繰り返す。
そして、K進数表現fの全ての要素について上記処理が完了するとステップS409でCPU401は変数mを、演算結果として出力する。
<Lookup計算部416の処理>
Lookup(p)計算部415は、K分木105に登録された数列データ101の位置pに出現する数字を結果として返す。図11は、本実施形態のLookup(p)計算部416の処理の一例を示すフローチャートである。以下、Lookup(p)計算部416の各処理について説明する。
Lookup計算部416を実行するCPU401は、ステップS501で現在いるノードを表す変数をvとし、この変数vに根ノードにセットする。次に、CPU401はステップS502で0からK−1の数字を表す変数をkとする。
ステップS503でCPU401は、数列の位置を表す変数をqとし、変数qに所定値pをセットする。ステップS504でCPU401は、変数vが示すノードにあるK進数列記録構造104からK進数列検索部417のビット列検索部421により、Lookup(q)を計算し、この結果を変数kにセットする。次にステップS505でCPU401は、変数vが示すノードにあるK進数列記録構造104からK進数列検索部417のビット列検索部421により、Rank(k,q)を計算し、この結果を変数qにセットする。
ステップS506でCPU401は、変数vをvが現在示しているノードのk番目の子ノードにセットする。そして、ステップS507では変数vが示すノードが葉ノードとなるまで、CPU401は上記ステップS504〜S506までの処理を繰り返す。
変数vが示すノードが葉ノードに到達するとCPU401はステップS508で、変数vが示す葉ノードに対応する数字を、演算結果として出力する。
以上の処理によって、K分木105に登録された数列データ101の位置pに出現する数字がLookup(p)計算部415によって計算される。
<ビット列検索部421>
K進数列検索部417において、CPU401は、K進数列記録構造104に設定された検索用の辞書1042と多段ビット列1041への後述のビット列検索部421によりK進数列のRank、Select、Lookupの計算を行う。これらの計算は、上記図9のステップS306、上記図10のステップS407、上記図11のステップS504、S505で行われる。
以下、K進数列検索部417における、Rank、Select、Lookupの各場合の処理について説明する。
<K進数列Rank計算部418の処理>
K進数列Rank(k,q)計算部418は、K進数列記録構造104に保持されたデータから、0からK−1の範囲に存在する数字kが位置qまでに出現する回数を結果として返す。
K進数列記録構造104では、Rank計算のための検索用の辞書1042が保持されているため、公知または周知の技術を用いることで、検索用の辞書1042の範囲内にある値と、辞書1042の範囲外にあり、K進数列から直接Rankを計算する必要がある配列の要素番号の範囲が得られる(例えば、前記非特許文献1)。
図12は、検索用の辞書1042と辞書1042の範囲外のK進数列から、Rank(k,q)を計算する手順を示している。辞書1042では、z本の整数配列からなる多段ビット列1041の要素i−1番目までに数字kが出現した回数hは保持されている。しかし、i番目の要素から、K進数列においてq番目の数字を保持しているj番目の配列要素については、辞書1042の範囲外であるとする。
このとき、z本の整数配列からなる多段ビット列1041のi番目の要素からj番目の要素までの各要素に保持されている整数から、Rankを計算する必要がある。ビット列検索部421により、z本の配列の各要素にあるz個の整数から数字kに該当した部分だけにビットが立った(例えば、所定値である1)整数が得られる。これにより、iからj番目の要素について得られた整数のRankを計算し、出現回数hに加算することで、目的の値である数字kが位置qまでに出現する回数を得る。尚、この際に使用する整数型としては、32ビット型、64ビット型、128ビット型等、任意のビット幅のものが使用できる。
<K進数列Select計算部419の処理>
次に、K進数列Select(k,m)計算部419は、K進数列記録構造に保持されたデータから、0からK−1の数字kがm回目に出現する位置を結果として返す。K進数列Select計算部419は、まずK進数列記録構造104に保持されているSelect計算のための検索用の辞書1042を参照し、数字kがmより小さく最もmに近い回数であるn回目に出現する位置の情報を探す。
K進数列Select計算部419は、探索した位置をhとすると、K進数列のあるh番目以降において、数字kがあるm−n回目に出現する位置を求めることで、目的の数字kを得ることができる。ここで、K進数列が32ビット整数型の配列で格納されているとし、出現回数hを32で割った商をiとすると、ビット列検索部421より、z本の配列のi番目の要素から、kに該当した部分だけにビットが立った32ビット整数を取得し、順にSelectを計算しm−n回目にビットが出現した位置を求めることができる。
このように、辞書1042を用いることにより、Selectを計算する範囲が絞られることから、高速な計算が可能となる。
<K進数列Lookup計算部420の処理>
K進数列Lookup(q)計算部420は、K進数列記録構造104に保持されたK進数列データのqの位置にある数字を結果として返す。位置qを所定のビット幅で割ったときの商をx、余りをyとする。K進数列記録構造104に保持された各z本の整数配列に対し、x+1番目の配列にある整数を表現したビット列のy番目のビットが0か1になっているかを調べることで、K進数列データの位置qにある数字の2進数表現を取得できる。そして、この2進数表現を10進数表現などへ変換することで、目的の数字を得る。
ビット列検索部421では、CPU401は、0からK−1の範囲にある数字kと配列番号iについて、K進数列記録構造104に保持されているz本の整数配列データから、各配列にあるi番目の整数から、数字kに関連する部分だけビットが立ったビット列で表現される整数を計算する。尚、整数型としては、32ビット型整数、64ビット型整数等が考えられる。
図13は、本実施形態のビット列検索部421で行われる処理の一例を示すフローチャートである。以下、ビット列検索部421の各処理について説明する。
ビット列検索部421を実行するCPU401は、ステップS601で数字kのz桁を2進数で表したときの2進数列をgとする。また、ステップS602でCPU401は、整数を表す変数をwとする。そして、ステップS603でCPU401は変数wに1本目の配列のi番目の要素を代入する。
ステップS604,S605では、2進数列gの先頭の数字が0の時、変数wをビット反転させる。そして、ステップ606では2進数列gの先頭の数字を削除する。
ステップS607でCPU401は、配列の番号を表す変数をjとし、この変数jに2をセットする。
次に、ステップS608,S609,S610でCPU401は、2進数列gの先頭の数字が1のとき、変数wとj本目の配列のi番目の要素で論理積を演算して、変数wに代入する。一方、2進数列gの先頭の数字が0のとき、ステップ610で変数wと、j本目の配列のi番目の要素をビット反転した値の論理積を演算して変数wに代入する。
ステップS611でCPU401は、2進数列gの先頭の数字を削除する。そして、ステップS612でCPU401は、変数jに1を加算する。ステップS613では2進数列gの要素がなくなるまで、CPU401は上記ステップS608〜S612までの処理を繰り返す。CPU401は、全ての2進数列gの要素について上記処理が完了すると、ステップS614で変数wを、結果として出力する。
以下、上記各処理の具体例について図14〜図17を用いて説明する。
図14は、本発明の実施形態において、K進数列のKが「4」の場合について、数列データ検索装置1へ入力された数列データ101=「3141042103」からK分木を構築する一例である。
図14において、数字0、1、2、3、4は、4進数により接頭語条件を満たす形で、それぞれ、00、1、01、2、3と割り振られる。K分木構築部408によるK分木の構築では、K分木105が各数字に予め割り当てられたK進数表現に即して枝を伸ばしていく形で構築されており、各数字に割り当てられたK進数表現に即した形で子ノードを辿ることで、検索対象の葉ノードに到達できる。図14において、K分木構築部408によって構築された4分木(1401)でも、数字0が根ノードから図4のステップS102〜S105に示した形で4分木を構成する。そして、根ノードから図中、「0」、「0」と辿ることで、数字0に対応した葉ノードに達していることが分かる。他の数字についても、同様に割り当てられた4進数表現に即して子ノードを辿ることで、数字に対応した葉ノードに到達していることが分かる。
4分木1401への数列データ101の登録について、数列データ101=「3141042103」を用いて図14の一例を説明する。
上記図5のステップS202〜S203で、先頭の数字「3」を数列データ101から取り出し、数列データ101の先頭からは削除する。数字「3」に対応する4進数表現は「2」である。上記図5のステップS205〜S210では、4進数表現から4分木を辿りながら、各ノードに対応した4進数を登録している。
数字「3」に対応する4進数表現の長さは「1」で値は「2」であるため、根ノードに「2」を登録して終了となる。数字「3」に続いてデータに存在する「1」、「4」、「1」もそれぞれ、4進数表現は長さ1の「1」,「3」,「1」であるため、順に根ノードに数字「3」のときに続き、「2131」が登録される。数字「0」に対応する4進数表現は「00」であるため、根ノードに4進数表現の先頭の数字0を登録した後、図5のステップS209にあるように「0」に対応する子ノード1402へ移動し、4進数表現の次の数字「0」を、現在いるノード1402へ登録し、終了する。残りの数字についても同様な形で登録を行うことで、図14にある形で葉ノード以外のノードにおいても4進数列が登録される。
<K進数表現について>
K進数表現については、前記背景技術の図19と同様であり、本実施形態では前記背景技術の2進数表現に代わって4進数表現を用いた例を示している。本実施形態では、数列データ101=「3141042103」にある数字0、1、2、3、4への4進数表現の一例と、その4進数表現によって生成されたウェーブレット木を構成する4分木と4分木内に登録されたデータを示している。
図14において、上述のように数字「0」は「00」と4進数で表現され、数字「1」は「1」と4進数で表現され、数字「2」は「01」と4進数で表現され、数字「3」は「2」と4進数で表現され、数字「4」は「3」と4進数で表現される。
図中根ノードからの分岐を4進数表現に合わせて0、1と辿ることで、数字「2」に対応した葉ノードへ到達できる。各数字の4進数表現は、数字に対応した子ノードへ到達するための分岐に対応している。
根ノードでのビット列の登録について、図14では10進数の数字「0」、「2」は4進数表現の先頭の数字1403が「0」で長さが2であるので、先頭の数字1403=「0」のみを登録する。一方、「1」、「3」、「4」は、数字1403から「1」、「2」、「3」に変換される。このため、数列データ101=「3141042103」において、「0」、「2」を「0」に変換し、「3」を「2」に変換し、「4」を「3」に変換することで得られる、「2131030102」という4進数列が根ノードに登録される。
そして、根ノードから「0」の方向にある子ノード1402で、10進数の数字「0」、「2」は、4進数表現の次の桁にある数字1404から4進数の数字「0」、「1」に対応していることから、数列データ「3141042103」のうち10進数の数字「0」、「2」からなる部分数列を数字1404にある4進数から「010」として生成された4進数列がノード1402に登録される。他の葉ノード以外のノードでも同様な形で部分数列が生成され、上述の4進数列で各ノードに登録される。
<Rank計算の一例>
図15〜図17は、図14において構築された4分木におけるRank計算の一例を示している。
図15では、次の手順でRank(2,7)の計算をしている。「2」の4進数表現は図14より「01」である。上記図9のステップS304で示したように、上記4進数表現により数列データ101を4進数列へ変換した値「2131030102」が根ノードに保持される。そして、根ノードに保持された4進数列「2131030102」からなる数列データ1501についてRank(0,7)を計算し、結果である「2」を次のRankにおける数列の位置に設定する。
図9に示したステップS305で、根ノードから「0」に対応した子ノード1502に移動し、現在いるノード1502において保持された数列「010」について、Rank(1,2)を計算する。そして、最終結果である「1」を得ることができる。4進数におけるRank計算はK進数列Rank計算部418で行われるが、この処理は次の図16で説明する。
図16では、4進数列におけるRank(c,p)の計算について説明する。4進数を保持する多段ビット列1041を構成する整数配列の整数型を32ビットとし、位置pを32で割った商をq、余りをrとする。また、商q番目より前においては、q−1番目の配列までにおける数cのRankが検索用の辞書1042に計算されており、この例では「20」であったとする。この時、Rank(c,p)はq番目までの配列おける検索対象の数字cの数、q+1番目の配列におけるRank(c,r)と上記「20」を足した数となる。
各配列における4進数列は、実際は多段ビット列1041として記録されているため、多段ビット列1041から数cに対応したビットのみ立っている32ビットを抽出し、Rank(1,r)を計算すればよい。
図17では、4進数列を格納している多段ビット列1041から、「2」に対応したビットのみが立っているビット列を取り出している。「2」の2進数表現は「10」であるため、上記図13に示したステップS603〜S611であるように、図中ビット列1はそのままにするが、図中ビット列2はビット反転を行い、論理積を計算する。この処理により、「2」に対応したビットのみが立つ(1となる)ビット列を取り出すことができる。数「0」、「1」、「3」についても同様の操作で所望のビット列を取り出すことができる。ビット反転と論理積の計算は非常に高速に計算することができるため、他の処理のオーバーヘッドに比べ、非常に軽い計算となる。
図15〜図17を用いて、Rank計算についての例を示したが、Select、Lookup計算でも上記Rankと同様の方法で計算が可能である。このように、4分木化することで木の探索段数は半減する一方、各ノードでの計算はビット演算分増加した程度であり、計算の負荷はほとんど変わらないため、2分木の場合の約2倍高速に計算することができる。葉ノード以外のノードで登録される辞書1042は非特許文献1の構成法によるSuccinct Bit Vectorと同様であり、「0」から「3」に対応するものをそれぞれ構成した場合、数列データの長さnに対し、辞書1042のサイズは、少なくとも、
4*2*n*lg(lg(n))/lg(n)ビット
となる。
本発明によれば、データサイズが10GBとなるような長さ40億の4進数に対して、辞書1042のデータ量は5.8GBとなり、前記従来例のSuccinct Bit VectorをK進数へ拡張したものの半分のサイズとなっている。
以上、本発明の各実施形態について説明したが、上記実施形態は本発明の適用例を示したものであり、本発明の技術的範囲を上記各実施形態の具体的構成に限定する趣旨ではない。本発明の要旨を逸脱しない範囲において種々変更可能である。
以上のように、本発明は、数列データを圧縮した状態で保持しながら、高速なデータアクセスを実現するための技術であり、数列データを文字列データに置き換えることで文字列や文書検索の要素技術として利用可能である。高速に文字列や文書検索を行う場合、できる限り多くの情報を効率よくメモリ上に展開することが有効であるため、メモリ使用量を抑えながら高速なデータアクセスを実現する本発明は、高速な情報検索装置に利用することができる。
1 数列データ検索装置
104 K進数列記録構造
105 K分木
107 多分岐ウェーブレット木データ部
401 CPU(中央演算装置)
402 主記憶装置
403 補助記憶装置
404 リムーバブルメディア
405 ネットワーク
406 インターフェース部
407 多分岐ウェーブレット木データ構築部
408 K分木構築部
409 数列登録部
410 K進数列記録構造構築部
411 K進数列登録部
412 辞書作成部
413 検索部
414 Rank計算部
415 Select計算部
416 Lookup計算部
417 K進数列検索部
418 K進数列Rank計算部
419 K進数列Select計算部
420 K進数列Lookup計算部
421 ビット列検索部

Claims (12)

  1. プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納する記憶装置と、を備え、入力された数列データを保持し、検索クエリを受け付けて、前記受け付けた前記検索クエリから前記数列データを検索する数列データ検索装置であって、
    前記数列データの分岐数Kを受け付けて、前記数列データからK分木を構築するK分木構築部と、
    前記分岐数Kから前記数列データをK進数列に変換し、前記構築したK分木のうち葉ノード以外のノードにおいて、分岐数Kの2を底とする対数と等しいかより大きい整数の中で最小の値zを算出し、前記K進数列の0からK−1の各数字を前記最小の値z桁で2進数列化し、前記最小の値z本のビット列に各桁を格納する多段ビット列を含む多分岐ウェーブレット木データ構築部と、
    前記検索クエリに含まれる検索対象の数字の位置のビットが所定値であるビット列を前記多段ビット列から求める検索を備えたことを特徴とする数列データ検索装置。
  2. 請求項1に記載の数列データ検索装置であって、
    前記数列データの0からK−1の各数字に対して、前記数列データ上の位置pまでに出現する回数を返すRankを計算した結果を辞書として保持する辞書作成部をさらに備え、
    前記検索部は、
    前記辞書の範囲外における前記数列データ上の位置について、前記多段ビット列から検索クエリに含まれる数字のビットが所定の値であるビット列を求めるビット列検索部と、
    前記辞書と前記ビット列検索部を用いて、検索クエリに含まれる数字について前記多段ビット列における前記Rankを計算するRank計算部と、を備えたことを特徴とする数列データ検索装置。
  3. 請求項1に記載の数列データ検索装置であって、
    前記数列データの0からK−1の各数字に対して、前記数列データ上の出現回数がn回となる位置を返すSelectを計算した結果を辞書として保持する辞書作成部をさらに備え、
    前記検索部は、
    前記辞書の範囲外における前記数列データ上の出現回数について、前記多段ビット列から検索クエリに含まれる数字のビットが所定の値であるビット列を求めるビット列検索部と、
    前記辞書と前記ビット列検索部を用いて、検索クエリに含まれる数字について前記多段ビット列における前記Selectを計算するSelect計算部と、を備えたことを特徴とする数列データ検索装置。
  4. 請求項1に記載の数列データ検索装置であって、
    前記検索部は、
    前記数列データの0からK−1の各数字に対して、前記多段ビット列から所定のビットが所定値のビット列を求めることにより前記多段ビット列からLookupの計算を実行するLookup計算部と、をさらに備えたことを特徴とする数列データ検索装置。
  5. プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備えた計算機で、入力された数列データを保持し、検索クエリを受け付けて、前記受け付けた前記検索クエリから前記数列データを検索する数列データ検索方法であって、
    前記プロセッサが、前記数列データの分岐数Kを受け付けて、前記数列データからK分木を構築する第1のステップと、
    前記プロセッサが、前記分岐数Kから前記数列データをK進数列に変換し、前記構築したK分木のうち葉ノード以外のノードにおいて、分岐数Kの2を底とする対数と等しいかより大きい整数の中で最小の値zを算出し、前記K進数列の0からK−1の各数字を前記最小の値z桁で2進数列化し、前記最小の値z本のビット列に各桁を格納する多段ビット列を含む多分岐ウェーブレット木データを構築する第2のステップと、
    前記プロセッサが、前記検索クエリに含まれる検索対象の数字の位置のビットが1であるビット列を前記多段ビット列から求める第3のステップと、
    を含むことを特徴とする数列データ検索方法。
  6. 請求項5に記載の数列データ検索方法であって、
    前記プロセッサが、前記数列データの0からK−1の各数字に対して、前記数列データ上の位置pまでに出現する回数を返すRankを計算した結果を辞書として保持する第4のステップと、
    前記プロセッサが、前記辞書の範囲外における前記数列データ上の位置について、前記多段ビット列から検索クエリに含まれる数字のビットが所定の値であるビット列を求める第5のステップと、
    前記プロセッサが、前記辞書と前記ビット列を用いて、検索クエリに含まれる数字について前記多段ビット列における前記Rankを計算する第6のステップと、をさらに含むことを特徴とする数列データ検索方法。
  7. 請求項5に記載の数列データ検索方法であって、
    前記プロセッサが、前記数列データの0からK−1の各数字に対して、前記数列データ上の出現回数がn回となる位置を返すSelectを計算した結果を辞書として保持する第7のステップと、
    前記プロセッサが、前記辞書の範囲外における前記数列データ上の出現回数について、前記多段ビット列から検索クエリに含まれる数字のビットが所定の値であるビット列を求める第8のステップと、
    前記プロセッサが、前記辞書と前記ビット列を用いて、検索クエリに含まれる数字について前記多段ビット列における前記Selectを計算する第9のステップと、をさらに含むことを特徴とする数列データ検索方法。
  8. 請求項5に記載の数列データ検索方法であって、
    前記数列データの0からK−1の各数字に対して、前記多段ビット列から所定のビットが所定値のビット列を求めることにより前記多段ビット列からLookupの計算を実行する第10のステップ、をさらに含むことを特徴とする数列データ検索方法。
  9. プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備えた計算機で、入力された数列データを保持し、検索クエリを受け付けて、前記受け付けた前記検索クエリから前記数列データを検索するプログラムであって、
    前記数列データの分岐数Kを受け付けて、前記数列データからK分木を構築する第1のステップと、
    前記分岐数Kから前記数列データをK進数列に変換し、前記構築したK分木のうち葉ノード以外のノードにおいて、分岐数Kの2を底とする対数と等しいかより大きい整数の中で最小の値zを算出し、前記K進数列の0からK−1の各数字を前記最小の値z桁で2進数列化し、前記最小の値z本のビット列に各桁を格納する多段ビット列を含む多分岐ウェーブレット木データを構築する第2のステップと、
    前記検索クエリに含まれる検索対象の数字の位置のビットが1であるビット列を前記多段ビット列から求める第3のステップと、
    を前記計算機に実行させることを特徴とするプログラム。
  10. 請求項9に記載のプログラムであって、
    前記数列データの0からK−1の各数字に対して、前記数列データ上の位置pまでに出現する回数を返すRankを計算した結果を辞書として保持する第4のステップと、
    前記辞書の範囲外における前記数列データ上の位置について、前記多段ビット列から検索クエリに含まれる数字のビットが所定の値であるビット列を求める第5のステップと、
    前記辞書と前記ビット列を用いて、検索クエリに含まれる数字について前記多段ビット列における前記Rankを計算する第6のステップと、をさらに含むことを特徴とするプログラム。
  11. 請求項9に記載のプログラムであって、
    前記数列データの0からK−1の各数字に対して、前記数列データ上の出現回数がn回となる位置を返すSelectを計算した結果を辞書として保持する第7のステップと、
    前記辞書の範囲外における前記数列データ上の出現回数について、前記多段ビット列から検索クエリに含まれる数字のビットが所定の値であるビット列を求める第8のステップと、
    前記辞書と前記ビット列を用いて、検索クエリに含まれる数字について前記多段ビット列における前記Selectを計算する第9のステップと、をさらに含むことを特徴とするプログラム。
  12. 請求項9に記載のプログラムであって、
    前記数列データの0からK−1の各数字に対して、前記多段ビット列から所定のビットが所定値のビット列を求めることにより前記多段ビット列からLookupの計算を実行する第10のステップ、をさらに含むことを特徴とするプログラム。
JP2012016524A 2012-01-30 2012-01-30 数列データ検索装置、数列データ検索方法及びプログラム Expired - Fee Related JP5736589B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012016524A JP5736589B2 (ja) 2012-01-30 2012-01-30 数列データ検索装置、数列データ検索方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012016524A JP5736589B2 (ja) 2012-01-30 2012-01-30 数列データ検索装置、数列データ検索方法及びプログラム

Publications (2)

Publication Number Publication Date
JP2013156822A JP2013156822A (ja) 2013-08-15
JP5736589B2 true JP5736589B2 (ja) 2015-06-17

Family

ID=49051939

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012016524A Expired - Fee Related JP5736589B2 (ja) 2012-01-30 2012-01-30 数列データ検索装置、数列データ検索方法及びプログラム

Country Status (1)

Country Link
JP (1) JP5736589B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6251437B1 (ja) * 2017-05-26 2017-12-20 義尚 神山 分類用符号生成ソフトウェアを記録した記録媒体
CN109376281B (zh) * 2018-09-21 2021-10-22 长沙学院 比特位序列、数据搜索方法、搜索系统、社会网络分析系统、舆情监控系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02294875A (ja) * 1989-05-10 1990-12-05 Hokkaido Nippon Denki Software Kk データ検索方式
US6594655B2 (en) * 2001-01-04 2003-07-15 Ezchip Technologies Ltd. Wildcards in radix- search tree structures
JP2003296157A (ja) * 2002-03-29 2003-10-17 Fujitsu Ltd データ記憶装置、データ処理装置、データ処理方法、データ処理プログラム
US20030236793A1 (en) * 2002-06-19 2003-12-25 Ericsson Inc. Compressed prefix tree structure and method for traversing a compressed prefix tree

Also Published As

Publication number Publication date
JP2013156822A (ja) 2013-08-15

Similar Documents

Publication Publication Date Title
Policriti et al. LZ77 computation based on the run-length encoded BWT
JP6028567B2 (ja) データ格納プログラム、データ検索プログラム、データ格納装置、データ検索装置、データ格納方法及びデータ検索方法
JP3672242B2 (ja) パターン検索方法、パターン検索装置、コンピュータプログラム及び記憶媒体
CN109326325B (zh) 一种基因序列比对的方法、系统及相关组件
JP6476647B2 (ja) 圧縮プログラム、圧縮装置、圧縮方法、伸長プログラム、伸長装置および伸長方法
JP6447161B2 (ja) 意味構造検索プログラム、意味構造検索装置、及び意味構造検索方法
JP4114600B2 (ja) 可変長文字列検索装置及び可変長文字列検索方法並びにプログラム
US9397696B2 (en) Compression method, compression device, and computer-readable recording medium
US20220277139A1 (en) Computer-readable recording medium, encoding device, index generating device, search device, encoding method, index generating method, and search method
US10049164B2 (en) Multidimensional-range search apparatus and multidimensional-range search method
JPH09245043A (ja) 情報検索装置
JP5736589B2 (ja) 数列データ検索装置、数列データ検索方法及びプログラム
Policriti et al. From LZ77 to the run-length encoded Burrows-Wheeler transform, and back
US20120284279A1 (en) Code string search apparatus, search method, and program
Mishra et al. Fast pattern matching in compressed text using wavelet tree
JP2007048318A (ja) リレーショナルデータベースの処理方法およびリレーショナルデータベース処理装置
KR101679011B1 (ko) 데이터베이스에서 데이터 이동을 처리하는 방법 및 장치
JP6666312B2 (ja) 多次元データ管理システム及び多次元データ管理方法
JP5582358B2 (ja) 文書検索システム、文書検索方法、及びプログラム
JP2011257877A (ja) 情報検索装置、情報検索方法、及びプログラム
KR20190139227A (ko) K-부정합 검색을 위한 필터를 생성하는 시스템 및 방법
JP6589317B2 (ja) 書換装置、処理方法とそのプログラム、および、情報処理装置
JP6512294B2 (ja) 圧縮プログラム、圧縮方法および圧縮装置
JP5472929B2 (ja) 文書検索装置、文書検索方法及び文書検索プログラム
Tischler Low space external memory construction of the succinct permuted longest common prefix array

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140516

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141021

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141111

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141212

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150326

R150 Certificate of patent or registration of utility model

Ref document number: 5736589

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees