(57)【特許請求の範囲】
【請求項１】
コンピュータメモリに記憶される複数のレコードを備えているデータ構造に問い合わせるコンピュータ・プログラムであって、
各レコードは仮想の２分木として構造化される複数のノードを含み、前記仮想の２分木が根ノード及び複数の葉ノードを備えるように構成されており、レコードは前記根ノードと前記複数の葉ノードとの間に１又は複数の中間ノードを含んでおり、
前記ノードの各々は、前記ノードが位置する前記仮想の２分木のレベルを指示するレベルインデックスと、前記レベルの仮想の２分木におけるノードのラテラル位置を指示するラテラルインデックスとの両方を有するノード位置アドレスを有しており、
前記コンピュータ・プログラムは、仮想の２分木の根ノード位置アドレスから葉ノード位置アドレスへ仮想の２分木を介した経路を定義することによって仮想の２分木の葉ノード位置アドレスに記憶されたデータ値の検索を可能にする命令セットを作成する機能をコンピュータに実現させ、前記命令セットは、仮想の２分木内の葉ノード位置アドレスを識別する段階として、
（ａ）前記仮想の２分木内でノード位置アドレスのレベルインデックスとラテラル位置を求める段階；
（ｂ）ラテラル位置の値が偶数か奇数かを求める段階；
（ｃ）前記ラテラル位置が奇数である場合には第１のタイプの命令を入力し、前記ラテラル位置が偶数である場合には第２のタイプである命令を前記命令セットに入力すると共に根ノード位置アドレスのレベルインデックスに対して１だけ近いレベルインデックスにおける仮想の２分木内で更なるノード位置アドレスを識別する段階；及び
（ｄ）前記更なるノード位置アドレスのレベルインデックスが根ノード位置アドレスのレベルインデックスになるまで段階（ｃ）で識別された何れかの更なるノード位置アドレスに対して段階（ａ）から（ｃ）を繰り返す段階、によって作成されるものであり、
前記命令セットの各命令は、仮想の２分木の１つのレベルからその次のレベルへの経路のナビゲーションを可能にし、前記命令セットは、全体として、根ノード位置アドレスから葉ノード位置アドレスへのナビゲーションを可能にすることを特徴とするコンピュータ・プログラム。
【請求項２】
（ａ）所定のデータ値と関連するフィールドに対してデータ値を記憶する葉ノードを識別する経路を特定する段階；
（ｂ）前記命令セットに対応している前記仮想の２分木内の葉ノード位置アドレスに記憶されたデータ値を読み出す段階；
（ｃ）前記データ値が仮想の２分木内で事前に与えられていない場合には１カウントすると共にメモリのリストに前記データ値を追加し、該データ値が仮想の２分木内で事前に与えられている場合には代りにそのデータ値に関連付けられたリストのカウント変数を１だけ進める段階；及び
（ｄ）前記データ構造の残りの仮想の２分木に対して段階（ａ）〜段階（ｃ）を繰り返す段階、
によって、特定された葉ノード位置アドレスが前記葉ノード位置アドレスと関連する所定のデータ値を記憶しているレコードの数を出力する機能をコンピュータにさらに実現させる請求項１に記載のコンピュータ・プログラム。
【請求項３】
（ａ）前記リストの各データ値に対してメモリに空のテーブルを生成する段階；
（ｂ）根ノードを読出し、特定された経路を用いて対応する葉ノードに記憶された前記データ値を見出す段階；
（ｃ）前記特定した命令セットに対応している前記データ値に依存するテーブルに前記仮想の２分木の根ノード・位置アドレスを割り当てる段階；
（ｄ）前記データ構造の残りの仮想の２分木に対して段階（ｂ）及び段階（ｃ）を繰り返す段階、
によって、前記命令セットと関連する所定のデータ値を有する全てのレコードを識別する機能をコンピュータにさらに実現させる請求項２に記載のコンピュータ・プログラム。
【請求項４】
（ａ）前記命令セットに対応している仮想の２分木内の葉によって特定された前記データ値が、特定されたデータ値であるかどうかを求め、特定されたデータ値である場合には、メモリのリストに前記仮想の２分木に対応しているレコードを追加する段階；
（ｂ）残りの仮想の２分木に対して段階（ａ）を繰り返す段階、によって、特定されたフィールド内の特定されたデータ値であって、前記命令セットに対応する葉ノード位置アドレスに記憶される前記特定されたデータ値を有する前記データ構造における全てのレコードを出力する機能をコンピュータにさらに実現させることを特徴とする請求項１に記載のコンピュータ・プログラム。
【請求項５】
コンピュータが、コンピュータメモリに記憶される複数のレコードを備えているデータ構造に問い合わせる方法であって、
各レコードは仮想の２分木として構造化される複数のノードを含み、前記仮想の２分木が根ノード及び複数の葉ノードを備えるように構成されており、レコードは前記根ノードと前記複数の葉ノードとの間に１又は複数の中間ノードを含んでおり、
前記ノードの各々は、前記ノードが位置する前記仮想の２分木のレベルを指示するレベルインデックスと、前記レベルの仮想の２分木におけるノードのラテラル位置を同じレベルの仮想の２分木の他のノードに対して指示するラテラルインデックスとの両方を有しており、
前記コンピュータが、仮想の２分木の根ノード位置アドレスから葉ノード位置アドレスへ仮想の２分木を介した経路を定義することによって仮想の２分木の葉ノード位置アドレスに記憶されたデータ値の検索を可能にする命令セットを作成し、前記命令セットは、仮想の２分木内で葉ノード位置アドレスを識別する段階として、
（ａ）前記仮想の２分木内でノード位置アドレスのレベルインデックスとラテラル位置を求める段階；
（ｂ）ラテラル位置の値が偶数か奇数かを求める段階；
（ｃ）前記ラテラル位置が奇数である場合には第１のタイプの命令であり、前記ラテラル位置が偶数である場合には第２のタイプである命令を前記命令セットに入力すると共に根ノード位置アドレスのレベルインデックスに対して１だけ近いレベルインデックスにおける仮想の２分木内で更なるノード位置アドレスを識別する段階；及び
（ｄ）前記更なるノード位置アドレスのレベルインデックスが根ノード位置アドレスのレベルインデックスになるまで段階（ｃ）で識別された何れかの更なるノード位置アドレスに対して段階（ａ）から（ｃ）を繰り返す段階、を前記コンピュータによって作成され、
前記命令セットの各命令は、仮想の２分木の１つのレベルからその次のレベルへの経路のナビゲーションを可能にし、前記命令セットは、全体として、根ノード位置アドレスから葉ノード位置アドレスへのナビゲーションを可能にすることを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
１．（技術フィールド）
本発明は、圧縮データの構造、特には、排他的ではないが、圧縮データベースに関し、かつ圧縮データベースを問い合わせる方法及びコンピュータ・ソフトウェアに関する。
【背景技術】
【０００２】
２．（背景技術）
電子データベースを形成するためにコンピュータ・システムにレコードを記憶することは、よく知られた技法である。市販されているデータベース・ソフトウェアは、レコードをコンピュータ・システムのメモリ内に記憶させかつ一つ以上のサーチ基準を満たしている記憶したレコードを回復かつ表示させる。
【０００３】
しばしば、データベースは、多数のレコードを記憶することを要求される。例えば、人間または乗り物の詳細を保持しているデータベースは、ほぼ１０7の大きさのレコード数を記憶することを要求されうる。そのような多数のレコードを記憶するために必要なメモリの量を低減するために、従って 利用可能なメモリのより効率的使用を供給するために、記憶されるべきレコードを備えている入力データの圧縮をアレンジすることが一般的に望ましい。データ圧縮は、特定のデータのシングル・インスタンスだけを記憶することによって、即ち、入力データから冗長データを取り除くことによって典型的に達成される。入力データ内のデータの固有のインスタンスは、入力データの完全な復元を供給するメモリ内の圧縮データ構造として記憶される。圧縮データの構造を記憶するシステムの一例は、米国特許第５，２４５，３３７号公報及び米国特許第５，５９２，６６７号公報に開示されている。システムは、各々が関連メモリを有する一連のプロセッサを含む。デジタル入力データの本体は、先に発生していない入力データのデータ要素のペアを検出しかつ第１の関連メモリにデータ要素のペアを記憶する一連の第１のプロセッサに逐次に印加される。第１のプロセッサからの出力信号は、第１の関連メモリにおける各データ・ペアの記憶位置を識別する。後続のプロセッサは、実際のデータではなくメモリにおける記憶位置を表している信号で動作する。各プロセッサは、それに入力された一対の入力データ要素に対応しているメモリにおける一つの位置を生成し、かつその位置にその一対のデータ要素を記憶する。また、各プロセッサは、データ要素の各入力対が発生した回数を求めかつその対に関連付けられたメモリにおける位置にその数を記憶する。各プロセッサによって生成されかつその関連メモリに記憶されたハッシング・テーブルは、先に記憶されたデータ要素のペアの識別を簡略化するためにデータ要素の記憶されたペアをグループに纏めるために用いられる。データ要素の各ペアのメモリ位置に記憶されたアドレス・ポインタは、データ要素の入力ペアが発生の確率によりグループ内に記憶されうるように入力データにおける発生頻度の順序でグループ内の隣接するペアをリンクする。データ要素のペア及びそれらの間の関連を記憶することによってデータを圧縮するための別のシステムは、公開国際出願ＰＣＴ／ＮＺ９４／００１４６（国際公開ＷＯ９５／１７７８３号公報）に開示されている。
【０００４】
これらのシステムは、圧縮データ構造からの入力データ・ストリームを正確に復元することができるが、それらは、データベースにおいて要求されるような、一つ以上のサーチ基準に基づくデータ要素のグループを選択する手段をまったく提供しない。
【発明の概要】
【０００５】
本発明の目的は、少なくとも一つのサーチ基準を用いて電子データベースをサーチするための代替方法を提供することにある。
【課題を解決するための手段】
【０００６】
（発明の開示）
本発明は、各レコードが２分木として複数のノード構造を備えている；複数のレコードを備えているデータ構造を問い合わせる方法であって、
（ａ）ノードが属する２分木内の葉ノードの位置アドレスを求める段階；
（ｂ）前記葉ノードのラテラル位置インデックスを設定する段階；及び
（ｃ）前記ノードのラテラル位置インデックスに依存する命令を命令セットに入力する段階
によって前記２分木の葉ノードに記憶されたデータ値にアクセスするための命令セットを生成する動作を備えている方法を提供する。
【０００７】
本発明は、圧縮データの構造が先に可能であったよりも更に迅速に問い合わせされうるという効果を提供する。
【０００８】
好適には、本発明の方法は、命令セット及び２分木の根ノード位置アドレスを用いて２分木の葉ノードに記憶されたデータ値を検索する段階を更に具備する。命令セットの対応しているデータ値は、それゆえに検索されうるし、データベースのより複雑な探索に対するベースを提供する。
【０００９】
本発明の方法は、（ａ）２分木を特定する段階；
（ｂ）命令セットを特定する段階；
（ｃ）前記命令セットに対応しているノード位置アドレスの前記２分木内に記憶されたデータ値を読み出す段階；
（ｄ）それが２分木内で先に見出されていない場合には１のカウントだけメモリのリストに前記データ値を追加するかまたは該データ値が２分木内で先に見出されている場合には１だけそのデータ値に関連付けられたリストのカウント変数を代りに進める段階；及び
（ｅ）前記データ構造の残りの２分木に対して段階（ａ）〜段階（ｄ）を繰り返す段階、
を更に具備する。
【００１０】
これは、特定のフィールドの全ての可能な値のセット及びそれらの値がデータベースに現われる頻度を求める。
【００１１】
本発明の方法は、（ａ）前記リストの各データに対してメモリにテーブルを生成する段階；
（ｂ）２分木の、前記特定した命令セットに対応しているデータ値を読出す段階；
（ｃ）前記特定した命令セットに対応している前記データ値によりテーブルに２分木の根ノード・アドレスを割り当てる段階；
（ｄ）前記データ構造の残りの２分木に対して段階（ｂ）及び段階（ｃ）を繰り返す段階、
を更に具備する。
【００１２】
これは、根ノード・アドレスを根ノード・アドレスに対応しているレコード内の特定のフィールドのデータ値によってグループ化させることを可能にする。
【００１３】
本発明の方法は、（ａ）前記リストの前記データ値に対する順序を特定する段階；及び
（ｂ）前記データ値の前記順序に対応している順序に前記テーブルを配列する段階、
を更に具備する。
【００１４】
これは、データベースの全てのレコードを、各グループが特定のフィールドが特定のデータ値を含む全てのレコードで構成されている、一連のグループで出力させることを可能にする。
【図面の簡単な説明】
【００１５】
【図１】データベースを形成するレコードのテーブルを示す図である。
【図２】２分木の森として図１のレコードを表す図である。
【図３】図２の森の特定の２分木をより詳細に示す図である。
【図４】図１のデータベースで動作するアルゴリズムを問い合わせることの実行における段を示しているフローチャートである。
【図５】図１のデータベースで動作するアルゴリズムを問い合わせることの実行における段を示しているフローチャートである。
【図６】図１のデータベースで動作するアルゴリズムを問い合わせることの実行における段を示しているフローチャートである。
【図７】図１のデータベースで動作するアルゴリズムを問い合わせることの実行における段を示しているフローチャートである。
【図８】図１のデータベースで動作するアルゴリズムを問い合わせることの実行における段を示しているフローチャートである。
【図９】図１のデータベースで動作するアルゴリズムを問い合わせることの実行における段を示しているフローチャートである。
【図１０】セットフォー関数を実行するためのアルゴリズムのフローチャートが示されている。
【図１１】選択関数を実現するアルゴリズムの実行を示しているフローチャートが示されている。
【図１２】各々のグループが特定されたフィールド種類がそのフィールドの全ての可能なデータ値の一つを有する全てのレコードで構成されている、一組のグループにデータベースの全てのレコードを区分するアルゴリズムを示しているフローチャートが示されている。
【図１３】分類関数の実行を示すフローチャートが示されている。
【発明を実施するための形態】
【００１６】
本発明をより完全に理解するために、その実施形態を、添付した図面を参照して、ほんの例として以下に説明する。
【００１７】
（発明を実施するための最良の形態）
図１を参照すると、自動車保険会社によって維持されるデータベースに入力されうる例示データを備えているテーブル１０が示されている。テーブルは、保険が掛けられた車両の詳細を特定する３つのレコードを備えている。各レコードは、４つのフィールド、具体的には、車両のメーカーに対応しているデータ値を記憶するためのメーカー・フィールド、車両の製造年度に対応しているデータ値を記憶するための年度フィールド、車両の使用に対応しているデータ値を記憶するための使用フィールド、及び車両の保険の掛け金に対応しているデータ値を記憶するための掛け金フィールドを備えている。各レコードは、そのレコードを固有に識別するレコード・インデックスを有する。レコードのレコード・インデックスをテーブル１０の左側の最初の欄に示す。
【００１８】
ここで図２を参照すると、図１のテーブル１０に示した３つのレコードからのデータは、各々が図１のテーブル１０におけるレコードを表す２分木２２、２４、２６の森２０として構成されて示されている。森２０は、レコードが、データベースが保持されるコンピュータのメモリ内にどのように記憶されるかを図式的に示す。２分木は、メモリ内の特定のレコードの表現でありかつ一つの根ノード、中間ノード及び葉ノードを備えている。例えば、２分木２２は、根ノード３０、中間ノード３２、３３及び葉ノード３４、３５、３６、３７を備えている。３４、３５、３６、３７のような葉ノードは、特定のメモリ・アドレスにおけるテーブル１０の個々のレコードのフィールドからのデータのシングル・インスタンスを記憶する。３２のような中間ノードは、メモリ・アドレスにおける二つの葉ノードのメモリ・アドレスを記憶し、かつ３０のような根ノードは、メモリ・アドレスにおける二つの中間ノードのアドレスを記憶する。また、各根ノードは、それから導出されるレコードのレコード・インデックスも記憶する。２分木の森２０は、以下のように図１のテーブル１０に示されたレコードの個々のフィールド内のデータから生成される。（インデックス番号０を有している）第１のレコードのフィールドからのデータは、一連の４つの葉ノード３４、３５、３６、３７としてメモリに表される。即ち、“フォード”TM、“フリート”、及び“£４００”に対応しているデータは、個別のメモリ・アドレスにおけるメモリ内に記憶される。中間ノード３２は、データ“フォード”TM及び“１９９４”をそれぞれ表す、葉ノード３４、３５のアドレスを記憶する。同様に、中間ノード３３は、データ“フリート”及び“£４００”をそれぞれ表す葉ノード３６、３７のアドレスを記憶する。根ノード３０は、二つの中間ノード３２及び３３のアドレスを記憶する。所与の根ノードに対応しているレコードのレコード・インデックスは、その根ノードのアドレスから導出されうる。
【００１９】
図１のテーブル１０における（インデックス番号１を有する）第２のレコードのフィールドからのデータは、次いで森２０に入力される。葉ノードとして先に記憶されていない第２のレコードの各フィールドからのデータは、新しい葉ノードとして森２０に記憶される。従って、新しい葉ノード３８、３９、４０は、“１９９６”、“プライベート”及び“£３００”に対応しているデータ要素を記憶するために生成される。中間ノード４１は、葉ノード３４及び３８のメモリ・アドレスを記憶するために生成される。データ“フォード”TMを記憶している新しい葉ノードは、そのような葉ノードが森２０への第１のレコードの入力中に既に生成されているときには、生成されない。中間ノード４２は、葉ノード３９及び４０のメモリ・アドレスを記憶するために生成される。根ノード４５は、中間にノード４１、４２のアドレスを記憶するために生成される。
【００２０】
（インデックス番号２を有する）図１のテーブル１０の第３のレコードは、次いで森２０に入力される。一つの葉ノード４３は、メモリで生成されかつデータ“アウディ”TMを記憶する。データ“１９９６”、“フリート”及び“£４００”を記憶している葉ノードが既に生成されているのでその他の新しい葉ノードは生成されない。葉ノード４３及び３８のアドレスを含んで新しい中間ノード４４が生成される。中間ノード４４及び３３のアドレスを含む新しい根ノード４６が生成される。それゆえに、図１のテーブル１０の第３のレコードからのデータが森２０に追加されるときには、たった一つだけの新しい葉ノード４３と一つの新しい中間ノード４４が生成される。
【００２１】
更なるレコードからのデータは、森２０に追加されうる。新しいレコードが森２０に入力される毎に新しい根ノードが生成される。特定のメーカー／年度ペアが森２０へのデータの入力中に先に発生した場合には、中間ノードは、そのペアに関して既に存在しかつ新しい根ノードは、その中間ノードのアドレスを含む。同様に、特定のフラグ／掛け金ペアが森２０に先に入力された場合には、中間ノードは、そのペアに関して既に存在しかつ新しい根ノードがその中間ノードのアドレスを含む。メーカー及び年度の少なくとも一つが固有な場合、及び／またはフラグ及び掛け金の一つが固有な場合には新しい中間ノードが生成される。新しい葉ノードは、レコードのフィールドからのデータが森２０に先に入力されていないときにだけ、生成される。レコードが森２０に先に入力されたレコードのものと同じフィールドを有する場合には、新しい根ノードは、重複レコードの存在を示すために構造に追加される。そのような場合には、新しい根ノードは、既に存在する二つの中間ノードのアドレスを含む。
【００２２】
森２０に入力されたレコードの合計数が増加すると、記憶されたデータの量が成長する速度は、それが最小成長速度に収束するまで減少する。これが発生するときは、森に記憶されたデータの量は、データベースのレコードの数と根ノードを記憶するために必要なメモリの量とを掛け算したものである。森２０は、冗長データを記憶しないことによって入力データの圧縮を供給する。
【００２３】
２分木の各ノードは、それが属する２分木におけるノードの位置を特定するノード位置アドレスが割り当てられる。ノード位置アドレスは、形式（ｎ，ｍ）を有し、ここでｎは、ノードが葉ノード、中間ノードまたは根ノードかどうかを示しているレベル・インデックスであり、かつｍは、ノードのラテラル位置を示しているラテラル位置インデックスである。図３をここで参照すると、図２の２分木２２が単独で示されている。データ“フォード”、“１９９４”、“フリート”及び“£４００”をそれぞれ記憶している葉ノード３４、３５、３６、３７は、ノード位置アドレス（０，０）、（０，１）、（０，２）及び（０，３）をそれぞれ有する。中間ノード３２、３３は、ノード位置アドレス（１，０）、（１，１）をそれぞれ有しかつ根ノード３０は、ノード位置アドレス（２，０）を有する。
【００２４】
図４から図７は、データベースが問い合わせされるときに図２の森２０が実現されるようにメモリ内にデータがどのように記憶されるかを示す。図４は、根ノードに対応しているデータを記憶するメモリ・ブロック４７の一部を示す。図５は、 根ノードの左側にある中間ノードに対応しているデータを記憶するメモリ・ブロック４８Ａの一部を示しかつ図６は、根ノードの右側にある中間ノードに対応しているデータを記憶するメモリ・ブロック４８Ｂの一部を示す。図７は、葉ノードに対応しているデータを記憶するメモリ・ブロック４９の一部を示す。
【００２５】
図４を参照すると、アドレス位置１００４２０、１００４２４は、図２に示した森２０の２分木２２の根ノード３０に対応する。アドレス位置１００４２８、１００４３２は、２分木２４の根ノード４５に対応しかつアドレス位置１００４３６、１００４４０は、２分木２６の根ノード４６に対応する。
【００２６】
どのように２分木に対応しているデータがメモリ内に記憶されるかの例として、図２の２分木２４を考える。２分木２４の根ノード４５は、その一部分が図４に示される、メモリ・ブロック４７のアドレス位置１００４２８及び１００４３２によって表される。アドレス位置１００４２８は、値１４４２１２を記憶し、かつアドレス位置１００４３２は、値１５６９６８を記憶する。値１４４２１２は、その一部分が図５に示される、メモリ・ブロック４８Ａ内の一対のアドレス位置１４４２１２及び１４４２１６をポイントし、かつ値１５６９６８は、その一部分が図６に示される、メモリ・ブロック４８Ｂ内の一対のアドレス位置１５６９６８及び１５６９７２をポイントする。値１４４２１２及び１５６９６８が、それぞれアドレス位置１４４２１２及び１５６９６８に加えて、アドレス位置１４４２１６及び１５６９７２をそれぞれポイントすることは、以下に詳述するデータベースに問い合わせるために用いるアルゴリズムを問い合わせすることによって実現される。
【００２７】
図５を参照すると、メモリ・ブロック４８Ａ内のアドレス位置１４４２１２、１４４２１６は、２分木２４の中間ノード４１、即ち、根ノード４５の左側にある中間ノードに対応している。図６を参照すると、メモリ・ブロック４８Ｂ内のアドレス位置１５６９６８、１５６９７２は、２分木２４の中間ノード４２、即ち、根ノード４５の右側にある中間ノードに対応している。
【００２８】
メモリ・ブロック４８Ａ内のアドレス位置１４４２１２、１４４２１６は、値２４２５５２及び２４２５７２をそれぞれ記憶する。これらの値は、葉ノード４３及び３８に対応しているデータをそれぞれ記憶する図７のメモリ・ブロック４９内のアドレス位置の第１の連続のペアである。同様に、メモリ・ブロック４８Ｂ内のアドレス位置１５６９６８、１５６９７２は、値２４２５８４及び２４２５９６をそれぞれ記憶し、これらの値は、葉ノード３９及４０に対応しているデータをそれぞれ記憶する図７のメモリ・ブロック４９内のアドレス位置の第１の連続のペアである。メモリ・ブロック４８Ａ、４８Ｂのいずれかの特定のアドレス位置に記憶される値が図７のメモリ・ブロック４９の二つの連続のアドレス位置をポイントするということは、以下に詳述するデータベースを問い合わせるために用いられるアルゴリズムに問い合わせをすることによって実現される。
【００２９】
本発明の本実施形態は、データベースのコンテンツに問い合わせされることができるようにする効用関数を更に備えている。“経路”関数と呼ばれる、一つのそのような効用関数は、経路と呼ばれるデータ構造を戻す。経路は、２分木をその根ノードから２分木の特定の葉ノードまでナビゲートさせる。経路は、各々が根ノードから開始して特定の葉ノードに到達するために特定の中間ノードにおいて左または右フォークが取られるべきであることを特定する、一組の命令である。再び図３を参照すると、根ノード３０からの葉ノード３６への経路は、（右、左）である。ここで図８を参照すると、所与の葉ノードへの経路を求めるためのアルゴリズムが示されている。アルゴリズムは、以下のように動作する。空の経路、即ち、命令をまったく含んでいない経路が生成される（５０）。次いで、現在考慮中のノードが根ノードを表すレベル・インデックスを有するかどうかが設定される（５１）。現在考慮中のノードが根ノードである場合には、アルゴリズムを終了し、根ノードでない場合には、ノードのラテラル・インデックスが確かめられる（５２）。ラテラル・インデックスが奇数である場合には、命令“右”が経路の最後の命令として入力される（５５）。ラテラル・インデックスが偶数である場合には、命令“左”が経路の最後の命令として入力される（５３）。次いで、ちょうど考慮したノードのアドレスを記憶するノードのノード位置アドレスは、同様な方法で経路の最後から２番目の命令を設定するために用いられる。処理は、根ノードに到達するまで続ける（５６）。
【００３０】
ここで図９を参照すると、どのようにその葉ノードへの経路を用いて２分木が木の根ノードから葉ノードまでナビゲートされるかを示しているフロー図が示されている。アドレス変数は、根ノードのアドレスに設定される（６０）。次いで、葉ノードの経路が空であるかどうか確かめられる（６１）。経路が空である場合には、アドレス変数は、葉ノードのものと同じであり（６２）かつアルゴリズムが終了する（６７）。経路が空ではない場合には、経路における第１の命令が“左”であるか否かが設定される（６３）。第１の命令が左である場合には、アドレス変数は、レベルｌ−１のノードのアドレスに設定される。ここでｌは、根ノードのレベルであり、かつ根ノードの左側にある（６４）。経路の第１の命令が“右”である場合には、アドレス変数は、レベルｌ−１にあるノードのアドレスに設定される。ここでｌは、根ノードのレベルであり、かつ根ノードの右側にある（６６）。次いで、経路の第１の命令が削除され（６５）かつ経路が空になるまでアルゴリズムが繰り返される。経路によって特定された葉ノードのアドレスは、次いでアドレス変数として記憶される。
【００３１】
本実施形態の別の効用関数は、“セットフォー”である。セットフォー関数は、フィールドの一組の全ての可能な値及びそれらのフィールドがデータベースに現われる頻度を求めるために用いられる。例えば、図２に示した２分木の森２０として記憶される図１のテーブル１０を参照すると、どのくらいの数の自動車がフォードTMによって製造されかつどのくらいの数がアウディTMによって製造されたかを決定することを必要としうる。ここで図１０を参照すると、セットフォー関数を実行するためのアルゴリズムのフローチャートが示されている。レコード・インデックス変数は、森における第１の木を特定するためにゼロに設定されかつ要求された種類のデータを記憶する葉ノードを識別している経路が特定される（７０）。例えば、図２に示す森２０では、メーカー・データを記憶している葉ノードは、各々ノード位置アドレス（０，０）及び経路（左、左）を有する。経路及びレコード・インデックス変数によって特定された葉ノードに記憶されたデータ値が読み出される（７１）。データ値は、１のカウントでデータ値のリストに追加される（７６）。更なるレコードが森に存在しない場合には（７４）、アルゴリズムが終了し（７５）さもなければレコード・インデックス値が１つだけ進められ（７７）かつ進められたレコード・インデックス変数及び特定された経路に対応している葉ノードが読み出される。データ値がリストに先に入力されている場合には、リスト内のそのデータ値に対するカウントは、１つだけ進められるか（７３）、さもなければデータ値は、１のカウントでリストに追加される（７６）。レコード・インデックス変数が現在のレコードが森における最後であるということを示す場合には、アルゴリズムは、終了し（７５）、さもなければレコード・インデックス変数は、１だけ進められかつ別の葉ノードが読み出される。図６に示したアルゴリズムの完了の後、リストは、どのくらいの数のレコードが各データ値を含むかのカウントと一緒に経路によって特定された種類の全てのデータ値を含む。一度問い合わせがなされたならば、その結果は、更なる計算を節約するためにキャッシュされる。また、図１０のアルゴリズムは、特定のフィールドに関連付けられた固有のデータ値の数を求めさせることができる。この数は、リストにおけるエントリの数に等しい。また、セットフォー関数は、数値データ値を記憶しているフィールドの合計を計算するために用いうる。例えば、図１及び図２に示したデータベースにおいて、データベースにおける掛け金の合計値を計算することが要求されうる。掛け金のリストは、上述したように生成されうるし、かつ合計掛け金は、一組の固有の掛け金及び各掛け金がデータベースで発生する頻度を用いて計算される。
【００３２】
また、本発明の本実施形態は、特定されたフィールド内の特定されたデータ値を有している全てのレコードを出力する、“選択”と呼ばれる関数を備えている。ここで図１１を参照すると、選択関数を実現するアルゴリズムの実行を示しているフローチャートが示される。空リストは、根ノード・アドレスのリストを記憶するためのメモリでまず生成される（８０）。特定の種類のデータに対応している経路及びその種類に対応している特定のデータ値が特定される（８１）。次いで経路が森内の２分木に適用される（８２）。経路によって特定されたその２分木の葉が特定されたデータ値を記憶する場合には（８４）、その２分木の根ノード・アドレスは、リストに追加され、かつ森の次の木が同様な方法で問い合わせられる。森の全ての木が問い合わせされたときには、リストの全ての根ノード・アドレスに対応しているレコードが出力され（８７）次いでアルゴリズムが終了する（８８）。選択関数は、特定されたフィールドが特定された組のデータ値に属するデータ値を記憶するレコードを戻すために変更されうる。例えば、図１及び図２に示したデータベースにおいて、£２００以上の保険の掛け金が存在する全てのレコードを見出すことが要求されうる。これを実現するために、二つ以上のデータ値が図１１に示したアルゴリズムの８１で特定されうる。
【００３３】
ちょうど説明したものよりも複雑なレコードの選択を行うことを必要としうる。例えば、図１及び２に示したデータベースの場合には、製造者フィールドがデータ値“フォード”TMを有しかつ年度フィールドが１９９５またはそれ以上のデータ値を記憶する全てのレコードを出力することを必要としうる。この機能性を達成するために、第１の経路は、第１のフィールドが第１のデータ値を有する一組のレコードを生成するために用いられる。次いで、一組のレコードは、第２の経路が第２のフィールドが第２のデータ値を有するか、または一連の第２のデータ値のいずれか一つを有するレコードのサブセットを識別するために用いられるサブルーチンに入力される。それゆえに二つの基準を満たしているレコードが識別されうる。
【００３４】
ここで図１２を参照すると、各々のグループが特定されたフィールド種類がそのフィールドの全ての可能なデータ値の一つを有する全てのレコードで構成されている、一組のグループにデータベースの全てのレコードを区分するアルゴリズムを示しているフローチャートが示されている。例えば、図１及び図２に示したデータベースは、二つの可能な製造者データ値、“フォード”TM及び“アウディ”TMに対応している二つのグループに区分されうる。区分フィールド、即ち、データベースが分解されるレコードの一つ以上のグループを画定する一組の可能なデータ値のフィールド種類が最初に選択され（９０）、そして対応する経路が特定される。次いで一組の関数がそのフィールド種類に関して実行される（９１）。区分の数は、セット・フォー関数によって生成されたリストにおけるエントリの数に等しい。最初が空のテーブルの対応する数は、メモリで生成される（９２）。リストのエントリ・カウントがそのパーティションによって占められたメモリ空間の量を決定する。次いで、根ノードが読み出され（９３）かつ特定された経路が対応している葉ノードに記憶されたデータ値を見出すために用いられる。次いでそのデータ値は、根ルートをパーティションの一つに割り当てるために用いられ、かつ対応しているレコードのフィールドは、パーティションのエントリに書き込まれる。残りの根ノード及びレコードは、データベースの全てのレコードが分析されるまで同様な方法で処理される。
【００３５】
また、本実施形態は、分類済みリストとしてデータベースの全てのレコードを出力する分類関数と呼ばれる問合せ関数も含む。分類済みリストは、選択フィールド種類が一定のデータ値を有する一連のレコードのグループを備えている。例えば、図１のテーブル１０によって表されるデータベース及び図２の森２０は、製造者フィールドがデータ値“フォード”TMを有する全てのレコードをまずリストし次いで製造者フィールドがデータ値“アウディ”TMを有する全てのレコードをリストするレコードのリストとして出力されうる。ここで図１３を参照すると、分類関数の実行を示すフローチャートが示されている。データベースのレコードを分類するためのフィールド種類が選択され（１００）かつそのフィールド種類に関して存在する全ての可能なデータ値のメモリをリストに生成するために一組の関数が実行され（１０１）、かつ各々のそのようなデータ値に対して、選択フィールド種類を有しているレコードの数をそのデータ値に設定する。選択フィールドに対する一組の全ての可能なデータ値に対する所望の順序が特定される（１０２）；これは、レコードのグループが分類関数によって生成された出力に現われる順序を決める。次いで、データベースのレコードを１０２で特定されたデータ値の所望の順序により順序付けされる（１０４）グループに区分するために区分関数が実行される（１０３）。次いで、順序付けされた、または分類されたレコードは、出力され（１０５）かつアルゴリズムが終了する（１０６）。
【００３６】
通常のデータベース・システムでは、ｎのレコードを分類するために要する時間は、ｎｌｏｇ2ｎに比例する。しかしながら、図１３に示したフローチャートによって示された分類関数を用いることにより、データベースを分類するために必要な時間は、ｍｌｏｇ2ｍ＋２ｎに比例し、ここにｎは、レコードの数でありかつｍは、選択フィールドに対する可能なデータ値の合計数である。ほとんどのデータにおいてｍは、ｎと比較して小さく、本発明によりデータベースを分類するために必要な時間は、通常のデータベースの場合における線形以上と比較して、ｎがｍよりも遥かに大きいときにレコードの数により線形的に大きくなるだけである。
【００３７】
上記説明は、各々が４つのフィールドを有する、３つのレコードを備えている非常に簡単なデータベースに関する。しかしながら本発明の問い合わせ方法は、２分木のより複雑な森の形式で記憶されたデータに適用されうる。例えば、森の所与の２分木は、各々が葉ノードのアドレス以外の一つ以上の中間ノードのアドレスを記憶する中間ノードを備えうる。
【００３８】
本発明の実施形態は、Ｃ及びＪａｖａTM（登録商標）のような一般に用いられる言語の汎用コンピュータで実行されるコンピュータ・プログラムによって実現されうる。
【００３９】
図８から図１３に示した探索関数は、プログラム・コードを書き込むことを必要とせずに視覚的表示装置に図式的に問い合わせをユーザに構築させるグラフィカル・ユーザ・インタフェース（ＧＵＩ）を含んでいる手段によって実現されうる。これは、コンピュータの技術分野で“ビジュアル・プログラミング”と称される：ユーザは、必要なプログラミング関数を形成するためにＧＵＩ上の図形要素（アイコン）を操作しかつ連結することによってコンピュータ・プログラムを画定する。例えば、図１及び図２に示したデータベースで選択関数を実行するときには、ユーザは、例えば掛け金が£３００よりも大きいレコードのサブセットを選択するためにＧＵＩによって供給されたメニューによりフィールド種類（例えば、‘掛け金’）、オペレータ（例えば、“≧”）及びデータ値（例えば、“£３００”）を特定しうる。次いで、そのフィールド種類、オペレータ及びデータ値に対応しているレコードのサブセットは、ＧＵＩによって表示されうる。また、サブセットの更なる処理は、サブセットのデータで動作する関数に対応する図形要素を用いることにより実行されうる。例えば、サブセットにおける掛け金の値を合計しかつサブセットに対する平均掛け金を計算することを必要としうる。そのような計算は、合計化及び平均化関数に対応する視覚表示装置の図形要素を操作し、そのような関数を実行するためにプログラム・コードを書き込むことの必要性を回避することによって行われる。
【図１】
0005342958.tif 000002
【図２】
0005342958.tif 000003
【図３】
0005342958.tif 000004
【図４】
0005342958.tif 000005
【図５】
0005342958.tif 000006
【図６】
0005342958.tif 000007
【図７】
0005342958.tif 000008
【図８】
0005342958.tif 000009
【図９】
0005342958.tif 000010
【図１０】
0005342958.tif 000011
【図１１】
0005342958.tif 000012
【図１２】
0005342958.tif 000013
【図１３】
0005342958.tif 000014