(57)【特許請求の範囲】
【請求項１】
複数のデータ値（Ｄ）が列アドレスＡ（Ｘ）と行アドレスＢ（Ｘ）に対応したメモリ位置Ｘに記憶されるようにしたメモリ装置（ＤＲＡＭ）内の所定のデータ値（Ｄ）の記憶アドレス（Ａ（Ｘ），Ｂ（Ｘ））を決定するための方法であって、
前記メモリ位置Ｘはバイナリ・ツリーデータ構造のノードに対応し、当該バイナリ・ツリーデータ構造は、バイナリ・ツリー・ルートノード（ＲＮ）からなる最高位のツリーレベルから、複数のバイナリ・ツリー・リーフノード（ＬＮ）からなる最低位のツリーレベルに至る、データ値をともなった複数のノードからなり、ツリーレベルの各上位のノードとその次に低いツリーレベルにある２つの下位のノードは、当該下位の２つのノードのうちの１つのノードが前記上位のノードのデータ値に対して小さいデータ値を有し、当該下位の２つのノードのうちの他の１つのノードが前記上位のノードのデータ値に対して大きいデータ値を有しており、さらに、
前記バイナリ・ツリーデータ構造は、１又は２以上のツリーレベル（ｋ＝１、ｋ＝２、ｋ＝３）からなる所定のサブツリー深さＫを有する複数のサブツリーとして論理的に構成され、各サブツリーは、ルートノードと、前記所定のサブツリー深さＫに対応した中間ノードと、その次の下位のサブツリーのルートノードを構成する複数のリーフノードとを有し、
ある１つのサブツリーのルートノードと当該サブツリーの中間ノードと当該サブツリーのリーフノードのデータ値が前記メモリ装置（ＤＲＡＭ）の１つの行に対応し、それぞれのサブツリーのルートノードのデータ値は第１の列位置となるように、前記メモリ装置（ＤＲＡＭ）にデータ値（Ｄ）が記憶されて、前記メモリ装置（ＤＲＡＭ）の１つの行が１つのサブツリーの２Ｋ−１個のデータ値を含み、
ａ）  予め定められた現行の検索アドレス（Ａ（Ｘ），Ｂ（Ｘ））のデータ値（Ｄ）を前記メモリ装置から読み出すステップと、
ｂ）  読み出されたデータ値（Ｄ）が検索されるべきデータ値（Ｉ）より大きいかまたは小さいかを決定するために、前記読み出されたデータ値（Ｄ）を検索されるべき前記データ値（Ｉ）とを比較するステップと、
ｃ１）前記ステップｂ）で実施された比較の回数が前記所定のサブツリー深さＫに等しくない場合、データ値が検索されるべき次検索アドレス（Ａ’，Ｂ’）の次列アドレスＡ（Ｌ（Ｘ）），Ａ（Ｒ（Ｘ））を比較結果（Ｃ）と前記現行の列アドレスＡ（Ｘ）に基づいて計算する一方、次行アドレスＢ（Ｌ（Ｘ）），Ｂ（Ｒ（Ｘ））を現行の行アドレスＢ（Ｘ）のまま設定するステップと、
ｃ２）前記ステップｂ）で実施された比較の回数が前記所定のサブツリー深さＫに等しい場合、データ値に対して検索されるべき次検索アドレス（Ａ’，Ｂ’）の次行アドレスＢ（Ｌ（Ｘ）），Ｂ（Ｒ（Ｘ））を比較結果（Ｃ）、前記現行の列アドレスＡ（Ｘ）、前記現行の行アドレスＢ（Ｘ）および前記レベルＫの数に基づいて計算する一方、次列アドレスＡ（Ｌ（Ｘ）），Ａ（Ｒ（Ｘ））を１に設定するステップとを含み、
ｄ）  前記読み出しデータ値（Ｄ）が検索されるべき前記データ値（Ｉ）と予め定められた許容範囲（△Ｄ）内で一致するまで、ステップａ）−ｃ）が再帰的に実行される、前記方法。
【請求項２】
請求項１記載の方法であって、
データ値（Ｄ）は値の昇順に前記列方向に向かって記憶されている、前記方法。
【請求項３】
請求項１又は２記載の方法であって、
前記データ値（Ｄ）が最少データ値と最大データ値との範囲内にあり、ここで前記範囲の中央値に相当する中央データ値が予め定められたルート・アドレス（Ａ（０），Ｂ（０）；「ルート」）に記憶されており、ここでステップａ）が最初に実施される際に前記ルート・アドレスが前記現行のアドレスとして使用されることを特徴とする、前記方法。
【請求項４】
請求項１又は２記載の方法であって、
ステップｂ）の前記比較結果（Ｃ）が読み出しデータ値が検索されるべき前記データ値よりも小さいと示した際に（「左分岐」）、ステップｃ１）における前記次アドレスが下記の式（１）で計算され
Ｂ（Ｌ（Ｘ））＝Ｂ（Ｘ）
Ａ（Ｌ（Ｘ））＝２＊Ａ（Ｘ）＋０                    （１）
ここでＸは現行のアドレス（Ａ（Ｘ），Ｂ（Ｘ））で定義される現行メモリ位置を表し、Ａ（Ｘ）およびＢ（Ｘ）は現行メモリ位置Ｘの列アドレスおよび行アドレスを表し、Ｌ（Ｘ）は現行メモリ位置Ｘに記憶されているデータ値よりも小さいデータ値が記憶されている次メモリ位置を表し、Ａ（Ｌ（Ｘ））およびＢ（Ｌ（Ｘ））は次メモリ位置Ｌ（Ｘ）の列アドレスおよび行アドレスを表すことを特徴とする、前記方法。
【請求項５】
請求項１又は２記載の方法であって、
ステップｂ）の前記比較結果が読み出しデータ値が検索されるべき前記データ値よりも大きいと示した際に（「右分岐」）、ステップｃ１）における前記次アドレスが下記の式（２）で計算され
Ｂ（Ｒ（Ｘ））＝Ｂ（Ｘ）
Ａ（Ｒ（Ｘ））＝２＊Ａ（Ｘ）＋１                    （２）
ここでＸは現行のアドレス（Ａ（Ｘ），Ｂ（Ｘ））で定義される現行メモリ位置を表し、Ａ（Ｘ）およびＢ（Ｘ）は現行メモリ位置Ｘの列アドレスおよび行アドレスを表し、Ｒ（Ｘ）は現行メモリ位置Ｘに記憶されているデータ値よりも大きいデータ値が記憶されている次メモリ位置を表し、Ａ（Ｒ（Ｘ））およびＢ（Ｒ（Ｘ））は次メモリ位置Ｒ（Ｘ）の列アドレスおよび行アドレスを表すことを特徴とする、前記方法。
【請求項６】
請求項１又は２記載の方法であって、
ステップｂ）の前記比較結果（Ｃ）が読み出しデータ値が検索されるべき前記データ値よりも小さいと示した際に（「左リーフ」）、ステップｃ２）における前記次アドレスが下記の式（３）で計算され
Ｂ（Ｌ（Ｘ））＝２K＊Ｂ（Ｘ）＋２＊Ａ（Ｘ）＋０−２K
Ａ（Ｌ（Ｘ））＝１                                              （３）
ここでＸは現行のアドレス（Ａ（Ｘ），Ｂ（Ｘ））で定義される現行メモリ位置を表し、Ａ（Ｘ）およびＢ（Ｘ）は現行メモリ位置Ｘの列アドレスおよび行アドレスを表し、Ｌ（Ｘ）は現行メモリ位置Ｘに記憶されているデータ値よりも小さいデータ値が記憶されている次メモリ位置を表し、Ａ（Ｌ（Ｘ））およびＢ（Ｌ（Ｘ））は次メモリ位置Ｌ（Ｘ）の列アドレスおよび行アドレスを表し、２Kがメモリ装置内の列の数であることを特徴とする、前記方法。
【請求項７】
請求項１又は２記載の方法であって、
ステップｂ）の前記比較結果（Ｃ）が読み出しデータ値が検索されるべき前記データ値よりも大きいと示した際に（「右リーフ」）、ステップｃ２）における前記次アドレスが下記の式（４）で計算され
Ｂ（Ｒ（Ｘ））＝２K＊Ｂ（Ｘ）＋２＊Ａ（Ｘ）＋１−２K
Ａ（Ｒ（Ｘ））＝１                                              （４）
ここでＸは現行のアドレス（Ａ（Ｘ），Ｂ（Ｘ））で定義される現行メモリ位置を表し、Ａ（Ｘ）およびＢ（Ｘ）は現行メモリ位置Ｘの列アドレスおよび行アドレスを表し、Ｒ（Ｘ）は現行メモリ位置Ｘに記憶されているデータ値よりも大きいデータ値が記憶されている次メモリ位置を表し、Ａ（Ｒ（Ｘ））およびＢ（Ｒ（Ｘ））は次メモリ位置Ｒ（Ｘ）の列アドレスおよび行アドレスを表し、２Kがメモリ装置内の列の数であることを特徴とする、前記方法。
【請求項８】
請求項４または６の１つに記載の方法であって、
前記次アドレスに記憶されている前記データ値が現行のアドレスに記憶されているデータ値の半分であることを特徴とする、前記方法。
【請求項９】
請求項５または７の１つに記載の方法であって、
前記次アドレスに記憶されている前記データ値が現行のアドレスに記憶されているデータ値の１．５倍であることを特徴とする、前記方法。
【請求項１０】
請求項１又は２記載の方法であって、
前記ステップｄ）の後、前記一致したデータ値に関連して記憶されている情報が、前記現行のアドレスを有するメモリ位置から読み出されることを特徴とする、前記方法。
【請求項１１】
請求項１又は２記載の方法であって、
前記メモリ装置がＤＲＡＭまたはキャッシュ・メモリの１つであることを特徴とする、前記方法。
【請求項１２】
複数のデータ値（Ｄ）が列アドレスＡ（Ｘ）と行アドレスＢ（Ｘ）に対応したメモリ位置Ｘに記憶されるようにしたメモリ装置（ＤＲＡＭ）内の所定のデータ値（Ｄ）の記憶アドレス（Ａ（Ｘ），Ｂ（Ｘ））を決定するためのメモリ装置用のアクセス装置であって、
前記メモリ位置Ｘはバイナリ・ツリーデータ構造のノードに対応し、当該バイナリ・ツリーデータ構造は、バイナリ・ツリー・ルートノード（ＲＮ）からなる最高位のツリーレベルから、複数のバイナリ・ツリー・リーフノード（ＬＮ）からなる最低位のツリーレベルに至る、データ値をともなった複数のノードからなり、ツリーレベルの各上位のノードとその次に低いツリーレベルにある２つの下位のノードは、当該下位の２つのノードのうちの１つのノードが前記上位のノードのデータ値に対して小さいデータ値を有し、当該下位の２つのノードのうちの他の１つのノードが前記上位のノードのデータ値に対して大きいデータ値を有しており、さらに、
前記バイナリ・ツリーデータ構造は、１又は２以上のツリーレベル（ｋ＝１、ｋ＝２、ｋ＝３）からなる所定のサブツリー深さＫを有する複数のサブツリーとして論理的に構成され、各サブツリーは、ルートノードと、前記所定のサブツリー深さＫに対応した中間ノードと、その次の下位のサブツリーのルートノードを構成する複数のリーフノードとを有し、
ある１つのサブツリーのルートノードと当該サブツリーの中間ノードと当該サブツリーのリーフノードのデータ値が前記メモリ装置（ＤＲＡＭ）の１つの行に対応し、それぞれのサブツリーのルートノードのデータ値は第１の列位置となるように、前記メモリ装置（ＤＲＡＭ）にデータ値（Ｄ）が記憶されて、前記メモリ装置（ＤＲＡＭ）の１つの行が１つのサブツリーの２Ｋ−１個のデータ値を含み、
ａ）  前記メモリ装置の予め定められた現行の検索アドレス（Ａ（Ｘ），Ｂ（Ｘ））のデータ値（Ｄ）を読み出すための読み出し装置（Ｒ）と；
ｂ）  読み出されたデータ値（Ｄ）が検索されるべきデータ値（Ｉ）より大きいかまたは小さいかを決定するために、前記読み出されたデータ値（Ｄ）を検索されるべき前記データ値（Ｉ）とを比較するための比較装置（ＭＣ）と、
ｃ）  比較結果（Ｃ）と前記現行の検索アドレス（Ａ（Ｘ），Ｂ（Ｘ））に基づいて、データ値を検索する完全な次検索アドレス（Ａ，Ｂ）を決定するための決定装置（ＳＥＱ，ＳＭＢ，ＳＭＡ，ＲＢ，ＲＡ）とを含み、前記決定装置は、
ｃ１）前記比較装置（ＭＣ）で実施された比較の回数であって、計数器（ＣＮＴ）で計数された回数が前記所定のサブツリー深さＫに等しくない場合、データ値に対して検索されるべき次検索アドレス（Ａ’，Ｂ’）の次列アドレスＡ（Ｌ（Ｘ）），Ａ（Ｒ（Ｘ））を比較結果（Ｃ）と前記現行の列アドレスＡ（Ｘ）に基づいて計算する一方、次行アドレスＢ（Ｌ（Ｘ）），Ｂ（Ｒ（Ｘ））を現行の行アドレスＢ（Ｘ）のまま設定するよう計算するように適合された第１計算装置（Ｓ９；Ｓ１２；ＳＭＡ）と、
ｃ２）前記比較装置（ＭＣ）で実施された比較の回数であって、計数器（ＣＮＴ）で計数された回数が前記所定のサブツリー深さＫに等しい場合、データ値に対して検索されるべき次検索アドレス（Ａ’，Ｂ’）の次行アドレスＢ（Ｌ（Ｘ）），Ｂ（Ｒ（Ｘ））を比較結果（Ｃ）、前記現行の列アドレスＡ（Ｘ）、前記現行の行アドレスＢ（Ｘ）および前記レベルＫの数に基づいて計算する一方、次列アドレスＡ（Ｌ（Ｘ）），Ａ（Ｒ（Ｘ））を１に設定するよう計算するように適合された第２計算装置（Ｓ９；Ｓ１２；ＳＭＢ）とを含み、
ｄ）  前記読み出し装置、前記比較装置および前記決定装置が、前記読み出し、前記比較および前記決定を、前記読み出しデータ値（Ｄ）が検索されるべき前記データ値（Ｉ）と予め定められた許容範囲内で一致するまで再帰的に実行する、前記アクセス装置。
【請求項１３】
請求項１２記載のアクセス装置であって、
データ値（Ｄ）は値の昇順に前記列方向に記憶されている、前記アクセス装置。
【請求項１４】
請求項１２又は１３記載のアクセス装置であって、
前記決定装置は、
−  前記次列および行アドレス（Ａ’，Ｂ’）を保持するための第１および第２レジスタ（ＲＢ；ＲＡ）と、
−  検索されるべき次列および行アドレス（Ａ’，Ｂ’）を前記比較結果（Ｃ）、前記現行のアドレス（Ａ，Ｂ）および制御信号（Ｓ）に基づいて計算するための前記第１および第２計算回路（ＳＭＢ，ＳＭＡ）と、
−  バイナリ・ツリーデータ構造を通して検索中に検索状態（STATEt）を決定し、また前記比較結果（Ｃ）に基づいて前記制御信号（Ｓ）を決定するための、前記比較装置（ＭＣ）で実施された比較（Ｃ）の回数を計数する前記計数器（ＣＮＴ）を含む状態機械（ＳＥＱ）とを含むことを特徴とする、前記アクセス装置。
【請求項１５】
請求項１４記載のアクセス装置であって、
前記比較結果（Ｃ）が前記比較装置（ＭＣ）によって、以下の式（５）に基づいて計算され、
Ｉ＜Ｄ  の場合  Ｃ＝０
Ｉ＞Ｄ  の場合  Ｃ＝１                    （５）
ここでＣは比較結果を表し、Ｉは検索されるべきデータ値を表しそしてＤは読み出しデータ値を表すことを特徴とする、前記アクセス装置。
【請求項１６】
請求項１５記載のアクセス装置であって、
前記第２計算回路（ＳＭＢ）が次行アドレス（Ｂ’）を下記の式（６）に基づいて計算し、
Ｓ＝０  の時  Ｂ’＝０
Ｓ＝１  の時  Ｂ’＝Ｂ
Ｓ＝２  の時  Ｂ’＝２K＊Ｂ＋２＊Ａ＋Ｃ−２K            （６）
ここでＣは比較結果を表し、ＢおよびＢ’は現行および次の行アドレスを表し、Ｓは制御信号を表し、Ｋは前記所定のサブツリー深さ（Ｋ）を表わし、そしてＡは現行の列アドレスを表すことを特徴とする、前記アクセス装置。
【請求項１７】
請求項１５記載のアクセス装置であって、
前記第１計算回路（ＳＭＡ）が次列アドレス（Ａ’）を下記の式（７）に基づいて計算し、
Ｓ＝０  の時  Ａ’＝１
Ｓ＝１  の時  Ａ’＝２＊Ａ＋Ｃ
Ｓ＝２  の時  Ａ’＝１              （７）
ここでＣは比較結果を表し、ＡおよびＡ’は現行および次の列アドレスを表し、Ｓは制御信号を表すことを特徴とする、前記アクセス装置。
【請求項１８】
請求項１４記載のアクセス装置であって、
前記状態機械（ＳＥＱ）は制御信号（Ｓ）を以下の式（８）に基づき計算し：
ＳＴＡＴＥt＝０  の場合  Ｓ＝０
０＜ＳＴＡＴＥt＜Ｋ  の場合  Ｓ＝１
ＳＴＡＴＥt＝Ｋ  の場合  Ｓ＝２
ここで前記状態機械（ＳＥＱ）の状態決定装置（ＳＴＤＭ）は、状態機械（ＳＥＱ）の内部状態STATEkを下記の式（９）に基づき計算し、
ｔ＝０  の場合  ＳＴＡＴＥt＝０
ＳＴＡＴＥt＝０  の場合  ＳＴＡＴＥt+1＝２
ＳＴＡＴＥt＝Ｋ  の場合  ＳＴＡＴＥt+1＝１
０＜ＳＴＡＴＥt＜Ｋ  の場合  ＳＴＡＴＥt+1＝  ＳＴＡＴＥt＋１    （９）
ここでＳＴＡＴＥtおよびＳＴＡＴＥt+1は、時刻ｔおよびｔ＋１における状態を表し、ｔは計数器（ＣＮＴ）で計数された比較回数を表し、ここで０＜ｔ＜ＫおよびSTATEt=0は、第１回目の比較が前記バイナリ・ツリーデータ構造のルート・ノードに対応するメモリ位置で実行された際の状態を表すことを特徴とする、前記アクセス装置。
【請求項１９】
請求項１２又は１３記載のアクセス装置であって、
前記読み出し装置（Ｒ）が前記一致したデータ値に関連して、前記メモリ装置（ＤＲＡＭ）内に記憶されている情報を読み出すことを特徴とする、前記アクセス装置。
【請求項２０】
請求項１２又は１３記載のアクセス装置であって、
前記メモリ装置がＤＲＡＭまたはキャッシュ・メモリの１つであることを特徴とする、前記アクセス装置。
【発明の詳細な説明】
【０００１】
（技術分野）
本発明はメモリ装置内に予め定められたデータ値の記憶アドレスを決定するための方法に係り、ここで前記データ値は予め定められた記憶アドレスに、複数のノード（node）、ブランチ（branch）、サブツリー（subtree）およびリーフ（leaf）のバイナリ・ツリー・データ構造に基づいて記憶されている。特に、メモリ装置は２つの部分、すなわち列アドレス部と行アドレス部で構成されたアドレスでアドレス指定され、ここでメモリ装置へのエントリーは２次元行列配列の中に記憶されている。
【０００２】
（背景技術）
非常に多数のエントリーを含むメモリ内の特定データ値の高速検索を実行する必要がしばしば存在する。例えば、人間の個人識別番号がメモリ装置内に記憶されており、個人の年齢、職業または自動車登録に関するある種の情報に関連付けられている状況を想定する。この識別番号は多数の桁で構成されているはずである、すなわちメモリ内には多数の値が記憶されているはずである。別の例は、電話番号が記憶されており、各々の電話番号がその電話番号が属する家の住所を示す特定の情報に関連付けられているＣＤ−ＲＯＭがある。
【０００３】
その中に個別エントリーの特定位置が記憶されている、すなわちその中に記憶アドレスが記憶されている第２メモリ装置を使用しなければならないことを回避するために、複数のデータ値が含まれているメモリ装置が特定データ値に関して検索され、そのデータ値が発見されるとその関連する情報が読み出される。もちろん、そのデータ値（個人識別情報または電話番号）はメモリ装置内にランダムに記憶されている場合もあり、この場合そのデータ値の場所を探るために全メモリが列および行方向に検索されなければならなくなるはずである、何故ならばいくら何でも対象としているデータ値が何処に配置されているかが分からなければどの情報も利用できないからである。
【０００４】
メモリ装置の大きさによって不確かな時間が掛かる、１つ１つのエントリーをメモリ装置を通して検索することを避けるために、そのデータ値（そこに関連する情報では無い）はメモリ装置内に予め定められた規則に従って記憶されており、この規則は後で検索手順の間にそのデータ値を再配置する際に使用できる。
【０００５】
図５は２次元メモリの１例を示しており、ここでデータ・エントリーは行アドレス部Ａと列アドレス部Ｂ、すなわちアドレス  S=<A(x),B(x)>  を有するアドレスでアドレス指定される。Ｘはバイナリ・ツリー内のノードと見なされ、ここに特定の行アドレスおよび列アドレスが挿入される。図５に示されるように、個別のデータ値Ｄメモリ装置内にランダムに記憶されていて、通常の手順は記憶されたデータ値を表すためにバイナリ・ツリーデータ構造を使用することである。
【０００６】
図６に示されるように、バイナリ・ツリーデータ構造の中で各ノード（そこにデータ値が入力されまた読み出される交点Ｘ）が２つの別のノードに接続されている。バイナリ・ツリー（またはそこにマッピングされたエントリーを有するメモリ装置）を通る検索は以下の通りである。データ値Ｄ１がノードＸ（行アドレスA(x)および列アドレスB(X)に配置されている）から読み出され、このデータＤ１はその記憶アドレスが決定されるべきデータ値Ｄと比較される。Ｄ＜Ｄ１の場合、ツリーの左側ブランチＬが採られ、Ｄ１＜Ｄの場合、右側ブランチＲが採られる。データ構造（またはメモリ装置内のデータ値）は、論理的に、ノードＸ２がデータ値Ｄ２＜Ｄ１そしてデータ値Ｄ３＞Ｄ１を持つように構成されている。しかしながら、個別のデータ値Ｄ１，Ｄ２，Ｄ３は本来的にメモり装置内にランダムに記憶されているので、Ａ（Ｘ１），Ｂ（Ｘ１）でＤ１を読み出した後、バイナリ・ツリー検索を行うためにＤ２またはＤ３の位置またはメモリ・アドレスに関する情報が提供される必要がある。
【０００７】
従って従来からの１つの解決方法は、各々のデータ値Ｄ１，Ｄ２，Ｄ３が２つのポインタに関連づけられている（記憶されている）、すなわち読み出されたデータ値よりも大きい（Ｒ）または小さい（Ｌ）データ値の位置を示すアドレスを含む更に２つの別のメモリ位置に関連づけられている。論理的にはバイナリ・ツリー構造が使用されているが、ここで各々の更に次のサブレベルは記憶されているデータ値がそれぞれ、メモリ装置内の先のサブレベル（サブツリー）の中のものよりより大きいかまたはより小さいはずであり、それ自身図５に示されるように基本的にデータ値はメモリ装置内にランダムに記憶されているが、アドレスポインタを使用する論理マッピングはただ１つのみ存在する。
【０００８】
異なるアドレス・ポインタを具備したデータ・エントリーを使用すると、そこからデータ値が読み出され検索されるべきデータ値と比較される第１番目のノードである予め定義されたルート・ノードＲＮが必要となる。この様な検索アルゴリズムが「データ構造並びにアルゴリズム（Data Strutures and Algorithm）」、アホ  ホップクロフト、ウルマン（Aho Hopcroft Ullamnn）著；ISDN0-201-00023-7、ページ155ffに記述されている。明らかに欠点が存在し、非常に多種類のデータ値を記憶するためのメモリ空間が必要であり、各々のそして全てのデータ値に対して更に２つのポインタ・エントリがブランチＬ，Ｒを示すために必要となる。
Ｄ１：バイカス  オー（Vikes O）その他著：「高速シーケンシャル・アクセスによるダイナミック・メモリ内検索（Searching in a dynamic memory with fast sequential access）」、Communications of the Association for Computing machinery,第２５巻、第７号、１９８２年７月１日、ページ４７９−４８４、XP000719506，は高速シーケンシャル・アクセスによるダイナミック・メモリ内の検索処理手順を記述している。いわゆるアホ・ウルマン（Aho-Ullman）メモリの様な、多数のメモリ位置で構成されている特殊型式メモリは 、シャッフルおよびマイナス・ワンと呼ばれる２つのメモリ変換と一緒に使用される。シャッフル変換は記憶位置のデータを、アドレスのバイナリ表現を１ビット左に循環シフトさせる演算子で変形される記憶位置に移動させる。マイナス・ワン変換は記憶位置内のデータを１の補数にｍビット整数を加算することで表される演算子で、別の記憶位置に移動される。検索アルゴリズムは、第１アルゴリズム１：アホ・ウルマン・ランダムアクセスアルゴリズムと第２アルゴリズム：アホ・ウルマン・メモリ内のバイナリ検索用アルゴリズムで構成されている。アルゴリズム２の中で、再びシャッフルおよびマイナス・ワン変換が、新たな位置（記憶位置）を旧記憶位置の変換に基づいて決定するために使用される。従って、行および列アドレスを区別して考慮する事はなく、データの新たな位置アドレスは常に旧論理アドレスをシャッフルする事に基づいて常に決定される。
【０００９】
図５にはメモリ装置内の論理バイナリ・ツリーの潜在的な表現のみが存在するが、別の解決策ではバイナリ・ツリーデータ構造をメモリ装置内の固定アドレス、すなわち行列配列の要素にマッピングが使用されている。この場合、分岐アドレスがバイナリ・ツリーノードのメモリ装置内の予め定められた位置にマッピングすることを通して事前に知られており、従ってここではポインタは必要ではなく、メモリ空間も占有しない。ポインタが評価される必要が無いので、検索時間はより早くなるはずである、これは「データ構造並びにアルゴリズム」、アホ  ホップクロフト、ウルマン著；ISDN0-201-00023-7、ページ２７１ ffに開示されている通りである。その様な個別ノードＸ１，Ｘ２，Ｘ３のメモリ装置内の特定位置への明示的マッピングを使用して、１つのサブツリー（！）内のそれぞれの「子供」ノードＸ２，Ｘ３のアドレスが計算できる。実際、左および右ブランチを列アドレスＡで表現すると、左ブランチは次のように計算される
【００１０】
Ａ（Ｌ（Ｘ））＝２Ａ（Ｘ）＋０一方右ブランチＲは次のように計算される
【００１１】
Ａ（Ｒ（Ｘ））＝２Ａ（Ｘ）＋１
【００１２】
しかしながらその様なマッピング手段を使用すると、ツリーを最初にトラバースし始めた直後、アドレスの最上位部分がトラバースの全ての後続のステップの中で変化する。従って、ダイナミック随意アクセスメモリ装置の中に記憶されなければならない大きなツリーに対して、それらが大きいために検索時間は未だかなり長くなる。実際の応用に対してより高速な方法が必要とされ、特にアドレスの最上位部分の変化を出来るだけ回避することが必要とされる。
【００１３】
（発明の要約）
先に説明したように、従来型の方法は記憶集中ポインタ技法を使用するかまたはサブツリー内の左ブランチまたは右ブランチに接続されている次ノードのアドレスを決定するために列アドレスＡの計算を使用するかのいずれかである。これは時間が掛かり、アドレス（行アドレスＢ）の最上位部分がバイナリ・ツリーをトラバースする後段のステップ毎に変化する事を必要とする。
【００１４】
従って、本発明の目的はメモリ装置内の予め定められたデータ値の記憶アドレスを決定するための方法並びにアクセス装置を提供することであり、これはバイナリ・ツリー検索中に記憶場所を決定するためにポインタの使用を必要とせず、記憶アドレスの１部がポインタを使用する代わりに計算される先に説明した方法よりも記憶アドレスをより早く決定できるものである。
【００１５】
この目的は添付の独立形の方法の請求項に記載の方法で解決される。更に、この目的は添付の独立形のアクセス装置の請求項記載のアクセス装置で解決される。
【００１６】
本質的に、本発明によればアドレスの最上位部分における頻繁な変化を行う必要が無く、アドレスの列部のみならずアドレスの行部も比較結果と現在のアドレスに基づいて決定されるアルゴリズムが提供されている。本発明において、マッピングの列アドレス部は従来技術に記述されているマッピングに対応し、一方マッピングの行部および２つの部分からのアドレスの重要な組み合わせは、メモリ内のデータ値の場所が見つかるまでの検索時間を減少させることを可能とする。
【００１７】
本発明によれば、サブツリーのリーフに検索中に到達すると、別のサブツリーの新たなルート・ノードが決定される。このサブツリーの中にデータ値が未だ見つからない場合、検索手順は先のサブツリー内の次のリーフに行き、別のサブツリーの新たなノードを決定する。従って先のサブツリーの複数のリーフが、新たなサブツリーを決定するために順番に使用される。検索は常にツリーの天辺から底部へのトラバースを意味するから、検索は結果としてサブツリーの中へのトラバースとなる。ステップの最少数が結果としてサブツリーの変化となる。マッピングの結果として、サブツリー内部のトラバース中に列アドレスのみを変化させる。それ故、結果として行アドレスを変化させるステップの数が最小化される、すなわち行アドレス内の変化は最少に保たれる。従って、検索に掛かる時間は著しく削減される。
【００１８】
本発明の更に別の好適な実施例および改善点は添付の特許請求項から得られるであろう。これ以降、本発明をその実施例を添付図を参照して説明する。
【００１９】
図の中で同一または類似の参照番号は同一または類似の部品を指示する。
【００２０】
（発明の原理）
本発明の方法ならびにアクセス装置はバイナリ・ツリー内のノードをメモリ装置、好適にダイナミックランダム・アクセス・メモリ（ＤＲＡＭ）のアドレスにマッピングすることに基づいている。ＤＲＡＭは通常、非常に密度の高い記憶装置を提供するが、これらはランダムに分散されているアクセスに関して比較的遅い。本発明に基づく特定のアドレス指定モードを使用すれば、更に短いアクセス時間が実現出来る。これに対して、ある種の制約が連続的なアクセスの順序のアドレスに適合しなければならない。本発明に基づくマッピングはツリーの検索が常に結果として、それらの制約に適合するアクセス順序となることを保証する。到達可能な性能（時間の減少）は約１０倍まで増加する。
【００２１】
ＤＲＡＭのアドレス・ビットは、先に説明されたように一般的に、行アドレスＢと列アドレスＡ（図５参照）と呼ばれる２つの部分に分割される。通常、行および列アドレスの大きさは等しい。ＤＲＡＭの内部的実行形態のため、連続したアクセスを行アドレスが出来るだけ変化しないように保ちながら列アドレスのみを変化させるようにして実施できる場合、アクセス時間は著しく短くなる。それ故、本発明に基づくマッピングを行うための新奇な方法並びにアクセス装置は、行アドレスを出来るだけ変化させずに保つという基準に整合するツリー検索アルゴリズムを可能とする。
【００２２】
（本発明に基づくノード・マッピング）
図１ａは本発明に基づくバイナリ・ツリーの複数のサブツリーへの分割を示している。完全なツリーは複数のサブツリー１，２，３，４，５を含む。図１ａの中で、各々のサブツリーはルート・ノードを有し、それは「ｋ＝１」で示されている。同様に、サブツリーの各々のリーフ・ノードは「ｋ＝Ｋ」で示されている。Ｋはサブツリーの「深さ」、すなわち複数の別のノードが存在し、それらは各々のサブツリー内で点線のみで描画されている。従って実際のところ、図１ａに描画されている各々のサブツリーはＫレベルを含み、これは全てのサブツリー当たり２Kに相当する。
【００２３】
一度ルート・ノードがその列−および行アドレス経由でアクセスされると、検索がレベルＫの番号を有するサブツリーの中でそれぞれ実行される。各々のサブツリーは（最低）リーフ・ノードを有し、これは次のサブツリーのそれぞれのルート・ノードに接続されている。注意されたいのは図１ａの中で、サブツリーのルート・ノードまたはリーフ・ノードのいずれかのノードのみが完全に描かれている。例えば、サブツリー１のリーフ・ノードＬＮはサブツリー３のルート・ノードＸ１に直接接続されている。ルート・ノードＸ１とそのリーフ・ノードＸ２，Ｘ３の間には多数の中間ノードが存在する。ルート・ノードはｋ＝１に配置されており、リーフ・ノードはｋ＝Ｋに配置されている。サブツリー５のリーフ・ノードＬＮはまた同時に全バイナリ・ツリーのリーフ・ノードを構成している。従って、全ツリーのルートとリーフと、サブツリーのルートとリーフの間の区別をすることが重要である。各サブツリーの中で、変数ｋはサブツリーの各トラバース毎に１からＫへステップ的に変化し、検索されている値が見つかるか全ツリーのリーフ・ノードに到達するまで繰り返される。
【００２４】
１つのサブツリー内のリーフの数は、実際のメモリ・ハードウェアに依存する。本発明によれば、メモリ位置へのマッピングは１つの行が２K−１個のエントリー、すなわち列を含むように実施される。以下に示されるように、各サブツリー内での本発明に基づく検索は１つの個別行内での検索に相当する。行に沿った（例えばサブツリー１に沿った）メモリ位置は、ルート・ノード、サブツリー・ノードおよび特定のサブツリーのリーフ・ノードＬＮに対応する。各読み取りデータ値Ｄ１，Ｄ２，Ｄ３は場所を探されるデータ値Ｄと比較され、サブツリー内で左または右ブランチの何れを採るべきかの判断が行われる。
【００２５】
データの構造は下記の通りである：サブツリー内のノードのレベルｋ（ｋ＝１，２，．．．，Ｋ）が深くなればなるほど、データ値はより高くなる。これはデータを昇順に列に沿って並べることと等価である。すなわち、特定のデータ値Ｄが何処に配置されているかが分からなくても、Ｄ１＜Ｄ２＜Ｄ３等々は知られていなければならない。これは、エントリーがツリーの左から右へ値が昇順となるように並べられた完全にバランスしているバイナリ・ツリーのノードに格納されていることを意味している（従って、またサブツリーの中では図１ａ，１ｂ内の値Ｄ１，Ｄ２，Ｄ３で示されるようにである）。
【００２６】
もちろん個別のデータ値をバイナリ・ツリーの中で左から右に昇順に記憶すること（メモリ内の列方向に昇順に）は各々のツリー内で使用される検索アルゴリズムに影響を持つ。先に説明されたように、主たる目的は出来る限り行の変化を少なくすることである、すなわちアドレスS=<A,B>の最上位部の変化が出来る限り頻繁には生じないようにすることであり、それは列方向の検索のみが非常に高速だからである。データ値を列方向に昇順に記憶することは、結果として列方向の最終エントリーが各サブツリーのリーフ・ノードＬＮを構成しなければならないこととなる。いくつのリーフ・ノードＬＮ（図１ｂ内のリーフ・ノード記憶位置ＬＮ）が指定されるかは、サブツリー内のレベルの数に依存する、すなわち列方向のメモリの大きさに依存する。例えば、レベルＫ＝３を有するサブツリーは４つのリーフ・ノードＬＮを列方向で４カ所の右端に含む（図３ａ，３ｂの例を参照）。
【００２７】
（第１実施例（検索方策））
先に概要を示したように、本発明はバイナリ・ツリーを２次元メモリ空間の中に、各々の行がサブツリーに対応するようにマッピングし、特定の検索方策が各行またはサブツリー内で使用できるようにすることを提供している。この検索は各サブツリー内で、読み取り値と検索されているデータ値との間で一致するかリーフ・ノードＬＮが見つかると中断する。従って検索を各サブツリー内で実行する際、検索アルゴリズムはどのレベルに居るかをたえず追跡しなければならないが、それは行アドレスの変化はリーフ・ノードに達した時にのみ実行されるからである。本発明の中で、検索アドレスが各サブツリー内で計算出来ることが分かるだけではなく、次サブツリーの特定の新たなルート・ノードアドレスが比較結果とリーフ・ノードの現在アドレスからのみ計算出来ることも分かる。すなわち、本発明に基づけば、次のデータ値が読み出されるべきノードの記憶アドレスを指定する新たな完全なアドレスＳ＝＜Ａ，Ｂ＞は、現在読み出されるメモリ位置の現在アドレスから、比較結果に基づいて計算される。これはサブツリー内の次ノードのアドレスに適用し、また検索が継続されるべき次サブツリーの次ルート・ノードの記憶アドレスを探すためにも有効である。
【００２８】
図２は本発明に基づく検索方法の実施例に基づく流れ図を示す。このアルゴリズムに関して、完全なバイナリ・ツリーが図１ｂに基づくサブツリーに分割され、ルートサブツリーの下のレベルの左端のサブツリーは切り離される。
【００２９】
説明されたように、サブツリー内のレベルの数は実際のＤＲＡＭハードウェアの列アドレス内のビット数に等しい。従って、ステップＳ１で検索方法を開始した後、第１サブツリー１のレベルがｋ＝１にセットされる、すなわちこの検索はサブツリー１のルート・ノードＲＮから開始される（図１ａ参照）。次に、ステップＳ３で、検索されるべきデータ値Ｉ、サブツリーＫ毎のレベル数、同様にルート・ノードＲＮの位置またはルート・アドレスA(0),B(0)が入力されなければならない。従って第１サブツリー１のルート・ノードＲＮが検索アルゴリズムの導入点である。
【００３０】
ステップＳ４で、現在アドレス<A(0),B(0)>のデータ値Ｄがサブツリー１のルート・ノードＲＮから読みとられる。ステップＳ５で読みとられたデータ値Ｄが場所を求めているデータ値Ｉと比較される。ステップＳ５でＤ＝Ｉの一致が確立されると、見つけられたデータ値Ｄに関連する情報がステップＳ７で読みとられ、その後ステップＳ１１で検索は終了する。
【００３１】
ステップＳ５で読み取りデータ値Ｄが検索されるべきデータ値Ｉより大きい場合、ステップＳ６はリーフ・ノードＬＮに到達したか否かの判断が行われる。これはレベルＫの与えられた番号と実行番号ｋを比較して決定される。ステップＳ６で、ｋ＜Ｋが確立されるとステップＳ９，Ｓ１４が実行される。ステップＳ９の中で以下の式を用いて、サブツリー１内の左側ブランチ（Ｉ＜Ｄ）に沿ったノードの新たなアドレスが計算される：
【００３２】
Ｂ（Ｌ（Ｘ））＝Ｂ（Ｘ）
Ａ（Ｌ（Ｘ））＝２＊Ａ（Ｘ）＋０            （１）
【００３３】
ここで、B(L(X))およびA(L(X))はサブツリー１内の次サブ・ノードの新たな行アドレスおよび列アドレスを表す。従って、深さレベルｋの実行番号はステップＳ１４で増加更新される。
【００３４】
同様に、ステップＳ５でＩ＜Ｄと判定されると、ルート・ノードＲＮから右ブランチが採られ、ステップＳ８でサブツリーの最深部に未だ達していないと判断される場合、すなわちｋ＜Ｋの場合、ステップＳ１２，Ｓ１６がステップＳ９，Ｓ１４と同様に実行され、ここで式（２）は以下のようにサブツリー１内の次エントリーまたはサブ・ノードの記憶アドレスを定義する：
【００３５】
Ｂ（Ｒ（Ｘ））＝Ｂ（Ｘ）
Ａ（Ｒ（Ｘ））＝２＊Ａ（Ｘ）＋１            （２）
【００３６】
ステップＳ５，ステップＳ６，Ｓ８およびステップＳ９，Ｓ１２から分かるように、サブツリー内で列アドレス部Ａのみが修正される、すなわち左ブランチに対しては２倍され、または右ブランチに対しては２倍されて列を右側に更に１つ移動される。重要なことは行アドレス部ＢはステップＳ５での判断に関係なく同じに留まっていることである。もちろん、式（１），（２）で与えられる定義は列方向に沿ったデータ値が昇順であることの直接の結果である。読み取りデータ値が大きい場合、列アドレスの２倍にジャンプされ、読み取りデータ値が検索されるＩよりも小さい場合、これは現在の列アドレスを２倍して１が加算される。
【００３７】
もちろん、ステップＳ９，Ｓ１２はｋ＜Ｋ（Ｋ＝最大深さまたは１つのサブツリー内のレベル数；Ｋは予め定められている）に対してのみ実施されるので、新たなデー値ＤはステップＳ４で、ステップＳ９，Ｓ１４内で決定される新たなアドレスＡ，Ｂで読みとられる。参照番号Ｒはそれぞれ個別のステップＳ４，Ｓ５，Ｓ６，Ｓ９，Ｓ１４およびＳ４，Ｓ５，Ｓ８，Ｓ１２，Ｓ１６を通るこの再帰的実行を示す。再帰的処理の間、サブツリーの中で、データ値が見つかると（Ｉ＝Ｄ）アルゴリズムはステップＳ１１で終了する。
【００３８】
しかしながら、ｋ回繰り返した後、ステップＳ６，またはＳ８は割り当てられたサブツリーの最深部に達したか否かを決定する、すなわちｋ＝Ｋ、これはリーフ・ノード記憶位置ＬＮに達したことを意味する。データ値が列方向に昇順であること、すなわち各行内でデータ値が列方向に増加すること、ここでは常に次行内の列位置１のデータ値は、次のより小さい行内の最も高い列位置２Ｋのデータ値よりも大きい、を使用することによりリーフ・ノードＬＮは図１ｂ内のメモリ装置のアドレス空間の中で、列アドレスＡの最も右端の最終メモリ位置に対応しなければならないことが明らかである。
【００３９】
サブツリー１内のリーフ・ノードＬＮに達すると、下記の式（３），（４）がステップＳ１０，Ｓ１３で採用され、それぞれ以降のサブツリーのルート・ノードの新たな行アドレスおよび列アドレスを計算する：
【００４０】
Ｂ（Ｌ（Ｘ））  ＝  ２K＊Ｂ（Ｘ）  ＋  ２＊Ａ（Ｘ）  ＋  ０  −  ２K
Ａ（Ｌ（Ｘ））  ＝  １                                            （３）
【００４１】
Ｂ（Ｒ（Ｘ））  ＝  ２K＊Ｂ（Ｘ）  ＋  ２＊Ａ（Ｘ）  ＋  １  −  ２K
Ａ（Ｒ（Ｘ））  ＝  １                                            （４）
【００４２】
式（３）、（４）から、リーフ・ノードが発生する場合、列アドレスＡは−ステップＳ５での決定とは無関係に−第１列、すなわちA(L(X))=A(R(X))=1にセットされることが分かる。しかしながらステップＳ５での決定に依存して、新たな行アドレスＢは選択される。
【００４３】
リーフ・ノードＬＮからの矢印が式（３）、（４）に基づく計算を示している図１ｂから、実際に次サブツリーの次のルート・ノードが列Ａ＝１に配置されているが、誰もが予想するように次の隣接したサブツリー２の上に配置されては居ないことを注意することは興味深い。これに対し、式（３）、（４）は一種の列／行マッピングを実行し、ここで検索されるべき次サブツリーの次ルート・ノードの新たなアドレスは、式（４）に対しては置換されたリーフ・ノードアドレスが対応し、式（３）に対しては置換されたアドレス−１が対応している。
【００４４】
検索されるべき次サブツリーの次ルート・ノードをステップＳ１３で決定すると、ｋはステップＳ１７の中でｋ＝１にリセットされるが、これは明らかに次サブツリー内での検索はレベル１、すなわちルート・ノードアドレスで開始されるからである。次に再びステップＳ４で、次データ値Ｄが読み出され、ステップＳ５，Ｓ６，Ｓ９，Ｓ１４またはステップＳ５，Ｓ８，Ｓ１２，Ｓ１６がそれぞれＤとＩの一致が見つかるかまたは新たなサブツリーのリーフ・ノードが再び見つかるまで実行される。
【００４５】
もちろん、図１ｂ内のサブツリー４またはサブツリー５の中でさえもデータ値が発見されず、その結果リーフ・ノードＬＮに達する場合もあるであろう。例えば、サブツリー５の中でリーフ・ノードＬＮに達する場合、もしも行と列の数が等しいと、式（３）も式（４）もどちらもアドレス空間に含まれるアドレスに結果として達することは出来ない。行の番号が列の番号より大きい場合は、もちろん新たなサブツリーの更に新たな計算を実行することが可能である。しかしながら、例えばサブツリー４の中でリーフ・ノードに達した場合は、更に次のサブツリー・ルート・ノードを決定することが出来ないという問題は残る。第１に、これはサブツリー４を通してバイナリ・サーチの中でデータ値が見つからなかったことを示し、そして第２に検索されるべきデータ値ＩがＬＮの記憶アドレス以下の行および列アドレス内に記憶されている全てのデータ値Ｄよりも明らかに大きいかまたは小さくなければならない。この場合、アルゴリズムはそこからサブツリー４のルート・ノードが計算されたサブツリー１内のリーフ・ノードＬＮの記憶アドレスに追尾して戻る（図１ｂに点線で示されている）。次にサブツリー１内の右の次リーフ・ノードＬＮが新たなサブツリー・ルート・ノードを計算するための基礎として使用される。すなわち、列アドレスＡは１列だけＡ＋１に増やされ、一方Ｂはそのまま一定に保たれる。もちろん、これは新たなルート・ノード、例えばサブツリー５の計算に導く。
【００４６】
注意されたいのは、リーフ・ノードＬＮに戻った後（点線で示すようにリーフ・ノードＬＮの再計算を通して）左側のリーフ・ノード（１つ存在して居る場合）に行く必要は実際に無いと言うことであり、それはサブツリー１内のリーフ・ノードへ戻ると言うことは自動的に、全ての読み出しデータ値Ｄが検索されるべきデータ値Ｉよりも小さかったことを意味するからである。従って、列方向で（サブツリーの水平方向）、全てのリーフ・ノードは新たなサブツリーのルート・ノードを決定するために昇順とされている。例えばサブツリー５の最終リーフ・ノードＬＮに達する場合、データ値Ｉは指定されたアドレス空間の範囲でメモり装置内には含まれていない。
【００４７】
注意されたいのは、好適にステップＳ５の中である種の許容範囲が許されていて、例えばＤとＩとの一致は或る程度の許容値内で成立するようにしているということであり、すなわち｜Ｄ−Ｉ｜＜△Ｄの場合一致が見られるということであり、此処で△Ｄは予め指定された許容範囲を示している。
【００４８】
（Ｋ＝３の例）
図３ａ，３ｂは特定の例に関する図１ａ，１ｂ，２内の一般的アルゴリズムを図示し、此処では列アドレスＡおよび行アドレスＢに対してバイナリ表記が使用されている。Ｋ＝３は８列および８行が原理的にメモりアドレス空間内に具備されていることを意味する。式（１）、（２）はバイナリ・ツリーの頂上の一番最初のルート・ノードＲＮがアドレスA(0),B(0)=(000,000)を持つ場合変化を与えないので、列アドレスA=000は使用されない。従って、図２のステップＳ４が最初に実行される時に対照される第１ノードは、常に図３ａ内の一番上左端のメモリ位置、すなわち第１サブツリーの一番上の第１ルート・ノードに対して、B(0)=0|A(0)=1である。
【００４９】
行および列のアドレス番号に対してバイナリ表現を使用すると、図３ｂはアドレス000,001を具備した最初の２行の中に配置されているサブツリー１およびサブツリー２を示す。左側ブランチＬに対して２を掛け算することは、単に列アドレス部Ａを左にシフトすることを意味する。その列アドレス部Ａ内の結果右側ブランチＲは左にシフトされて「１」が加えられる。従って、個別アドレスおよびｋ＝２での中間ノード、およびｋ＝３でのリーフ・ノードは特定のデータ値Ｄが配置されている特定の行及び列に対応する。図３ｂはデータ値Ｄ＝３，５，６，７．．．をそれぞれの中間ノードおよびリーフ・ノード部に示している。明らかに図２のアルゴリズムは、４つのノード、0,100または0,101または0,110または0,111のいずれか１つに達すると常に、次サブツリーの新たなルート・ノードアドレスを計算する。新たなルート・ノードを計算するために許されていないブランチが唯１つ存在し、それはアドレス0,100の場合に読み出しデータ値Ｄ＝７が検索されるべきデータ値Ｉよりも大きい状況である。この場合実際にアドレス0,100から左ブランチが採られる、すなわち式（３）が採用されなければならない。しかしながら、この場合左側ブランチに対する式（３）は、B(L(X))=2K(000)+2(100)-2K=0000+1000-1000=0000を算出する。従って、第１左ブランチは図１ａで「切断」、または000,100と000,001の間の点線は採用されるべきではなく、それは検索がルート・ノードアドレスから再び開始されることになるからである。
【００５０】
しかしながら、右側ブランチを採る場合、B(R(X))=001、これはアドレス0,100を具備した一番左側のリーフ・ノードＬＮが結果として001,001の次リーフ・ノードルートアドレスとなることを意味している。図３ｂに示されているように、これは実際の所第２行に配置されているサブツリー２のルート・ノードに対応する。図３ａから分かるように、サブツリー１の各々のリーフ・ノードは特定行アドレスにおける位置Ａ＝１に配置されている新たなサブツリーの新たなルート・ノードに「マッピング」または「変換」することが出来る。行の数が少なくとも列の大きさと同じ大きさの場合、サブツリー１の各リーフ・ノードＬＮが第１列内の新たなルート・ノードアドレスの中に「写像」または「置き換え」出来ることが保証される。
【００５１】
これもまた図３ａ，３ｂから分かるように、列方向に昇順にデータ値が並んでいる場合、式（１）−（４）で記述されている検索アルゴリズムは行アドレス変化の最少番号が採用されることを保証し、一方検索されるべきデータ値Ｉとの一致（許容範囲内で）を見つけるために、全メモリ行列が検索される。
【００５２】
好適に列アドレス部Ａと行アドレス部Ｂのバイナリ表現を使用することにより検索が容易になるが、それは２を乗算することが単にアドレスをシフトレジスタ内で左にシフトすることを意味するからである。
【００５３】
実際、図３ａまた一般式（３），（４）から容易に分かるように、新たな行アドレスＢ（Ａからの左側ブランチに対するもの）はリーフ・ノードの列アドレス部Ａの反転、すなわちＢ（Ｌ（Ｘ））＝０１０＝１０１の否定を意味する。同様にリーフ・ノードの右側ブランチに対して、新たなルート・ノードの新たなアドレス部はリーフ・ノード列アドレスの反転＋１、すなわちＢ（Ｒ（Ｘ））＝１０１の否定＋１＝０１１となる。これはもちろん暗黙の内にバイナリ・ツリーの頂上の第１ルート・ノードＲＮがB(0)=0,A(0)=1に割り当てられていることを仮定している。
【００５４】
これ以降、図１−３で説明されたこの様な検索方法を用いた本発明の基づくアクセス装置の実施例をハードウェアで実現することを、図４を参照して説明する。
【００５５】
（第２の実施例（ハードウェアでの実現））
図４でＤＲＡＭはメモリ装置と読み出しデータ値Ｄと、検索されるべき前記データ値Ｉとを比較して前記読み出しデータ値Ｄが検索されるべき前記データ値Ｉよりも大きいかまたは小さいかを決定するための比較装置ＭＣを含むアクセス装置とを示す。ＤとＥとの間の一致が比較装置で見つかると、一致信号Ｍが出力される。比較結果Ｃは値Ｄが値Ｉよりも大きいかまたは小さいかを示している。読み出し装置Ｒ（詳細は図示せず）は予め定められた現行検索アドレスＡ，Ｂのデータ値を読み出し、これらのアドレスはツリーをトラバースする間、中間行および列アドレスを保持している２つのレジスタＲＡ，ＲＢから入力される。
【００５６】
アクセス装置は更に、判定装置ＳＥＱ，ＳＭＢ，ＳＭＡを含み、これらは比較結果Ｃおよび前記現行の検索アドレスＡ，Ｂに基づき、データ値を次に検索すべき全検索アドレスを決定するためのレジスタＲＢ，ＲＡを含む。
【００５７】
決定装置は前記第１および第２レジスタと、検索されるべき次列および行アドレスＡ’，Ｂ’を比較結果Ｃ、現行のアドレスＡ，Ｂに基づいて計算するための、第１および第２計算回路ＳＭＢ，ＳＭＡおよび状態機械ＳＥＱから出力される制御信号Ｓを含む。
【００５８】
状態機械ＳＥＱはバイナリ・ツリーデータ構造を検索する間の検索状態を決定し（実際これはＫを監視し、従って暗黙の内に図２内のステップＳ６，Ｓ８を実行する）、比較結果に基づいて制御信号Ｓを決定する。本質的に、状態機械ＳＥＱは計数器と状態決定装置ＳＴＤＭを含み、内部STATEtに基づき制御信号Ｓを生成する。本質的に、状態機械の内部状態は現行レベル番号ｋに対応し、これは新たな比較結果Ｃ（Ｄ＜Ｉであるか否かを示す）が比較装置ＭＣから出力される毎に更新される。すなわち、サブツリーのルート・ノードに対して状態は０であり、非リーフ・ノード（ルート・ノードを除く）に対しては１からＫ−１，そしてリーフ・ノードに対してはＫである。同様に制御信号Ｓはルート・ノードに対しては０、非リーフ・ノード（サブノード）に対しては１そしてリーフ・ノードに対しては２である。状態０でルート・ノードから開始すると、状態機械ＳＥＱはツリーを頂上から下にトラバースする際に、サブツリーの区分けに従って進むはずである。信号Ｓはマッピングに基づいてＳＭＢおよびＳＭＡ内のアドレス計算の型式を選択する。
【００５９】
特に、アクセス装置の個別の項目は以下の機能を実行する。第１計算回路ＳＭＢは下記の機能（関数表現で与えられている）を実行し、此処でＫはサブツリー内のレベル番号である。
【００６０】
Ｓ＝０  の場合  Ｂ’＝０
Ｓ＝１  の場合  Ｂ’＝Ｂ
Ｓ＝２  の場合  Ｂ’＝２K＊Ｂ＋２＊Ａ＋Ｃ−２K                    （６）
【００６１】
ここでＣ（Ｄ＞Ｉの時０，Ｄ＜Ｉの時１）は比較結果を表し、ＢおよびＢ’は現行および次の行アドレスを表し、Ｓは制御信号を表し、Ｋはサブツリー内のレベルの前記予め定められた番号を表し、そしてＡは現行の列アドレスを表す。
【００６２】
第２計算回路ＳＭＡは下記の機能（関数表現で与えられている）を実行する：
【００６３】
Ｓ＝０  の場合  Ａ’＝１
Ｓ＝１  の場合  Ａ’＝２＊Ａ＋Ｃ
Ｓ＝２  の場合  Ａ’＝１                                          （７）
【００６４】
ここでＣは比較結果を表し、ＡおよびＡ’は現行および次の列アドレスを表し、そしてＳは制御信号を表す。
【００６５】
状態機械ＳＥＱは以下の式（８）および（９）に基づき制御信号を計算する。
【００６６】
ＳＴＡＴＥt＝０  の場合  Ｓ＝０
ＳＴＡＴＥt＝ｋ  の場合  Ｓ＝１
０＜ＳＴＡＴＥt＜Ｋ  の場合  Ｓ＝２                              （８）
【００６７】
ここで前記状態機械（ＳＥＱ）の状態決定装置（ＳＴＤＭ）は、下記の式（９）に基づき状態機械（ＳＥＱ）は内部状態STATEk（すなわち図２の値ｋ）を計算する：
【００６８】
ｔ＝０  の場合  ＳＴＡＴＥt＝０
ＳＴＡＴＥt＝０  の場合  ＳＴＡＴＥt+1＝２
ＳＴＡＴＥt＝Ｋ  の場合  ＳＴＡＴＥt+1＝１
０＜ＳＴＡＴＥt＜Ｋ  の場合  ＳＴＡＴＥt+1＝ＳＴＡＴＥt＋１        （９）
【００６９】
ここでSTATEtおよびSTATEt+1は、時刻ｔおよびｔ＋１における状態を表し、ｔは比較結果から計数された比較数を表し、ここで０＜ｔ＜ＫおよびSTATEt=0は、第１比較がバイナリ・ツリーデータ構造のルート・ノードＲＮに対応するメモリ位置で実行された際の状態を表す。
【００７０】
既に図１ｂ，３ａの点線から明らかなように、また図４のアクセス装置はそれぞれ、そこからルート・ノードサブツリーアドレスが計算されたリーフ・ノードアドレスを記憶する。次サブツリー検索の結果一致しなかった場合、すなわち次サブツリーのリーフ・ノードに到達した場合（そして新たなサブツリー・ノードの再計算の結果行アドレスＢがメモリＤＲＡＭの行アドレス空間を超えた場合）、前回サブツリーの次に高いまたは低いリーフ・ノードアドレスが新たなサブツリールート・ノードを計算するための基礎として採用される。従って、図４に示されるアクセス装置はまた、全メモリの全検索を実行できる。
【００７１】
図４において、リーフ・ノード監視装置ＬＮ−ＭＯＮは、そこから次サブツリーが計算されたリーフ・ノードの最終アドレスを記憶している。すなわち、Ｓ＝２の場合（サブツリーの全検索が行われたことを示す）新たなルート・ノードが現行の列アドレスＡと行アドレスＢから式（３），（４）に基づいて計算される。サブツリーを通して次回の繰り返しの後、再びリーフ・ノードＬＮが見つかり、このリーフ・ノードアドレスからの新たなルート・ノードで新たに行われた計算の結果、メモリのメモリ・アドレス空間内に含まれていない行アドレスが得られると、リーフ・ノード監視装置ＬＮ−ＭＯＮは前回サブツリーから最終リーフ・ノードアドレスを入力し、列アドレス部Ａに値１を加算したり、またはそこから値１を引き算する。「左」（−１）リーフ・ノードアドレスに基づいて計算されたルート・ノードアドレスが結果としてデータ項目を見つけられない場合、次のステップで旧リーフ・ノード（＋１）の右のリーフ・ノードが次ルート・ノードアドレスを計算するための基礎として採用される。それぞれ前回サブツリーのリーフ・ノードアドレスに基づくルート・ノードアドレスを有する全てのサブツリーが結果としてメモり内に配置されているデータ値に到達しない場合、最終的にデータ値Ｉはメモリ内に現在存在していないと結論付けられる。
【００７２】
説明されたように、これらの環境下で、現在考慮しているリーフ・ノードの左側および右側の次リーフ・ノードのみが次ルート・ノードアドレスを計算するための基礎として採られれば十分であると思われる。例えば、図３ａにおいて、前回サブツリー・ノードアドレス000,110に基づく２つのルート・ノード100,001が共に、それらに関連するサブツリーを通して検索した結果一致に至らなかった場合、左下リーフ・ノード000,101と次に高いリーフ・ノード000,111のみが次サブツリーの新たなルート・ノードアドレスを計算するための基礎として採られれば十分と思われる。リーフ・ノードアドレス000,100に戻る理由は無く、それはサブツリー１内でリーフ・ノード000,101に達するといつも、位置を探す対象のデータ値Ｉがリーフ・ノードアドレス000,100に配置されているデータ値Ｄ＝７よりも大きいことが確立されているからである。従って、３つのリーフ・ノードを順に使用することにより、データ値Ｉに対して全メモリ配列の検索が終了する。
【００７３】
（産業上の利用性）
先に概要を示したように、本発明に基づく方法並びにアクセス装置は、サブツリー内の変化が引き起こされる前に最少ステップ数のみを使用する。次の通りマッピングから、サブツリー内部でのトラバース中に列アドレスのみが変化する。ダイナミック随意アクセスメモリが使用されなければならない場合、データの量が多いので、本発明はバイナリ・ツリーデータ構造に基づいて記憶されているデータ値に対して高速サーチ・エンジンを提供できる。節約される時間はかなりなものとなる。従って、本発明は大規模メモリ内でデータ値の場所を探すための時間が重要であるような全ての技術領域で使用できる。唯一の制限は、データ値が列方向に昇順に記憶されることである。
【００７４】
注意されたいのは、上記の説明の中で行を列と入れ替えることが可能であり、それはメモリの構造に依存してどちらの記憶方向がそれぞれ行および列として表されるかが決まるからである。
【００７５】
先に説明されたように、本発明に基づけばメモリを通しての高速検索が、ポインタを使用することなく実現可能であり、此処で行部および列部で構成される全記憶アドレスがそれぞれ前回比較結果および前回格納アドレスから決定できる。
【図面の簡単な説明】
【図１ａ】  図１ａは本発明に基づくサブツリーを使用したバイナリ・ツリー構造を示す。
【図１ｂ】  図１ｂは各々の行が図１ａのサブツリー上にマッピングされているメモリ装置を示す。
【図２】  図２は本発明に基づく検索方法を図示する流れ図である。
【図３ａ】  図３ａは新たなサブツリーの新たなルート・アドレスが、第１行に位置しているリーフ・ノードのアドレスからどの様にして決定されるかの例を示す。
【図３ｂ】  図３ｂは図３ａに示されているメモリ装置の第１および第２行内の２つのバイナリ・ツリー検索の例を示す。
【図４】  図４は、本発明に基づきＤＲＡＭメモリ内に記憶されているデータ値にアクセスするためのアクセス装置の１つの実施例を示す。
【図５】  図５は、従来技術に基づき特定のアドレス位置に、データ値がランダムに記憶されているメモリ装置を示す。
【図６】  図６は従来技術に基づきバイナリ・ツリー検索を実行するための従来型論理的バイナリ・ツリー構造を示す。
【図１ａ】
0004807686.tif 000002
【図１ｂ】
0004807686.tif 000003
【図１ｃ】
0004807686.tif 000004
【図２】
0004807686.tif 000005
【図３ａ】
0004807686.tif 000006
【図３ｂ】
0004807686.tif 000007
【図４】
0004807686.tif 000008
【図５】
0004807686.tif 000009
【図６】
0004807686.tif 000010