(57)【要約】【課題】パトリシア木を用いた情報検索を従来技術よりも効率良く行うための技術を提供する。【解決手段】パトリシア木から目的のキー情報を検索する情報検索装置において、パトリシア木を格納する情報格納手段と、前記情報格納手段に格納された前記パトリシア木から前記キー情報を検索する情報検索手段とを備え、前記情報格納手段に格納された前記パトリシア木において完全二分木となる部分木が配列で表現されており、前記情報検索手段は、前記キー情報を検索する際に、前記配列を参照することにより前記完全二分木となる部分木を探索するように構成する。【選択図】図１
2011257877.tif 000002
【特許請求の範囲】
【請求項１】
パトリシア木から目的のキー情報を検索する情報検索装置であって、
パトリシア木を格納する情報格納手段と、
前記情報格納手段に格納された前記パトリシア木から前記キー情報を検索する情報検索手段とを備え、
前記情報格納手段に格納された前記パトリシア木において、完全二分木となる部分木が配列で表現されており、前記情報検索手段は、前記キー情報を検索する際に、前記配列を参照することにより前記完全二分木となる部分木を探索する
ことを特徴とする情報検索装置。
【請求項２】
前記配列は、前記完全二分木となる部分木の各節点におけるビット位置指示用添字と、当該部分木における葉節点からのポインタとを格納する
ことを特徴とする請求項１に記載の情報検索装置。
【請求項３】
前記配列は更に、前記完全二分木となる部分木の各節点におけるキー情報へのポインタを格納する
ことを特徴とする請求項２に記載の情報検索装置。
【請求項４】
前記パトリシア木の各節点において、当該節点を完全二分木の頂点とみなした場合に、何段目までが完全二分木になっているかを示す値を完全二分木高さとして保持する
ことを特徴とする請求項１ないし３のうちいずれか１項に記載の情報検索装置。
【請求項５】
前記情報検索装置は、入力されたキー情報を新規追加節点として前記パトリシア木に挿入する情報挿入手段を備え、
前記新規追加節点が前記パトリシア木の末端に追加される場合において、前記情報挿入手段は、前記新規追加節点を末端とする部分木における所定の数だけ上位にある節点の完全二分木高さが、前記所定の数であるか否かを確認し、所定の数である場合に、当該部分木を完全二分木であると判定し、当該完全二分木を配列で表現するための変換処理を行う
ことを特徴とする請求項４に記載の情報検索装置。
【請求項６】
前記新規追加節点が前記パトリシア木の末端以外の部分に追加される場合において、前記情報挿入手段は、前記新規追加節点の子節点が、配列で表現されているか否かを確認し、配列で表現されている場合に、当該配列表現をポインタで表現するための変換処理を行う
ことを特徴とする請求項５に記載の情報検索装置。
【請求項７】
パトリシア木から目的のキー情報を検索する情報検索装置が実行する情報検索方法であって、
前記情報検索装置は、パトリシア木を格納する情報格納手段を備え、
前記情報格納手段に格納された前記パトリシア木において、完全二分木となる部分木が配列で表現されており、前記情報検索装置は、前記パトリシア木から前記キー情報を検索する際に、前記配列を参照することにより前記完全二分木となる部分木を探索する
ことを特徴とする情報検索方法。
【請求項８】
前記配列は、前記完全二分木となる部分木の各節点におけるビット位置指示用添字と、当該部分木における葉節点からのポインタとを格納する
ことを特徴とする請求項７に記載の情報検索方法。
【請求項９】
前記配列は更に、前記完全二分木となる部分木の各節点におけるキー情報へのポインタを格納する
ことを特徴とする請求項８に記載の情報検索方法。
【請求項１０】
コンピュータを、請求項１ないし６のうちいずれか１項に記載の情報検索装置における各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文字列等の情報の中から、目的とする情報を検索するための技術に関連するものである。
【背景技術】
【０００２】
文字列等の情報の集合を保存し、検索できるようにするための手法として、従来からパトリシア木が知られている（例えば、非特許文献１）。パトリシア木は文字列の長さが一定でない場合の効率が良いことや、N個の文字列を格納するために必要な木の節点がN個だけで済むという特徴があることなどから広く利用されている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】アルゴリズム 第2巻 R.セジウィック著 (野下浩平、 星守、 佐藤創、 田口東 共訳)、 近代科学社、第６８〜７２頁
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、パトリシア木は木の各節点が2つのポインタを持つため、ポインタをたどる処理が速度低下の原因となっていた。このような速度低下は、ハードディスク等の二次記憶上にパトリシア木のデータを保持した場合に顕著となるが、仮にすべてのパトリシア木のデータを一次記憶上に保持した場合でも速度低下は問題となる。
【０００５】
なぜなら、多くのコンピュータは、CPU速度と比べてメモリの速度が相対的に遅いという問題を軽減するためにキャッシュメモリを保持しており、キャッシュメモリはある程度連続したメモリ領域に対応づけるものであるので、ポインタによって毎回異なるメモリ領域を利用する場合にはメモリ参照の効率が悪化してしまうからである。
【０００６】
一方、パトリシア木をポインタではなく、配列を用いて実現することにより速度を向上する仕組みが知られているが、従来の配列を用いる仕組みでは、新しい文字列を追加したり、既存の文字列を削除する場合の効率が悪いという問題があった。
【０００７】
本発明は上記の点に鑑みてなされたものであり、パトリシア木を用いた情報検索を従来技術よりも効率良く行うための技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記の課題を解決するために、本発明は、パトリシア木から目的のキー情報を検索する情報検索装置であって、パトリシア木を格納する情報格納手段と、前記情報格納手段に格納された前記パトリシア木から前記キー情報を検索する情報検索手段とを備え、前記情報格納手段に格納された前記パトリシア木において、完全二分木となる部分木が配列で表現されており、前記情報検索手段は、前記キー情報を検索する際に、前記配列を参照することにより前記完全二分木となる部分木を探索することを特徴とする情報検索装置として構成できる。
【０００９】
前記配列は、前記完全二分木となる部分木の各節点におけるビット位置指示用添字と、当該部分木における葉節点からのポインタとを格納して構成される。また、前記配列は更に、前記完全二分木となる部分木の各節点におけるキー情報へのポインタを格納することとしてもよい。
【００１０】
また、前記パトリシア木の各節点において、当該節点を完全二分木の頂点とみなした場合に、何段目までが完全二分木になっているかを示す値を完全二分木高さとして保持するようにしてもよい。
【００１１】
また、前記情報検索装置は、入力されたキー情報を新規追加節点として前記パトリシア木に挿入する情報挿入手段を備えてもよく、前記新規追加節点が前記パトリシア木の末端に追加される場合において、前記情報挿入手段は、前記新規追加節点を末端とする部分木における所定の数だけ上位にある節点の完全二分木高さが、前記所定の数であるか否かを確認し、所定の数である場合に、当該部分木を完全二分木であると判定し、当該完全二分木を配列で表現するための変換処理を行う。
【００１２】
また、前記新規追加節点が前記パトリシア木の末端以外の部分に追加される場合においては、前記情報挿入手段は、前記新規追加節点の子節点が、配列で表現されているか否かを確認し、配列で表現されている場合に、当該配列表現をポインタで表現するための変換処理を行う。
【００１３】
また、本発明は、上記情報検索装置が実行する情報検索方法として構成することができる。更に、本発明は、コンピュータを、上記情報検索装置における各手段として機能させるためのプログラムとして構成することもできる。
【発明の効果】
【００１４】
本発明によれば、 パトリシア木を用いた情報検索を従来技術よりも効率良く行うことが可能となり、二次記憶やキャッシュと組合せた場合でも速度の劣化を最小限に防ぎながら、情報の集合の中から目的の情報を検索することが可能となる。 
【図面の簡単な説明】
【００１５】
【図１】本発明の実施の形態に係る情報検索装置１０の機能構成図である。
【図２】パトリシア木の例を示す図である。
【図３】完全二分木高さを説明するための図である。
【図４】部分完全二分木を含むパトリシア木の例を示す図である。
【図５】高さ2の部分完全二分木を表す配列の例を示す図である。
【図６】キー情報を保持する配列の例を示す図である。
【図７】図２に示すパトリシア木に、完全二分木高さを書き加え、「I」を追加する箇所を点線で囲って示した図である。
【図８】パトリシア木に新しいキーを挿入する処理の流れ図である。
【図９】ポインタ表現-配列表現変換操作の流れ図である。
【図１０】図７中の枠で囲んだ範囲の高さ2の部分完全二分木のために作成された配列である。
【図１１】図１０に示す配列に検査ビットを格納したものを示す図である。
【図１２】図１１に示す配列に部分木の葉節点からのポインタを格納したものを示す図である。
【図１３】ポインタ表現-配列表現変換操作を行った結果のパトリシア木を示す図である。
【図１４】配列表現-ポインタ表現変換操作を示す流れ図である。
【発明を実施するための形態】
【００１６】
以下、図面を参照して本発明の実施の形態を説明する。
【００１７】
（装置構成、パトリシア木の概要）
図１に、本発明の実施の形態に係る情報検索装置１０の機能構成図を示す。図１に示すように、本実施の形態に係る情報検索装置１０は、入力部１１、情報検索部１２、情報挿入部１３、出力部１４、データ格納部１５を備える。入力部１１は、検索の目的となるキーや、パトリシア木に追加する情報を入力するための機能部である。情報検索部１２は、入力されたキーに基づき、本発明に係るパトリシア木の構造を有するデータを検索し、検索結果を出力部１４に渡す機能部である。情報挿入部１３は、パトリシア木に情報を追加するための機能部である。出力部１４は、検索結果を出力する機能部である。
【００１８】
本実施の形態における検索結果は、例えば、パトリシア木のデータに目的のキーが存在したか否か（検索成功／失敗）を示す情報でもよいし、パトリシア木が文書集合から作成されている場合等においては、目的のキーが存在した文書と、キーの文書中の位置を示す情報であってもよい。
【００１９】
本実施の形態において、データ格納部１５は、メモリ（一次記憶装置）であり、各処理機能部は、このメモリに対してデータ読み書きを行って、本実施の形態での処理を行うことを想定している。つまり、後述する配列の領域等は、メモリにおいて確保される領域である。ただし、これは一例であり、本発明に係る処理は、記憶装置の用い方に依存せずに実行できる。例えば、データ格納部１５がハードディスク等の二次記憶装置であり、情報検索部１２と情報挿入部１３はそれぞれ、データ格納部１５から適宜パトリシア木のデータを読み出して、自身が備えるメモリ（一次記憶装置）を用いてパトリシア木に関わる処理を行うこととしてもよい。
【００２０】
データ格納部１５には、本発明の実施の形態に係るパトリシア木の構造のデータが格納される。  
本発明の実施の形態では、パトリシア木の部分木のうち完全二分木となっている部分を配列で表現することにより、キーの検索時に、当該部分木内を走査する場合に必要だったポインタをたどる作業をなくし、配列を実現している連続したメモリ領域への参照を行うことにより、検索を効率的に行い、処理速度を向上させている。以下、このパトリシア木について説明する。
【００２１】
図２は、パトリシア木の例を示す図である。図の各節点中、左上の#記号の後ろの数字は節点番号を示し、右上の文字はその節点に対応するキーを示し、左下のcの後ろの数字はその節点で、検索対象のキーのどのビットを検査すべきかを示す数(ビット位置指示用添字)である。
【００２２】
従来の一般的なパトリシア木においては、図２に示すデータ構造がポインタを用いて実現されている。すなわち、各節点において、節点に対応する記憶領域に、節点のデータ（ビット位置指示用添字、キー等）と、次のリンク先へのポインタ（左の子節点へのポインタと、右の子節点へのポインタ等）とが格納された構造になっている。以降、ポインタ表現といった場合、このような構造であるものとする。
【００２３】
このようなパトリシア木を用いた検索では、検索対象のキーが与えられたときに、頂点から始まって、各節点において、検索対象のキーにおけるビット位置指示用添字で指示されるビット位置の値が１であれば右に進み、０であれば左に進むことを繰り返し、上を指すリンクで指された節点のキーと、検索対象のキーとを比較して、検索成功／否成功を判定している。
【００２４】
前述したとおり、従来では、一般に、パトリシア木をポインタを用いて実現しており、上記検索を行うために、ポインタをたどる処理を行っていた。そのため、効率が良くなかった。
【００２５】
そこで、本発明の実施の形態では、完全二分木が1次元配列で実現できることに着目し、パトリシア木の中で、完全二分木となっている部分木（部分完全二分木と呼ぶ）を配列で実現することとしている。  
具体的には、まず、パトリシア木において、新しい属性として、「完全二分木高さ」を導入する。これは、パトリシア木におけるある節点を完全二分木の頂点（０段目）とした場合に、何段（何ランク）分までが完全二分木になっているかを示すための値である。この値は、各節点に属性として与えられ、各節点に対応する記憶領域に格納される。例えば、図３に示す高さが２である完全二分木の節点Aには、「完全二分木高さ」として2が付与される。
【００２６】
ここで、高さh（ｈは０以上の整数）の部分完全二分木を構成する節点の数は、2(h+1)-1個である。また、葉節点（部分完全二分木の終端にある節点）の数は2h個である。そして、高さh（ｈは０以上の整数）の部分完全二分木を、2(h+1)-1個のビット位置指示用添字を記した数値の列と、部分完全二分木中の葉節点からの2h+1個のポインタの列からなる配列で表現する。いずれの列も、部分完全二分木における値を幅優先で並べる。一例として、図４に示す枠で囲んだ部分である高さ2の部分完全二分木を表す配列の例を図５に示す。 
なお、部分完全二分木の高さhについては、メモリやディスクからの読み込み単位やキャッシュラインのサイズに配列の大きさが収まるように事前に値を定める。また、上記以外でパトリシア木の節点が保管してある情報、例えば、キー情報そのものを保持している領域へのポインタ等は必要に応じて、2(h+1)-1個の要素の配列を準備し、保持する。この場合の例を図６に示す。図６の例は、図４の例に対応させており、図６において、番地１、番地２、番地３、番地４、番地５、番地６、番地７には、それぞれ、図４に示す節点#1、節点#3、節点#4、節点#6、節点#7、節点#8、節点#9のキー情報が格納される。
【００２７】
上記のように配列を用いることにより、部分完全二分木におけるキー検索処理については、配列内のデータのみを参照すればよくなり、検索処理を高速化できる。例えば、図４の節点#1からのキー検索では、図５に示す配列の最初（左端）の要素の値で示すビット値を見て、次に参照すべき配列内の次の節点に対応する要素を決定する。ここで、完全二分木では、親の番号がi(i=0, 1, 2,....)のとき、その左の子は2i+1となり、その右の子は2i+2となるので、この関係を用いて、配列内の参照すべき要素（検査ビット）の位置を決定できる。また、葉節点での検査では、検査の結果に応じた位置にあるポインタ列の要素を参照することになる。
【００２８】
情報検索装置１０は、例えば、ＣＰＵやメモリ、ハードディスク等を備えた一般的なコンピュータに、各機能部に対応するプログラムを実行させることにより実現可能である。当該プログラムは、可搬メモリ等のコンピュータ読み取り可能な記録媒体に記録して配布してもよいし、ネットワーク上のサーバからダウンロードすることもできる。
【００２９】
（挿入時の処理）
次に、本実施の形態に係るパトリシア木の操作の例として、パトリシア木にキー文字列を挿入する処理について説明する。ここでは、図２のパトリシア木に「I」というキー文字列を追加する処理を説明する。なお、図４に示したパトリシア木は、以下で説明する処理を行って、図２のパトリシア木に「I」というキー文字列を追加した結果のパトリシア木である。
【００３０】
また、図７は、図２に示すパトリシア木に、完全二分木高さを書き加え、「I」を追加する箇所を点線で囲って示したものである。各節点中の右下のkの後ろの数値が完全二分木高さを示す。例えば、図７に示す節点＃１は、その下１段に２つの節点を持つ高さ１の完全二分木の頂点であることから、kとして１が記述されている。
【００３１】
図８は、本発明の実施の形態において、パトリシア木に新しいキーを挿入する時に、情報検索装置１０が実行する処理の流れ図である。 
ステップ１）まず、入力部１１から追加対象のキーが入力され、情報挿入部１３に渡される。以降の処理は、情報挿入部１３が実行する処理である。
【００３２】
ステップ２）情報挿入部１３は、データ格納部１５に既に格納されているパトリシア木のデータを参照することにより、受け取ったキーの文字列に対応する節点の木の中での位置を特定する。この特定のための手順は、従来のパトリシア木での手順と同一である。 本例では、図７に示す位置が特定される。
【００３３】
新しい節点は木の中間に挿入され左右のどちらかの子節点を1つ持つ場合と、パトリシア木の葉（リーフ）として追加され、子節点を1つも持たない場合とに分けられる。なお、左右のどちらか一方は新しいキー文字列自身を指すための図中点線で示された外部節点に対応するので、左右の両方に子節点を持つ場合は存在しない。 
ステップ３）パトリシア木の根節点から新規追加節点の親節点までの各節点について、 新規追加節点の親節点から順に上向きに完全二分木高さの更新を行う。具体的には、下記のとおりである。
【００３４】
親節点の完全二分木高さは、左右の子節点のうち完全二分木高さが小さい側の値に1を加えた値である。ただし、左右の子節点を持たない場合、便宜上の子節点の完全二分木高さは -1と考え、 当該親節点の完全二分木高さは0とする。 
例えば、 新規追加節点は左右の両方同時には子となる節点を持つことはないので、完全二分木高さは常に0である。したがって、新規追加節点の親節点が新規追加節点以外に子節点を持っている場合は、新規追加節点の完全二分木高さである0と、当該子節点の完全二分木高さ(0以上)とで、小さい値は0であるから、0 + 1 で、当該新規追加節点の親節点の完全二分木高さは1 となる。 もし、親節点が新規追加節点以外に子節点を持っていなければ、新規追加節点の完全二分木高さである0と、便宜上の子節点の完全二分木高さである-1とで小さい値である-1より、-1 + 1 で、 当該親節点の完全二分木高さは０となる。
【００３５】
ステップ４）新規追加節点がパトリシア木における葉節点（子節点を持たない末端の節点）として追加されたものかどうか確認する。確認の結果、Yesであればステップ５に進み、Noであればステップ８に進む。
【００３６】
ステップ５）ここでは、新規追加節点を葉とするような部分木が完全二分木になっているかどうかの確認を行う。この確認は、新規追加節点のh個上の節点の完全二分木高さが hであるかどうかを確認することにより行うことができる。確認の結果、Yesであればステップ６に進み、Noであればステップ７に進む。
【００３７】
ここで、一例として、 図７に示すパトリシア木での完全二分木高さの更新について具体的に説明する。「I」に対応する節点#8の完全二分木高さが0である(子節点を持たない)ことから、節点#4の完全二分木高さは、節点#8と節点#9の完全二分木高さの小さい側である0に1を加えた1となる。さらに、節点#3、節点#4の完全二分木高さが1であることから、節点#1の完全二分木高さは2となる。こうして、「I」を加えた後には、節点#1は高さ2の完全二分木の頂点となっていることが分かる。 
ステップ６）ステップ５での確認の結果が、上記の図７の例の場合のようにYesである場合、すなわち、新規追加節点を末端とする部分木が高さhの完全二分木になっている場合は、後述するポインタ表現-配列表現変換操作を行う。
【００３８】
ステップ７）ステップ５での確認の結果がNoである場合、新規追加節点は、そのままポインタ表現でパトリシア木に追加される。つまり、新規追加節点のデータ（ビット位置指示用添字、他の節点へのポインタ、キーなど）が、親節点からポインタで参照されるデータとして、パトリシア木に追加される。
【００３９】
ステップ８）ステップ４での確認結果がNoの場合、すなわち、新規追加節点がパトリシア木の中間に位置している場合、新規追加節点の子節点がポインタで表現されているか配列で表現されているかの確認を行う。確認の結果がYesであればステップ９に進み、Noであればステップ７（ポインタとして追加）に進む。
【００４０】
ステップ９）ステップ８の確認の結果、子節点が配列で表現されている場合、後述の配列表現-ポインタ表現変換操作を行う。 
ステップ１０）ステップ６、７、９のいずれかの処理を行った後、追加処理が完了する。
【００４１】
（ポインタ表現-配列表現変換操作）
次に、図８に示した処理の中のステップ６であるポインタ表現-配列表現変換操作を、図９の流れ図を参照して説明する。以下、図７の中の枠で囲んだ範囲の高さ2の部分完全二分木の例について説明する。 
ステップ１０１）まず、高さh個の要素を格納できる配列を作成する。具体的には、2(h+1)-1個のビット位置指示用添字を格納するための配列と、部分完全二分木の2h個の葉節点からのポインタを格納するための配列を作成する。 この２つの配列は、連続する１つの配列としてもよいし、別々の配列としてもよい。本例では、連続する１つの配列とする。
【００４２】
図１０に、図７中の枠で囲んだ範囲の高さ2の部分完全二分木のために作成された配列を示す。ここで作成した配列の番号を@1とする。なお、配列を作成するとは、情報検索装置１０が備えるメモリ等の記憶手段において配列として使用する領域を確保することである。図１０に示すように、本例では、ビット位置指示用添字用の領域として2(2+1)-1=7個の領域が確保され、部分完全二分木の葉節点（22=4個）からのポインタ用（１節点あたり２つ）として、８個の領域が確保されている。
【００４３】
ステップ１０２）2(h+1)-1個のビット位置指示用添字に対応する値（検査ビット）を配列に格納する。図１１に、図７中の枠で囲んだ範囲の例における検査ビットを格納した配列を示す。
【００４４】
ステップ１０３）次に、部分完全二分木の2h個の葉節点からの2(h+1)個のポインタを格納する。葉節点１つあたり左右２つのポインタがあるため、ポインタ数は2(h+1)個となる。図１２に、図７中の枠で囲んだ範囲の例における検査ビットと葉節点からのポインタとを格納した配列を示す。ここで、図６に示したように、キー文字列へのポインタを格納するための配列を作成して、キー文字列へのポインタを格納してもよい。図６のような場合も、これらの配列を全体として@1で識別する。
【００４５】
ここで、図１２に示す例において、「#11」は節点#11へのポインタを示し、「@1:3」は配列@1の第3要素（つまり、図７での部分完全二分木における４番目の節点＃６のデータ）へのポインタである。この第３要素は、例えば、図６に示す番地４（節点＃６に対応）の領域を指すポインタである。
【００４６】
ステップ１０４）次に、この部分完全二分木の根節点を指していた上位節点のポインタを、新しく作成した配列へ張り替える。図７の例では、部分完全二分木の根節点#1を差していた上位節点#0のポインタを、新しく作成した配列@1に張り替える。
【００４７】
ステップ１０５）そして、これまで部分完全二分木を表現していたポインタをパトリシア木のデータから削除する。 
図１３に、図７の例に対して上記の処理を行った結果を示す。図７の該当部分が配列@1に置き換えられたことが示されている。
【００４８】
（配列表現-ポインタ表現変換操作）
次に、図８に示した処理の中のステップ９である配列表現-ポインタ表現変換操作を、図１４の流れ図を参照して説明する。
【００４９】
新規追加節点の子節点の属する配列内の全ての節点の要素のそれぞれに対して、部分完全二分木のリーフ側(つまり配列の後方）から、以下のステップ２０１〜２０４の処理を行う。
【００５０】
ステップ２０１）ポインタ表現での節点を作成する。具体的には、節点に対応する記憶領域を作成する。
【００５１】
ステップ２０２）処理対象の節点が、部分完全二分木の葉節点かどうか確認する。葉節点の場合、ステップ２０３に進み、そうでない場合、ステップ２０４に進む。
【００５２】
ステップ２０３）部分完全二分木の葉節点に対応するポインタとして、配列にもともと保持していた次節点のポインタをそのまま利用し、保持する。
【００５３】
ステップ２０４）部分完全二分木の葉節点ではない節点に関しては、対応する節点を指すポインタを格納する。つまり、部分完全二分木中の高さd（図７に示したｋの更新後の値に対応）、左からi番目（i=0, 1, 2...)の節点の左の子節点は配列内の2d+1+ 2(i - 1) + 1番目だった節点、右の子節点は2d+1+ 2(i - 1) + 2番目だった節点を指すようにする。
【００５４】
ステップ２０５）上記のようにして配列内の全ての要素をポインタ表現に変換後、この部分完全二分木の根節点を指していた上位節点のポインタをポインタ表現とした当該根節点へ張り替える。 
ステップ２０６）次に、これまで部分完全二分木を表現していた配列を削除する。 
ステップ２０７）続いて、配列の分割によって、ポインタ表現変換前に配列で表現されていた木の一部を含むような部分木が再び高さhの完全二分部分木になっているかどうかを確認する。 
具体的には、 配列で表現されていた部分木の上位の一部と、部分木のパトリシア木全体での上位節点とでの確認と、 配列で表現されていた部分木の下位の一部と、部分木のパトリシア木全体での下位節点とでの確認を行う。これらの確認により、再び高さhの部分完全二分木があった場合、ステップ２０８に進み、なければ処理を終了する。
【００５５】
ステップ２０８）図９を参照して説明したポインタ表現-配列表現変換操作を行い、該当の部分完全二分木を配列表現に変換する。 
（検索時の処理）
次に、キーの検索時の処理について説明する。ここでの処理は、情報検索装置１０の情報検索部１２が実行する。
【００５６】
検索時の節点決定の手順は基本的に従来のパトリシア木構造のデータを検索する処理と同様であり、各節点で検査ビットを調べて、ポインタをたどっていく処理を行う。ただし、親節点、子節点のいずれかが配列で表現されている場合は、以下の手順で配列内の要素を用いて検索を行う。
【００５７】
まず、親節点がポインタ表現で、子節点が配列表現である場合、子節点は配列で表現された部分完全二分木の根節点であるから、配列の先頭の要素を利用する。例えば、図７の枠内を配列にした図１３の例において、節点#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＝３番目（０番目から数えて３番目）の要素であるビット位置１を、検索対象キーにおいて検査する。以降も同様である。
【００５９】
親節点が配列表現内であり、さらに親節点の部分木中での位置がリーフである場合は配列内の対応するポインタをたどる。例えば、図７に対応する図１３の例で、親節点（現在の節点）が、葉節点である節点#9（０番目から数えて６番目の要素）である場合に、検査の結果、右に進むことになった場合、ポインタ格納領域での最後の領域に格納されたポインタが指す位置（この場合、２番目である節点#4のキー情報等）に進む。
【００６０】
（実施の形態の効果）
以上説明したように、従来のパトリシア木を用いた検索では、ポインタをたどる操作により速度低下が発生していたところ、本発明の実施の形態に係る技術によれば、パトリシア木を部分的に配列表現としたので、その部分についてポインタをたどる操作を取り除くことができるので、速度劣化を防ぐことができる。
【００６１】
また、完全二分木高さを保持することにより、パトリシア木において配列表現にできる完全二分木の部分を特定でき、木全体を走査することなく特定部分を配列表現とすることができるので、追加の操作による速度低下を防ぐことができる。
【産業上の利用可能性】
【００６２】
本発明は、文字列等の情報の中から、目的とする情報を検索するための技術に適用することができる。
【００６３】
本発明は、上記の実施の形態に限定されることなく、特許請求の範囲内において、種々変更・応用が可能である。
【符号の説明】
【００６４】
１０  情報検索装置
１１  入力部
１２  情報検索部
１３  情報挿入部
１４  出力部
１５  データ格納部
【図１】
2011257877.tif 000003
【図２】
2011257877.tif 000004
【図３】
2011257877.tif 000005
【図４】
2011257877.tif 000006
【図５】
2011257877.tif 000007
【図６】
2011257877.tif 000008
【図７】
2011257877.tif 000009
【図８】
2011257877.tif 000010
【図９】
2011257877.tif 000011
【図１０】
2011257877.tif 000012
【図１１】
2011257877.tif 000013
【図１２】
2011257877.tif 000014
【図１３】
2011257877.tif 000015
【図１４】
2011257877.tif 000016