JP2011257877A - 情報検索装置、情報検索方法、及びプログラム - Google Patents
情報検索装置、情報検索方法、及びプログラム Download PDFInfo
- Publication number
- JP2011257877A JP2011257877A JP2010130404A JP2010130404A JP2011257877A JP 2011257877 A JP2011257877 A JP 2011257877A JP 2010130404 A JP2010130404 A JP 2010130404A JP 2010130404 A JP2010130404 A JP 2010130404A JP 2011257877 A JP2011257877 A JP 2011257877A
- Authority
- JP
- Japan
- Prior art keywords
- node
- information
- tree
- array
- complete binary
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】パトリシア木を用いた情報検索を従来技術よりも効率良く行うための技術を提供する。
【解決手段】パトリシア木から目的のキー情報を検索する情報検索装置において、パトリシア木を格納する情報格納手段と、前記情報格納手段に格納された前記パトリシア木から前記キー情報を検索する情報検索手段とを備え、前記情報格納手段に格納された前記パトリシア木において完全二分木となる部分木が配列で表現されており、前記情報検索手段は、前記キー情報を検索する際に、前記配列を参照することにより前記完全二分木となる部分木を探索するように構成する。
【選択図】図1
【解決手段】パトリシア木から目的のキー情報を検索する情報検索装置において、パトリシア木を格納する情報格納手段と、前記情報格納手段に格納された前記パトリシア木から前記キー情報を検索する情報検索手段とを備え、前記情報格納手段に格納された前記パトリシア木において完全二分木となる部分木が配列で表現されており、前記情報検索手段は、前記キー情報を検索する際に、前記配列を参照することにより前記完全二分木となる部分木を探索するように構成する。
【選択図】図1
Description
本発明は、文字列等の情報の中から、目的とする情報を検索するための技術に関連するものである。
文字列等の情報の集合を保存し、検索できるようにするための手法として、従来からパトリシア木が知られている(例えば、非特許文献1)。パトリシア木は文字列の長さが一定でない場合の効率が良いことや、N個の文字列を格納するために必要な木の節点がN個だけで済むという特徴があることなどから広く利用されている。
アルゴリズム 第2巻 R.セジウィック著 (野下浩平、 星守、 佐藤創、 田口東 共訳)、 近代科学社、第68〜72頁
しかし、パトリシア木は木の各節点が2つのポインタを持つため、ポインタをたどる処理が速度低下の原因となっていた。このような速度低下は、ハードディスク等の二次記憶上にパトリシア木のデータを保持した場合に顕著となるが、仮にすべてのパトリシア木のデータを一次記憶上に保持した場合でも速度低下は問題となる。
なぜなら、多くのコンピュータは、CPU速度と比べてメモリの速度が相対的に遅いという問題を軽減するためにキャッシュメモリを保持しており、キャッシュメモリはある程度連続したメモリ領域に対応づけるものであるので、ポインタによって毎回異なるメモリ領域を利用する場合にはメモリ参照の効率が悪化してしまうからである。
一方、パトリシア木をポインタではなく、配列を用いて実現することにより速度を向上する仕組みが知られているが、従来の配列を用いる仕組みでは、新しい文字列を追加したり、既存の文字列を削除する場合の効率が悪いという問題があった。
本発明は上記の点に鑑みてなされたものであり、パトリシア木を用いた情報検索を従来技術よりも効率良く行うための技術を提供することを目的とする。
上記の課題を解決するために、本発明は、パトリシア木から目的のキー情報を検索する情報検索装置であって、パトリシア木を格納する情報格納手段と、前記情報格納手段に格納された前記パトリシア木から前記キー情報を検索する情報検索手段とを備え、前記情報格納手段に格納された前記パトリシア木において、完全二分木となる部分木が配列で表現されており、前記情報検索手段は、前記キー情報を検索する際に、前記配列を参照することにより前記完全二分木となる部分木を探索することを特徴とする情報検索装置として構成できる。
前記配列は、前記完全二分木となる部分木の各節点におけるビット位置指示用添字と、当該部分木における葉節点からのポインタとを格納して構成される。また、前記配列は更に、前記完全二分木となる部分木の各節点におけるキー情報へのポインタを格納することとしてもよい。
また、前記パトリシア木の各節点において、当該節点を完全二分木の頂点とみなした場合に、何段目までが完全二分木になっているかを示す値を完全二分木高さとして保持するようにしてもよい。
また、前記情報検索装置は、入力されたキー情報を新規追加節点として前記パトリシア木に挿入する情報挿入手段を備えてもよく、前記新規追加節点が前記パトリシア木の末端に追加される場合において、前記情報挿入手段は、前記新規追加節点を末端とする部分木における所定の数だけ上位にある節点の完全二分木高さが、前記所定の数であるか否かを確認し、所定の数である場合に、当該部分木を完全二分木であると判定し、当該完全二分木を配列で表現するための変換処理を行う。
また、前記新規追加節点が前記パトリシア木の末端以外の部分に追加される場合においては、前記情報挿入手段は、前記新規追加節点の子節点が、配列で表現されているか否かを確認し、配列で表現されている場合に、当該配列表現をポインタで表現するための変換処理を行う。
また、本発明は、上記情報検索装置が実行する情報検索方法として構成することができる。更に、本発明は、コンピュータを、上記情報検索装置における各手段として機能させるためのプログラムとして構成することもできる。
本発明によれば、 パトリシア木を用いた情報検索を従来技術よりも効率良く行うことが可能となり、二次記憶やキャッシュと組合せた場合でも速度の劣化を最小限に防ぎながら、情報の集合の中から目的の情報を検索することが可能となる。
以下、図面を参照して本発明の実施の形態を説明する。
(装置構成、パトリシア木の概要)
図1に、本発明の実施の形態に係る情報検索装置10の機能構成図を示す。図1に示すように、本実施の形態に係る情報検索装置10は、入力部11、情報検索部12、情報挿入部13、出力部14、データ格納部15を備える。入力部11は、検索の目的となるキーや、パトリシア木に追加する情報を入力するための機能部である。情報検索部12は、入力されたキーに基づき、本発明に係るパトリシア木の構造を有するデータを検索し、検索結果を出力部14に渡す機能部である。情報挿入部13は、パトリシア木に情報を追加するための機能部である。出力部14は、検索結果を出力する機能部である。
図1に、本発明の実施の形態に係る情報検索装置10の機能構成図を示す。図1に示すように、本実施の形態に係る情報検索装置10は、入力部11、情報検索部12、情報挿入部13、出力部14、データ格納部15を備える。入力部11は、検索の目的となるキーや、パトリシア木に追加する情報を入力するための機能部である。情報検索部12は、入力されたキーに基づき、本発明に係るパトリシア木の構造を有するデータを検索し、検索結果を出力部14に渡す機能部である。情報挿入部13は、パトリシア木に情報を追加するための機能部である。出力部14は、検索結果を出力する機能部である。
本実施の形態における検索結果は、例えば、パトリシア木のデータに目的のキーが存在したか否か(検索成功/失敗)を示す情報でもよいし、パトリシア木が文書集合から作成されている場合等においては、目的のキーが存在した文書と、キーの文書中の位置を示す情報であってもよい。
本実施の形態において、データ格納部15は、メモリ(一次記憶装置)であり、各処理機能部は、このメモリに対してデータ読み書きを行って、本実施の形態での処理を行うことを想定している。つまり、後述する配列の領域等は、メモリにおいて確保される領域である。ただし、これは一例であり、本発明に係る処理は、記憶装置の用い方に依存せずに実行できる。例えば、データ格納部15がハードディスク等の二次記憶装置であり、情報検索部12と情報挿入部13はそれぞれ、データ格納部15から適宜パトリシア木のデータを読み出して、自身が備えるメモリ(一次記憶装置)を用いてパトリシア木に関わる処理を行うこととしてもよい。
データ格納部15には、本発明の実施の形態に係るパトリシア木の構造のデータが格納される。
本発明の実施の形態では、パトリシア木の部分木のうち完全二分木となっている部分を配列で表現することにより、キーの検索時に、当該部分木内を走査する場合に必要だったポインタをたどる作業をなくし、配列を実現している連続したメモリ領域への参照を行うことにより、検索を効率的に行い、処理速度を向上させている。以下、このパトリシア木について説明する。
本発明の実施の形態では、パトリシア木の部分木のうち完全二分木となっている部分を配列で表現することにより、キーの検索時に、当該部分木内を走査する場合に必要だったポインタをたどる作業をなくし、配列を実現している連続したメモリ領域への参照を行うことにより、検索を効率的に行い、処理速度を向上させている。以下、このパトリシア木について説明する。
図2は、パトリシア木の例を示す図である。図の各節点中、左上の#記号の後ろの数字は節点番号を示し、右上の文字はその節点に対応するキーを示し、左下のcの後ろの数字はその節点で、検索対象のキーのどのビットを検査すべきかを示す数(ビット位置指示用添字)である。
従来の一般的なパトリシア木においては、図2に示すデータ構造がポインタを用いて実現されている。すなわち、各節点において、節点に対応する記憶領域に、節点のデータ(ビット位置指示用添字、キー等)と、次のリンク先へのポインタ(左の子節点へのポインタと、右の子節点へのポインタ等)とが格納された構造になっている。以降、ポインタ表現といった場合、このような構造であるものとする。
このようなパトリシア木を用いた検索では、検索対象のキーが与えられたときに、頂点から始まって、各節点において、検索対象のキーにおけるビット位置指示用添字で指示されるビット位置の値が1であれば右に進み、0であれば左に進むことを繰り返し、上を指すリンクで指された節点のキーと、検索対象のキーとを比較して、検索成功/否成功を判定している。
前述したとおり、従来では、一般に、パトリシア木をポインタを用いて実現しており、上記検索を行うために、ポインタをたどる処理を行っていた。そのため、効率が良くなかった。
そこで、本発明の実施の形態では、完全二分木が1次元配列で実現できることに着目し、パトリシア木の中で、完全二分木となっている部分木(部分完全二分木と呼ぶ)を配列で実現することとしている。
具体的には、まず、パトリシア木において、新しい属性として、「完全二分木高さ」を導入する。これは、パトリシア木におけるある節点を完全二分木の頂点(0段目)とした場合に、何段(何ランク)分までが完全二分木になっているかを示すための値である。この値は、各節点に属性として与えられ、各節点に対応する記憶領域に格納される。例えば、図3に示す高さが2である完全二分木の節点Aには、「完全二分木高さ」として2が付与される。
具体的には、まず、パトリシア木において、新しい属性として、「完全二分木高さ」を導入する。これは、パトリシア木におけるある節点を完全二分木の頂点(0段目)とした場合に、何段(何ランク)分までが完全二分木になっているかを示すための値である。この値は、各節点に属性として与えられ、各節点に対応する記憶領域に格納される。例えば、図3に示す高さが2である完全二分木の節点Aには、「完全二分木高さ」として2が付与される。
ここで、高さh(hは0以上の整数)の部分完全二分木を構成する節点の数は、2(h+1)-1個である。また、葉節点(部分完全二分木の終端にある節点)の数は2h個である。そして、高さh(hは0以上の整数)の部分完全二分木を、2(h+1)-1個のビット位置指示用添字を記した数値の列と、部分完全二分木中の葉節点からの2h+1個のポインタの列からなる配列で表現する。いずれの列も、部分完全二分木における値を幅優先で並べる。一例として、図4に示す枠で囲んだ部分である高さ2の部分完全二分木を表す配列の例を図5に示す。
なお、部分完全二分木の高さhについては、メモリやディスクからの読み込み単位やキャッシュラインのサイズに配列の大きさが収まるように事前に値を定める。また、上記以外でパトリシア木の節点が保管してある情報、例えば、キー情報そのものを保持している領域へのポインタ等は必要に応じて、2(h+1)-1個の要素の配列を準備し、保持する。この場合の例を図6に示す。図6の例は、図4の例に対応させており、図6において、番地1、番地2、番地3、番地4、番地5、番地6、番地7には、それぞれ、図4に示す節点#1、節点#3、節点#4、節点#6、節点#7、節点#8、節点#9のキー情報が格納される。
なお、部分完全二分木の高さhについては、メモリやディスクからの読み込み単位やキャッシュラインのサイズに配列の大きさが収まるように事前に値を定める。また、上記以外でパトリシア木の節点が保管してある情報、例えば、キー情報そのものを保持している領域へのポインタ等は必要に応じて、2(h+1)-1個の要素の配列を準備し、保持する。この場合の例を図6に示す。図6の例は、図4の例に対応させており、図6において、番地1、番地2、番地3、番地4、番地5、番地6、番地7には、それぞれ、図4に示す節点#1、節点#3、節点#4、節点#6、節点#7、節点#8、節点#9のキー情報が格納される。
上記のように配列を用いることにより、部分完全二分木におけるキー検索処理については、配列内のデータのみを参照すればよくなり、検索処理を高速化できる。例えば、図4の節点#1からのキー検索では、図5に示す配列の最初(左端)の要素の値で示すビット値を見て、次に参照すべき配列内の次の節点に対応する要素を決定する。ここで、完全二分木では、親の番号がi(i=0, 1, 2,....)のとき、その左の子は2i+1となり、その右の子は2i+2となるので、この関係を用いて、配列内の参照すべき要素(検査ビット)の位置を決定できる。また、葉節点での検査では、検査の結果に応じた位置にあるポインタ列の要素を参照することになる。
情報検索装置10は、例えば、CPUやメモリ、ハードディスク等を備えた一般的なコンピュータに、各機能部に対応するプログラムを実行させることにより実現可能である。当該プログラムは、可搬メモリ等のコンピュータ読み取り可能な記録媒体に記録して配布してもよいし、ネットワーク上のサーバからダウンロードすることもできる。
(挿入時の処理)
次に、本実施の形態に係るパトリシア木の操作の例として、パトリシア木にキー文字列を挿入する処理について説明する。ここでは、図2のパトリシア木に「I」というキー文字列を追加する処理を説明する。なお、図4に示したパトリシア木は、以下で説明する処理を行って、図2のパトリシア木に「I」というキー文字列を追加した結果のパトリシア木である。
次に、本実施の形態に係るパトリシア木の操作の例として、パトリシア木にキー文字列を挿入する処理について説明する。ここでは、図2のパトリシア木に「I」というキー文字列を追加する処理を説明する。なお、図4に示したパトリシア木は、以下で説明する処理を行って、図2のパトリシア木に「I」というキー文字列を追加した結果のパトリシア木である。
また、図7は、図2に示すパトリシア木に、完全二分木高さを書き加え、「I」を追加する箇所を点線で囲って示したものである。各節点中の右下のkの後ろの数値が完全二分木高さを示す。例えば、図7に示す節点#1は、その下1段に2つの節点を持つ高さ1の完全二分木の頂点であることから、kとして1が記述されている。
図8は、本発明の実施の形態において、パトリシア木に新しいキーを挿入する時に、情報検索装置10が実行する処理の流れ図である。
ステップ1)まず、入力部11から追加対象のキーが入力され、情報挿入部13に渡される。以降の処理は、情報挿入部13が実行する処理である。
ステップ1)まず、入力部11から追加対象のキーが入力され、情報挿入部13に渡される。以降の処理は、情報挿入部13が実行する処理である。
ステップ2)情報挿入部13は、データ格納部15に既に格納されているパトリシア木のデータを参照することにより、受け取ったキーの文字列に対応する節点の木の中での位置を特定する。この特定のための手順は、従来のパトリシア木での手順と同一である。 本例では、図7に示す位置が特定される。
新しい節点は木の中間に挿入され左右のどちらかの子節点を1つ持つ場合と、パトリシア木の葉(リーフ)として追加され、子節点を1つも持たない場合とに分けられる。なお、左右のどちらか一方は新しいキー文字列自身を指すための図中点線で示された外部節点に対応するので、左右の両方に子節点を持つ場合は存在しない。
ステップ3)パトリシア木の根節点から新規追加節点の親節点までの各節点について、 新規追加節点の親節点から順に上向きに完全二分木高さの更新を行う。具体的には、下記のとおりである。
ステップ3)パトリシア木の根節点から新規追加節点の親節点までの各節点について、 新規追加節点の親節点から順に上向きに完全二分木高さの更新を行う。具体的には、下記のとおりである。
親節点の完全二分木高さは、左右の子節点のうち完全二分木高さが小さい側の値に1を加えた値である。ただし、左右の子節点を持たない場合、便宜上の子節点の完全二分木高さは -1と考え、 当該親節点の完全二分木高さは0とする。
例えば、 新規追加節点は左右の両方同時には子となる節点を持つことはないので、完全二分木高さは常に0である。したがって、新規追加節点の親節点が新規追加節点以外に子節点を持っている場合は、新規追加節点の完全二分木高さである0と、当該子節点の完全二分木高さ(0以上)とで、小さい値は0であるから、0 + 1 で、当該新規追加節点の親節点の完全二分木高さは1 となる。 もし、親節点が新規追加節点以外に子節点を持っていなければ、新規追加節点の完全二分木高さである0と、便宜上の子節点の完全二分木高さである-1とで小さい値である-1より、-1 + 1 で、 当該親節点の完全二分木高さは0となる。
例えば、 新規追加節点は左右の両方同時には子となる節点を持つことはないので、完全二分木高さは常に0である。したがって、新規追加節点の親節点が新規追加節点以外に子節点を持っている場合は、新規追加節点の完全二分木高さである0と、当該子節点の完全二分木高さ(0以上)とで、小さい値は0であるから、0 + 1 で、当該新規追加節点の親節点の完全二分木高さは1 となる。 もし、親節点が新規追加節点以外に子節点を持っていなければ、新規追加節点の完全二分木高さである0と、便宜上の子節点の完全二分木高さである-1とで小さい値である-1より、-1 + 1 で、 当該親節点の完全二分木高さは0となる。
ステップ4)新規追加節点がパトリシア木における葉節点(子節点を持たない末端の節点)として追加されたものかどうか確認する。確認の結果、Yesであればステップ5に進み、Noであればステップ8に進む。
ステップ5)ここでは、新規追加節点を葉とするような部分木が完全二分木になっているかどうかの確認を行う。この確認は、新規追加節点のh個上の節点の完全二分木高さが hであるかどうかを確認することにより行うことができる。確認の結果、Yesであればステップ6に進み、Noであればステップ7に進む。
ここで、一例として、 図7に示すパトリシア木での完全二分木高さの更新について具体的に説明する。「I」に対応する節点#8の完全二分木高さが0である(子節点を持たない)ことから、節点#4の完全二分木高さは、節点#8と節点#9の完全二分木高さの小さい側である0に1を加えた1となる。さらに、節点#3、節点#4の完全二分木高さが1であることから、節点#1の完全二分木高さは2となる。こうして、「I」を加えた後には、節点#1は高さ2の完全二分木の頂点となっていることが分かる。
ステップ6)ステップ5での確認の結果が、上記の図7の例の場合のようにYesである場合、すなわち、新規追加節点を末端とする部分木が高さhの完全二分木になっている場合は、後述するポインタ表現-配列表現変換操作を行う。
ステップ6)ステップ5での確認の結果が、上記の図7の例の場合のようにYesである場合、すなわち、新規追加節点を末端とする部分木が高さhの完全二分木になっている場合は、後述するポインタ表現-配列表現変換操作を行う。
ステップ7)ステップ5での確認の結果がNoである場合、新規追加節点は、そのままポインタ表現でパトリシア木に追加される。つまり、新規追加節点のデータ(ビット位置指示用添字、他の節点へのポインタ、キーなど)が、親節点からポインタで参照されるデータとして、パトリシア木に追加される。
ステップ8)ステップ4での確認結果がNoの場合、すなわち、新規追加節点がパトリシア木の中間に位置している場合、新規追加節点の子節点がポインタで表現されているか配列で表現されているかの確認を行う。確認の結果がYesであればステップ9に進み、Noであればステップ7(ポインタとして追加)に進む。
ステップ9)ステップ8の確認の結果、子節点が配列で表現されている場合、後述の配列表現-ポインタ表現変換操作を行う。
ステップ10)ステップ6、7、9のいずれかの処理を行った後、追加処理が完了する。
ステップ10)ステップ6、7、9のいずれかの処理を行った後、追加処理が完了する。
(ポインタ表現-配列表現変換操作)
次に、図8に示した処理の中のステップ6であるポインタ表現-配列表現変換操作を、図9の流れ図を参照して説明する。以下、図7の中の枠で囲んだ範囲の高さ2の部分完全二分木の例について説明する。
ステップ101)まず、高さh個の要素を格納できる配列を作成する。具体的には、2(h+1)-1個のビット位置指示用添字を格納するための配列と、部分完全二分木の2h個の葉節点からのポインタを格納するための配列を作成する。 この2つの配列は、連続する1つの配列としてもよいし、別々の配列としてもよい。本例では、連続する1つの配列とする。
次に、図8に示した処理の中のステップ6であるポインタ表現-配列表現変換操作を、図9の流れ図を参照して説明する。以下、図7の中の枠で囲んだ範囲の高さ2の部分完全二分木の例について説明する。
ステップ101)まず、高さh個の要素を格納できる配列を作成する。具体的には、2(h+1)-1個のビット位置指示用添字を格納するための配列と、部分完全二分木の2h個の葉節点からのポインタを格納するための配列を作成する。 この2つの配列は、連続する1つの配列としてもよいし、別々の配列としてもよい。本例では、連続する1つの配列とする。
図10に、図7中の枠で囲んだ範囲の高さ2の部分完全二分木のために作成された配列を示す。ここで作成した配列の番号を@1とする。なお、配列を作成するとは、情報検索装置10が備えるメモリ等の記憶手段において配列として使用する領域を確保することである。図10に示すように、本例では、ビット位置指示用添字用の領域として2(2+1)-1=7個の領域が確保され、部分完全二分木の葉節点(22=4個)からのポインタ用(1節点あたり2つ)として、8個の領域が確保されている。
ステップ102)2(h+1)-1個のビット位置指示用添字に対応する値(検査ビット)を配列に格納する。図11に、図7中の枠で囲んだ範囲の例における検査ビットを格納した配列を示す。
ステップ103)次に、部分完全二分木の2h個の葉節点からの2(h+1)個のポインタを格納する。葉節点1つあたり左右2つのポインタがあるため、ポインタ数は2(h+1)個となる。図12に、図7中の枠で囲んだ範囲の例における検査ビットと葉節点からのポインタとを格納した配列を示す。ここで、図6に示したように、キー文字列へのポインタを格納するための配列を作成して、キー文字列へのポインタを格納してもよい。図6のような場合も、これらの配列を全体として@1で識別する。
ここで、図12に示す例において、「#11」は節点#11へのポインタを示し、「@1:3」は配列@1の第3要素(つまり、図7での部分完全二分木における4番目の節点#6のデータ)へのポインタである。この第3要素は、例えば、図6に示す番地4(節点#6に対応)の領域を指すポインタである。
ステップ104)次に、この部分完全二分木の根節点を指していた上位節点のポインタを、新しく作成した配列へ張り替える。図7の例では、部分完全二分木の根節点#1を差していた上位節点#0のポインタを、新しく作成した配列@1に張り替える。
ステップ105)そして、これまで部分完全二分木を表現していたポインタをパトリシア木のデータから削除する。
図13に、図7の例に対して上記の処理を行った結果を示す。図7の該当部分が配列@1に置き換えられたことが示されている。
図13に、図7の例に対して上記の処理を行った結果を示す。図7の該当部分が配列@1に置き換えられたことが示されている。
(配列表現-ポインタ表現変換操作)
次に、図8に示した処理の中のステップ9である配列表現-ポインタ表現変換操作を、図14の流れ図を参照して説明する。
次に、図8に示した処理の中のステップ9である配列表現-ポインタ表現変換操作を、図14の流れ図を参照して説明する。
新規追加節点の子節点の属する配列内の全ての節点の要素のそれぞれに対して、部分完全二分木のリーフ側(つまり配列の後方)から、以下のステップ201〜204の処理を行う。
ステップ201)ポインタ表現での節点を作成する。具体的には、節点に対応する記憶領域を作成する。
ステップ202)処理対象の節点が、部分完全二分木の葉節点かどうか確認する。葉節点の場合、ステップ203に進み、そうでない場合、ステップ204に進む。
ステップ203)部分完全二分木の葉節点に対応するポインタとして、配列にもともと保持していた次節点のポインタをそのまま利用し、保持する。
ステップ204)部分完全二分木の葉節点ではない節点に関しては、対応する節点を指すポインタを格納する。つまり、部分完全二分木中の高さd(図7に示したkの更新後の値に対応)、左からi番目(i=0, 1, 2...)の節点の左の子節点は配列内の2d+1+ 2(i - 1) + 1番目だった節点、右の子節点は2d+1+ 2(i - 1) + 2番目だった節点を指すようにする。
ステップ205)上記のようにして配列内の全ての要素をポインタ表現に変換後、この部分完全二分木の根節点を指していた上位節点のポインタをポインタ表現とした当該根節点へ張り替える。
ステップ206)次に、これまで部分完全二分木を表現していた配列を削除する。
ステップ207)続いて、配列の分割によって、ポインタ表現変換前に配列で表現されていた木の一部を含むような部分木が再び高さhの完全二分部分木になっているかどうかを確認する。
具体的には、 配列で表現されていた部分木の上位の一部と、部分木のパトリシア木全体での上位節点とでの確認と、 配列で表現されていた部分木の下位の一部と、部分木のパトリシア木全体での下位節点とでの確認を行う。これらの確認により、再び高さhの部分完全二分木があった場合、ステップ208に進み、なければ処理を終了する。
ステップ206)次に、これまで部分完全二分木を表現していた配列を削除する。
ステップ207)続いて、配列の分割によって、ポインタ表現変換前に配列で表現されていた木の一部を含むような部分木が再び高さhの完全二分部分木になっているかどうかを確認する。
具体的には、 配列で表現されていた部分木の上位の一部と、部分木のパトリシア木全体での上位節点とでの確認と、 配列で表現されていた部分木の下位の一部と、部分木のパトリシア木全体での下位節点とでの確認を行う。これらの確認により、再び高さhの部分完全二分木があった場合、ステップ208に進み、なければ処理を終了する。
ステップ208)図9を参照して説明したポインタ表現-配列表現変換操作を行い、該当の部分完全二分木を配列表現に変換する。
(検索時の処理)
次に、キーの検索時の処理について説明する。ここでの処理は、情報検索装置10の情報検索部12が実行する。
(検索時の処理)
次に、キーの検索時の処理について説明する。ここでの処理は、情報検索装置10の情報検索部12が実行する。
検索時の節点決定の手順は基本的に従来のパトリシア木構造のデータを検索する処理と同様であり、各節点で検査ビットを調べて、ポインタをたどっていく処理を行う。ただし、親節点、子節点のいずれかが配列で表現されている場合は、以下の手順で配列内の要素を用いて検索を行う。
まず、親節点がポインタ表現で、子節点が配列表現である場合、子節点は配列で表現された部分完全二分木の根節点であるから、配列の先頭の要素を利用する。例えば、図7の枠内を配列にした図13の例において、節点#0でのキーの検査ビットのチェック結果により、配列側のリンクに進む場合において、まず、検査ビットとして、配列@1の先頭の要素(節点#3に対応する要素)を用いて検査を行う。
親節点が配列表現内であり、さらに親節点の部分木中での位置が葉節点ではない場合、子節点も配列中にあるのでそれを利用する。ここで、子節点の位置の特定方法は、配列内では幅優先で番号付けを行ったので、部分木中で、根節点からの高さ上からd段、左からi番目の節点は、配列内の2d+ i - 1番目の位置であり、また、その左右の子節点はそれぞれ、配列内の2d+1+ 2(i - 1) +1番目、2d+1+ 2(i - 1) + 2番目の位置であることを用いる。
例えば、上記の例で、配列@1の先頭の要素(節点#3に対応する要素)を用いて検査を行った結果、左に進むとの結果になった場合、ここではd=1,i=0であるから、配列における2d+1+ 2(i - 1) +1=3番目(0番目から数えて3番目)の要素であるビット位置1を、検索対象キーにおいて検査する。以降も同様である。
例えば、上記の例で、配列@1の先頭の要素(節点#3に対応する要素)を用いて検査を行った結果、左に進むとの結果になった場合、ここではd=1,i=0であるから、配列における2d+1+ 2(i - 1) +1=3番目(0番目から数えて3番目)の要素であるビット位置1を、検索対象キーにおいて検査する。以降も同様である。
親節点が配列表現内であり、さらに親節点の部分木中での位置がリーフである場合は配列内の対応するポインタをたどる。例えば、図7に対応する図13の例で、親節点(現在の節点)が、葉節点である節点#9(0番目から数えて6番目の要素)である場合に、検査の結果、右に進むことになった場合、ポインタ格納領域での最後の領域に格納されたポインタが指す位置(この場合、2番目である節点#4のキー情報等)に進む。
(実施の形態の効果)
以上説明したように、従来のパトリシア木を用いた検索では、ポインタをたどる操作により速度低下が発生していたところ、本発明の実施の形態に係る技術によれば、パトリシア木を部分的に配列表現としたので、その部分についてポインタをたどる操作を取り除くことができるので、速度劣化を防ぐことができる。
以上説明したように、従来のパトリシア木を用いた検索では、ポインタをたどる操作により速度低下が発生していたところ、本発明の実施の形態に係る技術によれば、パトリシア木を部分的に配列表現としたので、その部分についてポインタをたどる操作を取り除くことができるので、速度劣化を防ぐことができる。
また、完全二分木高さを保持することにより、パトリシア木において配列表現にできる完全二分木の部分を特定でき、木全体を走査することなく特定部分を配列表現とすることができるので、追加の操作による速度低下を防ぐことができる。
本発明は、文字列等の情報の中から、目的とする情報を検索するための技術に適用することができる。
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
10 情報検索装置
11 入力部
12 情報検索部
13 情報挿入部
14 出力部
15 データ格納部
11 入力部
12 情報検索部
13 情報挿入部
14 出力部
15 データ格納部
Claims (10)
- パトリシア木から目的のキー情報を検索する情報検索装置であって、
パトリシア木を格納する情報格納手段と、
前記情報格納手段に格納された前記パトリシア木から前記キー情報を検索する情報検索手段とを備え、
前記情報格納手段に格納された前記パトリシア木において、完全二分木となる部分木が配列で表現されており、前記情報検索手段は、前記キー情報を検索する際に、前記配列を参照することにより前記完全二分木となる部分木を探索する
ことを特徴とする情報検索装置。 - 前記配列は、前記完全二分木となる部分木の各節点におけるビット位置指示用添字と、当該部分木における葉節点からのポインタとを格納する
ことを特徴とする請求項1に記載の情報検索装置。 - 前記配列は更に、前記完全二分木となる部分木の各節点におけるキー情報へのポインタを格納する
ことを特徴とする請求項2に記載の情報検索装置。 - 前記パトリシア木の各節点において、当該節点を完全二分木の頂点とみなした場合に、何段目までが完全二分木になっているかを示す値を完全二分木高さとして保持する
ことを特徴とする請求項1ないし3のうちいずれか1項に記載の情報検索装置。 - 前記情報検索装置は、入力されたキー情報を新規追加節点として前記パトリシア木に挿入する情報挿入手段を備え、
前記新規追加節点が前記パトリシア木の末端に追加される場合において、前記情報挿入手段は、前記新規追加節点を末端とする部分木における所定の数だけ上位にある節点の完全二分木高さが、前記所定の数であるか否かを確認し、所定の数である場合に、当該部分木を完全二分木であると判定し、当該完全二分木を配列で表現するための変換処理を行う
ことを特徴とする請求項4に記載の情報検索装置。 - 前記新規追加節点が前記パトリシア木の末端以外の部分に追加される場合において、前記情報挿入手段は、前記新規追加節点の子節点が、配列で表現されているか否かを確認し、配列で表現されている場合に、当該配列表現をポインタで表現するための変換処理を行う
ことを特徴とする請求項5に記載の情報検索装置。 - パトリシア木から目的のキー情報を検索する情報検索装置が実行する情報検索方法であって、
前記情報検索装置は、パトリシア木を格納する情報格納手段を備え、
前記情報格納手段に格納された前記パトリシア木において、完全二分木となる部分木が配列で表現されており、前記情報検索装置は、前記パトリシア木から前記キー情報を検索する際に、前記配列を参照することにより前記完全二分木となる部分木を探索する
ことを特徴とする情報検索方法。 - 前記配列は、前記完全二分木となる部分木の各節点におけるビット位置指示用添字と、当該部分木における葉節点からのポインタとを格納する
ことを特徴とする請求項7に記載の情報検索方法。 - 前記配列は更に、前記完全二分木となる部分木の各節点におけるキー情報へのポインタを格納する
ことを特徴とする請求項8に記載の情報検索方法。 - コンピュータを、請求項1ないし6のうちいずれか1項に記載の情報検索装置における各手段として機能させるためのプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010130404A JP2011257877A (ja) | 2010-06-07 | 2010-06-07 | 情報検索装置、情報検索方法、及びプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010130404A JP2011257877A (ja) | 2010-06-07 | 2010-06-07 | 情報検索装置、情報検索方法、及びプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2011257877A true JP2011257877A (ja) | 2011-12-22 |
Family
ID=45474017
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2010130404A Pending JP2011257877A (ja) | 2010-06-07 | 2010-06-07 | 情報検索装置、情報検索方法、及びプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2011257877A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014006900A (ja) * | 2012-06-22 | 2014-01-16 | Palo Alto Research Center Inc | 圧縮水平順序付けエッジシーケンス符号化のためのシステム及び方法 |
US8661061B2 (en) | 2012-03-21 | 2014-02-25 | Nintendo Co., Ltd. | Data structure, data structure generation method, information processing apparatus, information processing system, and computer-readable storage medium having stored therein information processing program |
JP2015162024A (ja) * | 2014-02-26 | 2015-09-07 | 日本電信電話株式会社 | 検索木生成・検索装置及び方法及びプログラム |
-
2010
- 2010-06-07 JP JP2010130404A patent/JP2011257877A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8661061B2 (en) | 2012-03-21 | 2014-02-25 | Nintendo Co., Ltd. | Data structure, data structure generation method, information processing apparatus, information processing system, and computer-readable storage medium having stored therein information processing program |
JP2014006900A (ja) * | 2012-06-22 | 2014-01-16 | Palo Alto Research Center Inc | 圧縮水平順序付けエッジシーケンス符号化のためのシステム及び方法 |
US9876638B2 (en) | 2012-06-22 | 2018-01-23 | Palo Alto Research Center Incorporated | System and method for compressed level-ordered edge sequence encoding |
JP2015162024A (ja) * | 2014-02-26 | 2015-09-07 | 日本電信電話株式会社 | 検索木生成・検索装置及び方法及びプログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9235651B2 (en) | Data retrieval apparatus, data storage method and data retrieval method | |
CN102768681B (zh) | 一种用于搜索输入的推荐系统及方法 | |
US8560558B2 (en) | Computer product, search apparatus, management apparatus, search method, and management method | |
US9760347B2 (en) | Method and system to identify GUI objects for non-markup-language-presented applications | |
CN109446362A (zh) | 基于外存的图数据库结构、图数据存储方法、装置 | |
US20140082021A1 (en) | Hierarchical ordering of strings | |
JP2009512099A (ja) | トライでの再始動可能なハッシュの方法及び装置 | |
US20110295869A1 (en) | Efficient string matching state machine | |
CN104199954A (zh) | 一种用于搜索输入的推荐系统及方法 | |
US20180075074A1 (en) | Apparatus and method to correct index tree data added to existing index tree data | |
KR20140038441A (ko) | 압축 매치 열거 기법 | |
CN104268176A (zh) | 一种基于搜索关键词的推荐方法及系统 | |
JP2011257877A (ja) | 情報検索装置、情報検索方法、及びプログラム | |
US20120239664A1 (en) | Bit string search apparatus, search method, and program | |
JP2017513252A (ja) | 最適化されたデータ凝縮器及び方法 | |
US20120319875A1 (en) | Method for storing node information of huffman tree and corresponding decoding method | |
JP2013020613A (ja) | メモリ効率の良い、プランニングに関する状態設定の表示 | |
CN115221162A (zh) | 关联散列树 | |
JP6261669B2 (ja) | クエリ校正システムおよび方法 | |
CN111767223B (zh) | 一种文件处理方法、装置、电子设备及存储介质 | |
CN105095276B (zh) | 一种挖掘最大重复序列的方法及装置 | |
KR20220099745A (ko) | 지리공간 블록체인 데이터 검색을 위한 공간 분할 기반의 트리 인덱싱 및 질의어 처리 방법 및 장치 | |
JP5670993B2 (ja) | 単一パス集約による木構造の再構成装置及び方法及びプログラム | |
JP5736589B2 (ja) | 数列データ検索装置、数列データ検索方法及びプログラム | |
CN116954622B (zh) | 抽象语法树和源代码坐标的关联方法、电子设备和介质 |