(57)【特許請求の範囲】
【請求項１】
検索すべき語である検索キーを入力する入力手段と、
ハッシュ値を複数の部分領域であるフィールドに分割し、前記入力手段により入力された検索キーを受信し、その検索キーを構成する各文字の文字コードに基づいた前記フィールドの大きさの部分ハッシュ値と各文字の出現位置に基づいて、部分ハッシュ値を対応するフィールドに格納し、ハッシュ値のとりうる値を限定して、一つまたは複数のハッシュ値の集合を求める演算手段と、
前記演算手段により求められた一つまたは複数のハッシュ値の集合に対して、入力された前記検索キーに基づいた検索を行う検索手段とを有する情報検索装置。
【請求項２】
前記演算手段は、入力された検索キーを構成する各文字の部分ハッシュ値を、ハッシュ値の部分領域である所定数のフィールドに対応させて逐次格納するものであり、前記入力された検索キーの文字数が前記フィールドの数を超過した場合、その超過分の文字の部分ハッシュ値を格納する際に、格納するフィールドの位置を各文字の出現位置の前記フィールドの数に対する剰余によって求め、求めたフィールドに既に格納されているハッシュ値と論理和をとって再格納する請求項１記載の情報検索装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、検索キーに基づいた検索を行なう情報検索装置に関し、特にワイルドカード検索、部分一致検索等の柔軟な検索の可能な情報検索装置に関する。
【０００２】
【従来の技術】
キーに基づいた完全一致検索における高速な検索方法としてハッシュ法が良く知られている。しかし、ハッシュ法では、データ構造上、ワイルドカード検索などの柔軟な検索が困難であるとされ、ハッシュ法に関しては、衝突による検索速度の低下を抑えるために提案されたもの（例えば特開昭６３−２７１５２５号公報、特開平０４−３５８２６６号公報など）、ハッシュ法を適用することによって装置の高速化を行うために提案されたもの（例えば特開平０５−０６１９１０号公報）などが見受けられるものの、部分一致検索に関する提案は全くなされておらず、これまでは、ハッシュ法を用いた検索装置で柔軟な検索を行うためには、全文検索などの他の方法を併用しなければならなかった。
【０００３】
【発明が解決しようとする課題】
ハッシュ法では実データの他に、少なくともハッシュ表を必要とする。ハッシュ表は、キーワードの異なり語数をＮとして、おおよそポインタ長＊Ｎの大きさになる。ここで、部分一致検索のために他の検索方法を併用すると、さらに別途インデックスデータを持つ必要があり、データサイズが非常に大きくなるという欠点がある。また、実データを直接参照する全文検索方法を併用すれば、余分のインデックスデータは必要ないものの、全データを参照するため、実データのサイズが大きくなると検索速度が非常に遅くなり、実用的な速度が出せないという欠点がある。
【０００４】
本発明は、これらの問題を解決するため、ハッシュ法において、データ構造の追加や全データの参照を行なわずに、ワイルドカード検索などの柔軟な検索が可能な検索装置を提供することを目的とする。
【０００５】
【課題を解決するための手段】
本発明に係わる情報登録方法および情報検索方法では、部分一致検索の検索キーを構成する各要素の情報によってハッシュ値の値域を限定するハッシュ関数を用いるようにし、限定された値域に属する全てのハッシュ値に対して検索を行う手段を設ける。複数のハッシュ値に対する検索は、繰り返し検索を行なうように構成してもよいし、並列計算によって検索を行なうように構成してもよい。
【０００６】
【作用】
データの登録の際に、ハッシュ値がキーを構成する要素に対応した値域内に入ることを保証するハッシュ関数を用いる。そして、部分一致検索において、部分キーが与えられると、ハッシュ関数が部分キーの構成要素に対応する値域を求める。続いて、この値域内の全てのハッシュ値を使用して検索する。この値域外には、与えられた部分キーを含むキーが登録されていないため、余分なデータに対して検索を行なう必要がなく、さらにデータ構造の追加も必要としない。このようにしてハッシュ法において、完全一致検索のみならず、部分一致検索をも実現することが可能になる。
【０００７】
すなわち、検索を行なう際にハッシュ表を参照するためのハッシュ値が、たとえば、０〜１５であるとき、０〜１５の全ての数について検索すれば全レコードが検索できるが、ここで、ハッシュ値の値域をたとえば奇数に限定すれば検索量は半分となる。このようにハッシュ関数を工夫することにより部分一致検索が可能となる。
【０００８】
【発明の実施の形態】
図１に、本発明のハッシュ検索方法の原理を説明するための簡略化したハッシュ関数の例を示す。また、図２に、図１のハッシュ関数を用いて検索を行なう例を示す。
【０００９】
図１の例では、検索キーを構成する要素がＡ，Ｂ，Ｃ，Ｄからなるものとする。ハッシュ関数として、Ａ，Ｂ，Ｃ，Ｄのそれぞれに対して、ハッシュ値の１ビットを割り当て、キーの要素に「Ａ」がある場合には、ビットフィールドＡを１にし、キーの要素に「Ａ」がない場合には、ビットフィールドＡを０にする関数を用いる。これは、「Ａ」が存在する場合のハッシュ値が８から１５の間の値になり、「Ａ」が存在しない場合のハッシュ値が０から７の間の値に限定されることを意味しており、０と１は逆転していても同様の効果がある。また、同様なハッシュ値の値域の限定ができればビット操作である必要はない。データの登録および完全一致検索では、ビットフィールドＡ，Ｂ，Ｃ，Ｄの全てにこの演算を行い、例えば「ＡＢＣ」に対するハッシュ値は、２進数で１１１０すなわち１４とする。続いて、図２に示すように、ハッシュ表を参照し、ハッシュ値１４に対応する「さしすせそ・・・」というデータが検索される。
【００１０】
図１の例で「ＡＢ＊」は部分キーを表し、キーの一部にＡが含まれ、かつ、キーの一部にＢが含まれるもの全てを検索することを示している。これは、「Ａ」が検索キーに存在し、かつ、「Ｂ」が検索キーに存在するという条件であり、図１のハッシュ関数の例では、「Ａ」が存在する場合のハッシュ値が、必ず８から１５の間の値になり、「Ｂ」が存在する場合のハッシュ値が、必ず４から７の間の値か１２から１５の間の値のどちらかになるという性質が利用できる。この２つの条件の論理積をとると、「ＡＢ＊」に対応するハッシュ値は、１２，１３，１４，１５の４つであることがわかる。
【００１１】
実際のハッシュ値を求める演算は、確定した「Ａ」および「Ｂ」に対するビットフィールド、すなわちビットフィールドＡとビットフィールドＢを１とし、確定しない要素に対するビットフィールドは０と１の全ての組み合わせをとればよい。この結果、１２，１３，１４，１５の４つが求められる。それぞれについて、図２に示すように、ハッシュ表を参照し、「あいうえお・・・」「かきくけこ・・・」「さしすせそ・・・」「たちつてと・・・」というデータが検索される。
【００１２】
以下に、本発明のハッシュ検索方法を電子辞書に適用する実施例を用いた動作を説明する。図３は、本発明のハッシュ検索方法を適用した電子辞書の構成例である。図４は、本発明のハッシュ検索方法を電子辞書に適用するためのデータ構造の構成例である。また図５は、動作の概略のフローを示す。
【００１３】
図３に示す電子辞書は、表示画面上に各種のデータなどを表示するＣＲＴ２ｌと、前記ＣＲＴ２１での表示を制御するＣＲＴドライバ２２と、コマンドや文字列、数値などの入力を行うキーボード２３と、ポインティングデバイスであるマウス２４と、ユーザーによるキーボード２３やマウス２４の操作によって、各種のデータを出力するキーボード／マウスドライバ２５と、ディスク装置２６、ディスク装置ドライバ２７、主記憶装置２８、ＣＰＵ（中央処理装置）２９とから構成されている。
【００１４】
ディスク装置２６は、大量のデータを格納するための二次記憶装置であり、後述するチェイン付きインデックスや実データファイルなどが格納されている。また、ディスク装置２６のデータの入出力は、ディスク装置ドライバ２７で制御されている。
【００１５】
主記憶装置２８は、アプリケーションプログラム、及びキーボード２３やマウス２４から入力された文字や数値などのデータのほか、後述するハッシュ表を格納している。また、後述するフローチャートを実現するプログラムも格納されている。
【００１６】
ＣＰＵ２９は、システム全体の制御を行うと共に、各種の命令に基づいて所定のデータに対する演算処理を行う回路であり、後述のフローチャートに基づいてデータの検索処理を実行する。実際には、主記憶装置２８に格納されているプログラムに従って、ＣＰＵ２９がフローチャートの処理を実行する。なお、この検索処理を実現するための基本的な構成及び動作は、特開平０５−０２８１９４号公報などに開示されているものと同様なものである。
【００１７】
上記電子辞書におけるデータ構造の概要を図４に示す。図４のデータ構造は、基本的には、ハッシュ表１１、チェイン付きインデックス１２、実データファイル１３の３つから構成されている。
【００１８】
本実施例の電子辞書においては、図４に示すように、通常の見出し語（「ａ」，「Ａ」など）からの検索に加え、転置キーの設定により単語の語義（「ひとつの」、「イ音」など）や発音のカタカナ表記（「エ」、「ア」など）からの検索を行えるようになっており、このため、キー／レコード数ともに非常に多く、またあるキーに対するレコードも一意ではない。
【００１９】
最初に上記電子辞書におけるチェイン付きハッシュ法による検索の基本的な動作について説明する。
【００２０】
まず、ハッシュ表１１は、検索キーｋのハッシュ値ｈ（ｋ）が指すアドレスよりチェイン付きインデックス１２へのポインタを、たとえば、３バイトで保持する。対応するキーが未登録の場合、ＦＦＦＦＦＦＨを保持する。但し、Ｈは１６進表示を意味する。つまり、ＦＦＦＦＦＦＨとは、２４ビット全てが“１”であることを表している。
【００２１】
次に、チェイン付きインデックス１２の詳細を説明する。チェイン付きインデックス１２は、データレコードに一対一で対応する情報を持つインデックスレコードの集合である。インデックスレコードの構造を図６に示す。インデックスレコードは、レコードに設定された全てのキーに関するチェインポインタｌ〜ｎ（ＣＰｌ−ｎ）と、キー識別子１〜ｎ（ＫＤｌ−ｎ）のペアの並び、及びデータファイルヘのポインタ（データポインタ（ＤＰ））を保持している。なお、キー識別子とは、登録語そのもののコピーである。
【００２２】
チェインポインタは、対応するキーに関する次のインデックスレコードへのポインタであり、衝突により同じハッシュ値を持つ登録キーのリスト（データのつながり）が構成される。
【００２３】
ここで衝突とは、異なる検索キーがハッシュ関数により同じハッシュ値を持つことを意味する。この場合の解決策として、本実施例ではチェインポインタを採用している。
【００２４】
各リストの先頭はハッシュ表１１から直接指されており、衝突がある場合、各ポインタは図７に示すように、次のチェインポインタのアドレスを保持し、リストの終端の場合にはｎｉｌとして００００００Ｈが格納される。チェインポインタは、たとえば、３バイトで表現され、００００００Ｈから７ＦＦＦＦＦＨの値を取り得る。
【００２５】
キ一識別子は、チェインポインタの直後に存在し、入力キーが登録キーに対応するか否か、すなわちハッシュ値の衝突の検出に用いられる。この実施例におけるキ一識別子の記述ルールを以下に示す。
【００２６】
（ｉ）通常の検索キーにおいては、キ一識別子の開始を示す８１Ｈに続いて登録キーの文字列を格納し、続いてキ一識別子の終了を示す８２Ｈを格納する。
【００２７】
（ｉｉ）登録キーがチェインの直前と同じである場合は省略する。省略された場合は、キ一識別子のあるべき位置に、次のチェインポインタまたはデリミタが格納されている。チェインポインタの１バイト目は最大で７ＦＨであり、デリミタはＦＦＨであるため、省略された場合でも、キ一識別子がある場合の８１Ｈとは明白に区別が可能である。
【００２８】
このようにキ一識別子を導入することにより、衝突のチェックのために実データを参照する必要がなくなる。なお、実データにキーワードを格納するフィールドを設け、実データのキーワードフィールドを参照して、衝突のチェックを行うように構成しても構わない。
【００２９】
データポインタには、実データにおける実際のデータレコードの先頭を指すアドレスが、デリミタＦＦＨに続けて３バイトで格納されている。データポインタがＦＦＦＦＦＦＨである場合は、データレコードが削除されていることを示す。
【００３０】
実データファイル１３はデータレコードの集合であり、データレコードは次の形式を持つ。
【００３１】
（見出し語）（見出し区切り［ＮＵＬＬ］）（内容部）（レコード区切り［ＬＦ：Ｌｉｎｅ  Ｆｅｅｄ］）
キー識別子に前述のように８０Ｈが用いられた場合、このデータレコードの見出し語を参照することでキーの識別を行う。チェイン付インデックスファイルのキー識別子８０Ｈが使用されている場合のみ実データファイルを参照する。
【００３２】
実データファイル１３（内容部）は、実際の辞書記述部分であるが、この実施例ではキー識別子により検索キーの情報を含まないため、この内部にフィールドなどの概念は不要であり、内容はフラットなテキス卜でよい。ここでフラットとは、フィールド区切りの記号を含まない文字コードだけからなるデータを意味する。データレコードは全体でーつのテキストファイルとなる。
【００３３】
次に、上述した電子辞書によるデータ検索のアルゴリズムを、図８のフローチヤートを用いて詳細に説明する。
【００３４】
まず、初期化（ステップ１０１）の後、検索キーのハッシュ値ｈを求め、ハッシュ表の位置ｈの内容をインデックスポジションｉｐとして読み込む（ステップ１０２）。なお、ここで初期化とは、内部で使用するフラグ等を初期化し、また、キー識別子のバッファもクリアすることを意味する。次に、ｉｐ＝ＦＦＦＦＦＦＨであるかどうかを判定する（ステップ１０３）。ここで、ｉｐ＝ＦＦＦＦＦＦＨであれば未登録キーとわかるので処理を終了する。また、ｉｐ＝ＦＦＦＦＦＦＨでないときは、チェイン付きインデックス１２上の位置ｉｐから３バイトをチェインポジションｃｐとしてチェイン付インデックスのファイルから読み込み（ステップ１０４）、チェインポジションｃｐの次のバイトの値（キー識別子の格納位置）≧８０Ｈかどうかを判定する（ステップｌ０５）。
【００３５】
８０Ｈ未満またはＦＦＨの場合には、チェインの前のものと同じであるので前のものを使用する。また、８０Ｈ以上の場合には、キーワードを読み込む（ステップ１０６）。このようにして衝突の判別を行なう。次に、ｋｒに基づいて現在のインデックスレコードがキーに対応するか否かを判定し（ステップ１０７）、対応するときはチェイン付きインデックス１２上のＦＦＨまでスキップし、続く３バイトをデータポインタｄｐとして読み込む（ステップ１０８）。なお、ステップ１０７における判定は、ハッシュ値を求めた入力文字列の下位バイトと８０Ｈの論理和を求め、キー識別子と一致するか否かを判別することにより行なう。続いて、ｄｐ＝ＦＦＦＦＦＦＨであるかどうかを判定する（ステップｌ０９）。ここで、ｄｐ＝ＦＦＦＦＦＦＨでなければデータレコードは存在するので、データファイル上の位置ｄｐから、データレコードのフォーマットに従い、０ＡＨ（＝ＬＦ）までを結果のリストに追加する（ステップ１１０）。次に、ｃｐ＝０かどうかを判定し（ステップ１１ｌ）、ｃｐ＝０であるなら終了、そうでなければチェインが続いているので、ｉｐにｃｐを代入して（ステップ１１２）、ステップ１０４へ戻る。
【００３６】
次に上述したようなチェイン付きハッシュ法による検索を行なう電子辞書において、部分一致検索を行なう場合の動作について説明する。
【００３７】
本実施例では、キーワードを構成する文字の出現位置（１文字目，２文字目，．．．）を３で割ったときの剰余と、キーワードを構成する文字のコード（キャラクタコード）を５で割ったときの剰余からハッシュ値を求めるものとする。具体的には、１５ビットのハッシュ値を、ｎを０以上の整数とした場合の、（３ｎ＋１）文字目、（３ｎ＋２）文字目、（３ｎ＋３）文字目の５ビットづつのフィールドに区切り、文字コードをｘとして、各５ビットの値を、２を（ｘｍｏｄ５）乗したもの（２ｘｍｏｄ５）の論理和とする。なお、ｘｍｏｄ５は、ｘの５で割ったときの剰余を表すものとする。
【００３８】
図９は、この方法によって、文字列「ａｂｃｄ」のハッシュ値を求める例を示す。完全一致検索およびデータ登録においては、この値をそのままハッシュ値として利用する。
【００３９】
図９に示す例においては、１文字目の’ａ’のキャラクタコード６１Ｈ（１６進数）（１０進数では９７）を５で割った余りが２であるので、２２＝４である。従って、フィールド１は、００１００（２進数）（１０進数では４）と元のフィールド１の値０００００（２進数）との論理和をとり、００１００（２進数）となる。同様に、４文字目の’ｄ’のキャラクタコードが６４Ｈ（１０進数では１００）、これを５で割った余りが０であるので２０＝１である。従って、００００１（２進数）とフィールド１（００１００）との論理和をとる。この結果、フィールド１は２進数で００１０１となる。
【００４０】
なお、本実施例では、先に説明したように、図４のチェイン付きインデックス内のチェインポインタに、キーに関する情報を示す識別子を付加し、このキー識別子によって衝突時のチェックを行うものとする。
【００４１】
部分一致検索においては、ビットが１になっている部分を１のまま固定し、ビットが０になっている部分を０と１の両方の場合の組合せとして、ハッシュ値の集合を求めて全てについて検索を行う。文字の出現位置を用いる際には、文字列の開始位置に注意する必要がある。例えば「＊ａｂｃｄ＊」という場合には、ａの出現位置が、「ａｂｃｄｅ」などのように（３ｎ＋１）文字目、「ｚａｂｃｄ」などのように（３ｎ＋２）文字目、「ｙｚａｂｃｄ」のように（３ｎ＋３）文字目の全ての場合が存在するので、１文字づつずらした３通りのパターンが必要である。
【００４２】
ハッシュ関数を用いて部分一致検索を行う場合の、概略フローを図５に示す。
【００４３】
先ず、与えられた検索キーのハッシュ値を求め（ステップ１５１）、ハッシュ表の該当する位置の内容を読み込む（ステップ１５２）。ここで、チェインポインタにキー識別子が付加されているときは、このキー識別子に基づいて衝突を検出し  （ステップ１５３）、検索結果を格納する（ステップ１５４）。全ハッシュ値の検索が完了するまで、上記ステップ１５２〜１５４を繰り返し（ステップ１５５）、全ハッシュ値の検索が完了したら検索結果を出力表示する（ステップ１５６）。
【００４４】
次に、ハッシュ関数を用いて部分一致検索を行う場合の、詳細なフローを図１０に示す。部分キーが、図９に示すように、「ａｂｃｄ」である場合を例に取り、動作を説明する。なお、ここでは、ビットが１になっている部分を「固定ビット」、ビットが０になっている部分を「不定ビット」と呼んでいる。
【００４５】
Ｓ１：まず、部分キーが与えられると、部分キーの文字開始位置を初期化する。すなわち、文字開始位置をまず（３ｎ＋１）文字目とする。ハッシュ値はｎに無関係であるので、ｎ＝０，開始位置＝１とする。
【００４６】
Ｓ２：続いて、部分キーにより固定されるビットを算出する。開始位置が１である場合は、図９に示されるように、フィールド１のビット２、フィールド１のビット０、フィールド２のビット３、フィールド３のビット４が固定されるビットである。
【００４７】
Ｓ３：次に、この固定ビットの列を、固定ビット列リストとして保存する。これは、文字の開始位置をずらして検索する際に、固定ビットと不定ビットを組み合わせると、既に検索したハッシュ値と同じになる場合があるため、以前に検索した固定ビットの列と比較することによって２度検索する手間を省くためである。
【００４８】
Ｓ４：次に、不定ビットを初期値として全て１にする。すなわち、フィールド１のビット２、フィールド１のビット０、フィールド２のビット３、フィールド３のビット４を除く全てのビットを１にする。以下、不定ビットを、固定ビットのビット数を除いたビット数の一つの数として扱う。これによって、例えば、１５ビットから固定ビットである４ビットを除いた１１ビットの０と１の組合せは、０から２０４７（１０進数）までの２進数で網羅することができる。
【００４９】
Ｓ５：不定ビットと固定ビットを連結する。すなわち、不定ビットを表す２進数に、固定ビットを挟みこむ。図１１に、不定ビットと固定ビットを連結する例を示す。すなわち、Ｓ４または後述するＳ７ｂで作成された不定ビット数を、本来のビット位置に置き、固定ビットを挿入したものである。
【００５０】
Ｓ６：連結によって生成されたハッシュ値が、最小値以下になったらＳ１２に飛ぶ。ここで、検索キーが１文字もないということはあり得ないので、１文字目のフィールドに一つも１になるビットがない状況はあり得ない。したがって、大きな数値から検索を始めて、１文字目のフィールドが０になった時点を最小値、すなわち、ハッシュ値を求める終了条件としている。
【００５１】
Ｓ７：Ｓ３において保存されている一つ前の文字開始位置までの固定ビットリストとハッシュ値を比較し、固定ビットリストの固定ビットと同じビット位置にあるハッシュ値のビットが全て１の場合は、以前に検索したハッシュ値のパターンに含まれるので（Ｓ７ａ）、次の不定ビットを求め（Ｓ７ｂ）、Ｓ５に戻る。なお、Ｓ７ａの判定は、不定ビットの０，１の組合せにより、既に検索した組合せが出現する可能性が有るので、重複して検索しないようにするための判定である。またＳ７ｂでは、不定ビット列が表す数値から１を減じた値を新たに不定ビット列とする。
【００５２】
Ｓ８：求めたハッシュ値によりハッシュ表を読み出す。
【００５３】
Ｓ９：インデックス内に登録語がなければ（Ｓ９）、該当するデータレコードがないので、Ｓ７ｂと同じ処理で不定ビットを変更して次の不定ビットを求め（Ｓ７ｂ）、Ｓ５に戻る。
【００５４】
Ｓ１０：キー識別子により、部分キーが含まれるかどうかを比較し、部分文字列が含まれる場合は、検索結果のリストに登録する（Ｓ１０ａ）。
【００５５】
Ｓ１１：次のインデックス内の次のチェインポインタヘスキップし、Ｓ９へ戻る。
【００５６】
Ｓ１２：文字開始位置を１つずらす。
【００５７】
Ｓ１３：文字開始位置が３以下であれば、Ｓ２に戻る。これは、文字開始位置が１，２，３の場合の全てを検索するためである。
【００５８】
Ｓ１４：結果リストに登録された検索結果を表示する。
【００５９】
以上の手順で、ハッシュ法においても、部分一致検索が可能になる。さらに、前方一致検索の場合は、文字開始位置が１の場合のみを検索すればよい。また、後方一致検索の場合は、図１２に示すように、キー識別子による判別を行う際に、後方の文字から行うようにすればよい。また、前後方一致の場合は、前方一致の部分キーを文字開始位置を１とし、後方一致の部分キーをずらしてハッシュ値を求め、検索すればよい。同様にしてワイルドカードを＊として、「＊Ａ＊Ｂ＊」のような柔軟な検索も容易に実現できる。
【００６０】
なお、本実施例では、１つ１つのハッシュ値に対して、繰り返し検索を行うように構成しているが、各ハッシュ値を並列計算の可能な計算機を用いて、並列に検索しても構わない。
【００６１】
【発明の効果】
以上述べたように、本発明によれば、高速な検索方法でありながら、完全一致検索のみでワイルドカード検索などの柔軟な検索が不可能であったハッシュ法において、データ構造の追加も全データの参照をも行うことなく、部分一致検索が可能になる。さらに、本発明の検索方法では、前方一致、後方一致、前後方一致、中間一致等の全ての部分一致検索がデータ構造の追加なしに実現できる。
【図面の簡単な説明】
【図１】部分一致検索の可能なハッシュ関数の例を示す説明図である。
【図２】ハッシュ法における部分一致検索の原理を示す例である。
【図３】本発明のハッシュ検索方法を適用した電子辞書の構成例を示すブロック図である。
【図４】本発明のハッシュ検索方法を電子辞書に適用するためのデータ構造成例を示す説明図である。
【図５】本発明のハッシュ検索方法を適用した電子辞書の部分一致検索の概略のフローチャートである。
【図６】インデックスレコードの構造を示す図である。
【図７】インデックスレコードにおけるチェインポインタのリストを示す図である。
【図８】電子辞書によるデータ検索のアルゴリズムを示すフローチャートである。
【図９】部分一致検索の可能なハッシュ関数の例を用いてハッシュ値を求める例を示す説明図である。
【図１０】部分一致検索の実現例を示す詳細なフローチャートである。
【図１１】部分キーに対応する複数のハッシュ値の中の１つを求める例を示す説明図である。
【図１２】後方一致検索におけるキー識別方法の例を示す説明図である。
【符号の説明】
ｌ１…ハッシュ表、１２…チェイン付きインデックス、ｌ３…実データファイル、２１…ＣＲＴ、２２…ＣＲＴドライバ、２２…キーボード、２４…マウス、１５…キーボード／マウスドライバ、２６…ディスク装置、２７…ディスク装置ドライバ、２８…主記憶装置、２９…ＣＰＵ
【図１】
0003596696.tif 000002
【図２】
0003596696.tif 000003
【図３】
0003596696.tif 000004
【図４】
0003596696.tif 000005
【図５】
0003596696.tif 000006
【図６】
0003596696.tif 000007
【図７】
0003596696.tif 000008
【図８】
0003596696.tif 000009
【図９】
0003596696.tif 000010
【図１０】
0003596696.tif 000011
【図１１】
0003596696.tif 000012
【図１２】
0003596696.tif 000013