JP4717130B2 - オフセット表を使用する完全ハッシュの生成 - Google Patents

オフセット表を使用する完全ハッシュの生成 Download PDF

Info

Publication number
JP4717130B2
JP4717130B2 JP2009122449A JP2009122449A JP4717130B2 JP 4717130 B2 JP4717130 B2 JP 4717130B2 JP 2009122449 A JP2009122449 A JP 2009122449A JP 2009122449 A JP2009122449 A JP 2009122449A JP 4717130 B2 JP4717130 B2 JP 4717130B2
Authority
JP
Japan
Prior art keywords
page
values
offset
hash
value
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.)
Expired - Fee Related
Application number
JP2009122449A
Other languages
English (en)
Other versions
JP2009217839A (ja
Inventor
ベネット,ジョン,アール.
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Publication of JP2009217839A publication Critical patent/JP2009217839A/ja
Application granted granted Critical
Publication of JP4717130B2 publication Critical patent/JP4717130B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9014Indexing; Data structures therefor; Storage structures hash tables

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、一般的にコンピュータシステムの記憶装置に関し、さらに詳しくは、表に対応づけられるデータを格納するための改良された方法およびシステムに関する。
大きさ64キロバイトで16ビットのキーにより索引付けされる表のようなエントリの大きい表は、特定の用途によってサポートされる不連続エントリの比較的小さい部分集合を含むことができる。例えば、ユニコードは、16ビットの符号化単位を基礎にする世界的な文字符号化標準である。特定の言語で使用される符号点しかサポートしないユニコード構成製品では、その言語の符号点のより小さい不連続部分集合が使用される。例を挙げると、日本語の場合、製品は、通常日本工業規格(JIS)コードを使用しており、ユニコードによってサポートされる64キロバイトの可能な記号のうち、約6,000個の記号しか使用されない。この6000個ほどの記号は、ユニコードの範囲全体の様々な位置に広く分散され、残りの符号点は、その製品にとって無意味である。
より少数の文字属性または類似物をフルサイズ64キロバイトの表に格納すると、多くの未使用のエントリ値が残る。この格納方法は、ユニコード値をキーとして使用して簡単な索引付け作業を可能にし、したがって、格納された情報を検索する最高速の方法であるが、表は、属性のサイズの64000倍であり、空間の多くが無駄になる。多くのシステムや用途では、高速検索速度は、この方法を実現するために要求されるメモリの量に値せず、したがって他の格納方法が試みられてきた。
フルサイズのエントリ表に代わるものとして、二分探索を使用する方法がある。そのような二分表ではスロットの無駄が無いが、各エントリと共にキーを格納しなければならず、関心対象のエントリを格納するために使用する空間の量は増大する。さらに、表の大きさをNとした場合、探索を実行するためにO(log(N))の演算を行い、したがって平均すると、他の格納方法に比べて比較的遅い検索になる。
ハッシュ表を使用して、符号点から計算したハッシュ値によって索引付けされる属性を格納することもできる。ハッシュ表の1つの型として、衝突解消付きのハッシュ表がある。この型のハッシュ表は、通常各エントリと共にキーを格納することによって達成される、衝突を処理するための情報を格納しなければならない。衝突の有無を試験するために余分な時間を必要とし、また衝突が検知されたときに衝突を解消するためにさらに多くの時間を必要とする。最後に、この型のハッシュ表は、一般的にしばしば、多数の余分な未使用のエントリで終わってしまう。つまり、表は必ずしも密にパックされるとは限らない。
最後に、完全ハッシュアルゴリズム(衝突が無い)は、メモリの使用と速度の間の優れた調和をもたらすことができるので、多くの用途で望ましい性能を達成する。さらに、完全ハッシュアルゴリズムでは、エントリと共にキーを格納しないので空間が節約される。
しかし、完全ハッシングでは、一般的に余分な未使用のエントリが存在するので空間が無駄になる。また、検索時間は各探索作業における重要な要素であるので、ハッシュ値を計算するために必要な費用(例えば処理時間の量)にも重要な考慮を払わなければならない。さらに、比較的大きい範囲の値の1つの部分集合のハッシングにうまく働いたものが、別の部分集合ではうまく働かない。したがって、完全ハッシュアルゴリズムの大きな問題は、一般的に、共に非常に高速である値の任意の部分集合の完全ハッシュを見つけ、およびハッシュ値を一緒に密にパックするための優れた迅速な首尾一貫した方法が存在しないことである。
したがって、本発明の一般的目的は、大きい範囲の不連続値の任意の部分集合に関する完全ハッシュを生成する方法および機構(装置)を提供することにある。
さらに別の目的は、ハッシュ値を密にパックする、上述の特徴を持つ方法および機構を提供することにある。
別の目的は、ハッシュ値の非常に高速な計算を実行できる上述の種類の方法および機構を提供することにある。
関連目的は、自動的に作動する方法および機構を提供することにある。
これらの目的を達成する上での別の関連目的は、不連続ユニコード符号点の部分集合でうまく機能する、上述の特徴を持つ方法および機構を提供することにある。
さらに別の目的は、高速であり、信頼でき、費用効果が高く、柔軟性があり、様々な用途に拡張可能な上述の方法および機構を提供することにある。
簡単に言うと、本発明は、大きい範囲の値の不連続部分集合を、完全ハッシュによる連続したまたは大部分が連続したより小さい範囲に変換するための方法および機構を提供するものである。値の部分集合は、範囲内の値の中から選択され、範囲は二次元行列に編成される。行列の1つの次元は、ページを表し、別の次元はページ内へのオフセットを表す。行列は、ページとページ内へのオフセットとの各交叉位置に、その交叉位置によって表される値が部分集合の選択値であるか否かを示すビットなどの写像情報を含む。例えば、部分集合に選択される場合、ビットは1であり、選択されない場合は零である。
次に、各ページを選択し、各ページの写像情報(例えば1のビット)に一次元配列内の写像情報との衝突が無いかを検査し、衝突が検知されなくなるまで各ページをある量づつ移動(シフト)することによって、行列は一次元配列(例えばビットマップ)に変換される。衝突が検知されなければ、ページ写像情報がシフト位置における一次元配列にオーバレイされ、シフト量がページオフセット表に記録される。
不連続範囲の値を受け取ると、その値は、ページ番号とそのページ内へのオフセットとに分割される。値はそれにより、そのページのシフト量を探索し、そのページ内へのオフセットにシフト量を加算することによって、サブセット範囲の値にハッシュ化される。
他の目的および利点は、図面に関連して取り上げる以下の詳細な説明から明らかになるであろう。
本発明に従って完全ハッシュを生成するためのコンピュータシステムを表すブロック図である。 可能なエントリの表の典型例を表すブロック図である。 図2の表の選択されたエントリを示す代替的方法を表すブロック図である。 図2の表の選択されたエントリを示す代替的方法を表すブロック図である。 選択されたエントリに関する情報を格納するためのビットマップ行列を表すブロック図である。 選択されたエントリに関する情報を格納するためのビットマップ行列を表すブロック図である。 本発明の一態様に従ってビットマップ行列から一次元合成ビットマップへページをオーバレイする過程を順次に示すブロック図である。 本発明の一態様に従ってビットマップ行列から一次元合成ビットマップへページをオーバレイする過程を順次に示すブロック図である。 本発明の一態様に従ってビットマップ行列から一次元合成ビットマップへページをオーバレイする過程を順次に示すブロック図である。 本発明の一態様に従ってビットマップ行列から一次元合成ビットマップへページをオーバレイする過程を順次に示すブロック図である。 本発明の一態様に従ってビットマップ行列のページが相互にオーバレイされるときのページオフセット表におけるオフセット値を示す図である。 本発明の一態様に従ってビットマップ行列のページが相互にオーバレイされるときのページオフセット表におけるオフセット値を示す図である。 本発明の一態様に従ってビットマップ行列のページが相互にオーバレイされるときのページオフセット表におけるオフセット値を示す図である。 本発明の一態様に従ってビットマップ行列のページが相互にオーバレイされるときのページオフセット表におけるオフセット値を示す図である。 エントリ情報が充填されていくハッシュ表を表す図である。 エントリ情報が充填されていくハッシュ表を表す図である。 エントリ情報が充填されていくハッシュ表を表す図である。 エントリ情報が充填されていくハッシュ表を表す図である。 本発明に従って完全ハッシュを生成するための過程を一般的に表す流れ図である。 本発明に従って完全ハッシュを生成するためにビットマップ行列のページをオーバレイするための過程を一般的に表す流れ図である。 本発明の一態様に従ってキーからハッシュ値を計算するためのコンピュータシステムを表すブロック図である。
(実施形態の説明)
図面を参照しながら説明する。まず図1において、本発明に従ってオフセット表を使用して不連続値を再写像するためのコンピュータシステムが、全体的に符号20で表されている。コンピュータシステム20は、記憶装置24に効果的に接続されたプロセッサ22を含み、該記憶装置はランダムアクセスメモリ(RAM)と、ハードディスクドライブ、光ドライブまたは類似物などの不揮発性記憶装置とを含む。ご理解いただけるとおり、不揮発性記憶装置28は、よく知られたスワップ技術を介して、RAMと一緒に使用して比較的大量の仮想メモリを形成することができる。明らかになるであろうが、本発明では、読取り専用メモリ(ROM)または同様の不揮発性システムを使用することができる。また、埋込みシステムは本発明から利益を得ることができる。
コンピュータシステム20はまた、ユーザコマンドをプロセッサ22に伝えるために、入出力回路機構(I/O)32を介して接続された少なくとも1つの入力装置30、通常はキーボードおよび/またはマウスなどのユーザポインティング装置を含む。同様に、コンピュータディスプレイモニタおよびスピーカなど、少なくとも1つの局所出力装置34が、グラフィカルユーザインタフェースなどを介して、プロセッサ22からシステム20のユーザへ情報を伝えるために、I/O32に接続される。
本発明の一態様では、値の大きい範囲内の不連続な位置にある値の部分集合が与えられると、再写像プロセス36がこの部分集合を、連続した、またはほぼ連続した、零を基底とする範囲に変換する。例えば、大きい値の範囲は、文字属性の大きい表38に索引を付けるための0000h(16進数)から0ffffhまでの範囲の索引に対応するかもしれない。例えば索引は、ユニコード符号点である。容易に理解できるように、表38にかなりの量の空間を割り当てる必要がある。しかし、特定の用途にとっては、表38のエントリのうち、特定のものだけが関心の対象である。例えば、用途またはオペレーティングシステムによってサポートされる文字に対応する符号点だけが、その用途またはオペレーティングシステムにとって重要である。典型的な用途では、再写像プロセス36は、基本的に、関心のあるエントリを取り出し、それらを、元の表のキーを受け取り、ほとんど密なハッシュ表40に対するハッシュ値索引に変換することができる方法で、ほとんど密なハッシュ表40に再パックする。再写像プロセスの一部としてオフセットの表42が生成され、これを、以下で述べるように、元の索引値と一緒に使用して、ほとんど密なハッシュ表40のハッシュ値が計算される。
したがって、本発明には区別される2つの態様があることに注意する必要がある。第一態様は、大きい表38のキーなどの不連続値の部分集合をオフセット表42へ変換することを含む。本発明の第二態様は、その後にオペレーティングシステム、ドライバ、アプリケーションプログラムまたは類似物がオフセット表42を使用して、大きい表38のキーをハッシュ値、例えばほとんど密なハッシュ表40に対するハッシュ値索引にハッシュ化することを含む。典型的な使用法では、ほとんど密なハッシュ表40は、ユニコード文字属性または類似物の表を提供するために、コンピュータを使用する事実上どのような種類の装置にでもロードすることができる。大きいユニコード表38における位置に対応するユニコード符号点を受け取ると、ハッシュ表40のハッシュ値が計算され、そこから属性が見つけ出される。
本発明の動作の説明に移ると、本発明は、65536のユニコード符号点の範囲内における日本語の文字の部分集合にかなりの利益をもたらす。それにもかかわらず、本発明は、ユニコード符号点の部分集合に限定されず、明らかになるとおり、いつでも大きい範囲のより小さい不連続部分集合を取り扱うときに、多くの潜在的用途がある。
簡素な例として、図2に16個のエントリの表38を示す。そのうち特定のエントリだけが、ほとんど密なハッシュ表40に再写像される。さらに詳しくは、0000b、0001b、0010b、0110b、1000b、および1111bによって索引付けされたエントリが、アプリケーションプログラムの関心対象である。例えば、図3に概念的に示すように、(多少異なる配列法で)、0000bは、図形的に文字「A」を表示するための属性を索引付けし、0001bは文字「B」を索引付けし、以下1111bが「P」を表すまで繰り返される。
これらのうち、A、B、C、G、I、およびPだけがサポートされる。容易に理解いただけるとおり、これは一般に、可能なユニコード文字の65536個のエントリの表から文字(例えば日本語の文字)の不連続集合を選択することに対応する。
変換を実行するために、ステップ800〜804で、大きい表38の索引が選択され、行(ページ)と列のビットマップ行列に展開される。図5は、16個のエントリの表に対する4行×4列の行列44を示す。図3において、対応して関心のあるエントリの索引は、ビットマップにおいて対応するビットが1にセットされ、図5のビットマップ行列44では「X」で示される。(見易さのため、および索引の1および0との混同を避けるため)一方、他のビットは全て0(すなわち空白)である。64kのユニコード索引のように16ビットで索引付けされる表の場合、初期行列は、例えば256行(8ビット)および256列(8ビット)で構成することができる。したがって、行0は、0000hから00FFhの間の任意の所望のユニコード文字に対するビットが1にセットされ、行1は、0100から01ffhまでの範囲の所望の文字に対するビットが1にセットされ、等々と繰り返される。
表38の索引が図5のビットマップ行列44に展開される本実施例の説明を続けると、各行は、00bから11bまでの番号が付けられたページと考えることができ、それによって列番号は、00bから11bのページ内へのオフセットとなる。あるいは、列をページとして使用し、行番号がページ内へのオフセットを表すこともできる。実際、64キロバイトの可能なユニコード文字の集合の部分集合を取り扱う場合、列をページとし、行をオフセットとして使用すると、大抵の場合、さらにいっそう密なパッキングが得られることが明らかになっている。
しかし、以下で説明するとおり、両方の方法を試し、最良の結果(ほとんど密なパッキング)を選択することができる。
本実施例では、図6に最もよく示すとおり、図5の元の4×4の行列44は、新しい行列45に概念的に再構成され、図5の列はページになり、(図6では水平方向に示す)、行はページ内へのオフセットになる(図6では垂直方向に示す)。
本発明の一態様に従って、ページは一度に1枚づつ、次々に上に重ねられ(オーバレイ)、密な、またはほとんど密な一次元合成ビットマップ46になる。選択された索引(ビットマップで1のビットで表される)は不連続であり、一般的に幅広く分散しているので、幾つかのページのビットが衝突することなく、または少なくともほとんど衝突せずにインタレースする傾向がある。索引を表すビットが別のビットと衝突するときはいつでも、合成ビットマップ46にオーバレイされる現在のページが、一文字分だけ右にシフトする。ページが衝突無く完全にインタレースする場合、シフト量が、ページオフセット表42にそのページのオフセットとして記録される。
ページが次々にオーバレイされる順序は、ページがいかによくインタレースするか、したがってどれだけのシフトが必要になるかに影響し、これが最終的にハッシュ表40の大きさを決定することに注意する必要がある。したがって、最良のパッキングを見つけ出す1つの方法は、ページ順序付けの全ての組合せを試して、最良の結果を選択することであろう。理解いただけるように、これは極めて高価になる(例えば、256行および256列に分割された16ビットの索引では、256の階乗の組合せが可能である)。
ページをオーバレイする適正な順序を得るためのより安価な方法は、より多くの1ビットをそのうえに含むページが、1ビットの数がより少ないページより前に合成ビットマップ46にオーバレイされるように、ページを順位付けすることである(つまり、最多から最少への順位付け)。この目的のために、順位付けプロセスがステップ806で呼び出され、様々なページにおける1ビットの数を計数し、その計数に従ってページを順位付けする。そうした1ビット加重順位付けプロセスは、極めて密なパッキングを達成することが明らかになっている。実際、他の最適化(以下で説明する)をこの順位付けプロセスと結合したときに、100%の(または100%に非常に近い)パッキングが高速で達成される。
しかし、一般的な順位付け技術にもかかわらず、ハッシュ表を開始する最初のページが、そこの文字数に関係なく、ビットマップ行列45の最初のページとなるように選択することが好ましい。本発明に必要というわけではないが、明らかになるとおり、所望の索引として零を選択し、零としてこのページから始めることにより、大きい表38の零索引が常に零に写像されることが確実になり、これは空白で終了する文字列および類似物を取り扱うときに有用である。
図7は、図20の流れ図に対応し、Page00は零索引を含むので、ステップ900で図6の第1ページPage00から始まるオーバレイプロセスを示す。図7に示すように、合成一次元ビットマップ46aは、単にこのページになるだけであり、このページのシフトは行われないので、ステップ910で零のオフセットがページオフセット表42に書き込まれる。第1ページの場合、この時点で衝突はなく、零が選択されることを前提として、第1ページに先行する零はないので、ステップ900から直接ステップ908に続くことに注意されたい。このプロセスが最終的に終了したときに、この特定のビットスプリットが選択された場台、page00の各1ビットに対応する表データが、ハッシュ表40に書き込まれる(ステップ814のように)ことに注意されたい。例えば、図15に示すように、零によって索引付けられた位置に「A」属性データが書き込まれ、2によって索引付けられた位置に「I」が書き込まれる。ステップ914は、別のページを検査し、1が得られるので、ステップ900に戻り、そこで次のページpage10が選択される。
図8は、次のページpage10の前の合成ビットマップ46aへのオーバレイを表し、これにより新しい合成ビットマップ46bが生成される。page10が次にオーバレイされるのは、ステップ806の順位付けプロセスで、この行が残りの行に比べて、1にセットされたビットが最も多い(2個)ことが決定されたためであることに注意されたい。
page10をオーバレイするために、ステップ902でpage10は、最初に、先行する零ビットの数に等しい量だけ左にシフトされる。この位置で、衝突の検査がステップ904で実行される。1つのそうした衝突の検査は、現行ページ(page10)のビットと前の合成ビットマップ46aのAND(論理積)を取り、結果が零かどうかを検査することによって達成される。零になれば、衝突は無い。零でなければ、衝突が検知され、それによりステップ906でページは、1ビット右にシフトされ、衝突検査が繰り返される。衝突が検知されなくなるまで、必要なだけシフト操作が続く。
本実施例では、ステップ904〜906の衝突検知および解消プロセスにより、page10は、このページが前のビットマップ46aに結合される前に、零の右に3位置分シフトする(図8に最もよく表す)。このページの3のオフセットが、図12に最もよく示すように、ページオフセット表42に記録される。しばらく後で(ステップ814で行われるように)、このビット分割(スプリット)が選択されたと仮定して、配列データ、例えば「C」および「G」の属性は、図16に示すようにハッシュ表40の適切な位置に追加されることに注意されたい。図8に示すように、合成ビットマップ46bは、今5ビットの長さであり、ハッシュ表40は、少なくとも五個のエントリに割り当てられる空間を持たなければならないことに注意されたい。したがって、合成ビットマップ46は、ハッシュ表40と同様に、シフトされたビットを収容するために必要なだけ成長するが、1だけが関心のあるエントリを表す(索引付ける)ので、後続零ビット(空白)は、合成ビットマップ46の一部と考慮されない。ハッシュ表40の最終的大きさを決定する合成ビットマップ46が成長する量は、値の部分集合のパッキングがどの程度密であるかによって異なる。
合成ビットマップ46にオーバレイされる次のページ(ステップ914および900)は、page11である。page11およびpage01は各々1ビットがそこにセットされているが、この実施例では、ステップ806の順位付けプロセスで、page11がpage01より前に配置されるように順位付けられたと仮定していることに注意されたい。図6の行列45および図9に示すように、page11には3個の先行する零ビット(空白)がある。したがって、オーバレイプロセスを試みる前に、ステップ902で、page11は、衝突を検査する前に、最初に3回左にシフトされる。明らかなとおり、ステップ904で、この(マイナス3の)オフセットに衝突が存在することが決定され、したがってステップ906でページは1つ右にシフトされ(オフセットが増分される)、衝突試験が繰り返される。今度はステップ904で、衝突が無いと決定され、したがってステップ908でpage11はマイナス2のオフセットで前の合成ビットマップ46bに結合され、新しい合成ビットマップ46c(図9)になる。ステップ910で、このページのマイナス2のオフセットが、図13に最もよく示すように、ページオフセット表42の適切な位置(位置3)に記録される。後で、ステップ814で行われるように、この索引に対応するデータ、例えば「P」の属性が図17に示すように、ハッシュ表40における合成ビットマップ46cの索引位置に対応する位置に格納されることに注意されたい。
合成ビットマップ46にオーバレイされる最後に残った1枚のページは、page01である。図6の行列45および図10に示すように、page01には先行する零ビット(空白)が無い。したがって、page01は、衝突検査の前に、ステップ902で左にシフトされない。明らかなように、ステップ904で零オフセットに衝突が存在し、したがってこのpageは、ステップ906で1つ右にシフトし、オフセットが増加され、ステップ904の衝突検査が繰り返される。
容易に理解できるように、ステップ904で衝突が検出され続け、page01がプラス5の位置分オフセットされるまで、ページはステップ906でシフトされる。その結果、page01は、プラス5のオフセットで前の合成ビットマップ46cに結合され、新しい最終合成ビットマップ46が形成される(図10)。page01前の合成ビットマップの大きさ全体分シフトしたことに注意されたい。
さらに詳しくは、前のビットマップ46cが100%パッキングされていたので、page01は、前の合成ビットマップの終わりの位置からオーバレイされた。
100%パッキングを検査し、検知された場合には、ビットマップの先頭から始めて終わりまで繰り返しシフトするのではなく、すぐに最後に次のページをオーバレイすることが可能であることに注意されたい。
ステップ910で、このページの5のオフセットが、図14に最もよく示すように、ページオフセット表42に記録される。プロセスは次に図19に戻る。再び、少し後のステップ814で、この索引に対応する属性データ、例えば「B」の属性が、図18に示すように、合成ビットマップ46の索引位置に対応する位置ハッシュ表40に格納されることに注意されたい。
この時点で、初期の16個のエントリの表38の6個の分散索引および対応するデータを、4個のエントリ(例えばバイト)のページオフセット表42と共に、0から5までの範囲の値によって索引付けされた密にパックされたハッシュ表40に再写像することができる。このような小さい例でも、メモリの節約が顕著になることに注目されたい。例えば、初期の16個のエントリの表38に各索引ごとに1キロバイトが割り当てられた場合、この表は16キロバイトのメモリを必要とする。しかし、同じデータを6キロバイトのハッシュ表+ページオフセット表のための4個の格納単位(例えば語またはバイト)に保存することができる。実際、以下で説明するように、初期の大きい表38に対するキーを密なハッシュ表40のハッシュ値索引に変換するために必要なものは、ページオフセット表42だけである。さらに大きい配列の大きい部分集合でも同様の節約が達成され、自動再写像プロセスから特に利益を得られる。
本発明に必要というわけではないが、最適に高密なパッキングを見つけ出すために,行と列に同じ番号を持たないものを含めて、様々なビットマップ行列を試すことができる。例えば、16ビットの索引の場合、8ビット×8ビット以外の分割を使用して、上述のような方法で値を再写像することができる。最適分割の発見を達成するために、ステップ808では、合成ハッシュ表40の大きさおよびページオフセット表42を、ハッシュ表40に対応する統計として保存する。
次に、プロセスはステップ802にループバックし、その都度値を行と列に分割する方法を変えながら、別の行列を構成する。例えば、16ビットの索引は、512列の128ページ(7×9ビット)、128列の512ページ(9×7ビット)1024列の64ページ(6×10ビット)等々のように分割することができる。特定のループ反復により、以前の最良の分割が改善される場合には、そのページオフセット表および付随する統計を前のものと置換し、それによって全ての(適正な)分割を試みた後、最少量の空間を使用する分割が最終的に残る(ステップ812)。上述の写像動作は充分に高速であるので、この方法により得られる最適写像法が認識されるまで、全ての実際的な組合せを試みることができることに注目されたい。さらに、上述のとおり、いったん行と列に分割した上で、重ねられるページを垂直方向および水平方向から観察して、最適可能なパッキングを見つけだすことができる。最適写像が見つかったら、そのためのオフセット表42を使用して、ステップ814において元の表エントリを密な、またはほとんど密なハッシュ表40に書き込むことができる。
ページオフセット表を使用してハッシュ表に対するハッシュ値索引を計算する方法について説明する。図21に別のコンピュータシステムが示されている。図21では、図1の場合と同様の構成要素に対しては、図1における符号より1000高い符号を使用した。例えば比較的パワーの低いハンドヘルドコンピュータ装置とすることができるこのシステム1020では、記憶装置1024は、ユニコード文字などのような選択された文字を表示する目的などのために、完成したハッシュ表1040およびページオフセット表1042を含む。したがって、本発明の第二態様は、元の大きい表38のキーから、密なハッシュ表1040に対する索引として機能するハッシュ値1044への変換を取り扱う。表1040および1042は一般的に、ROMまたは類似物にバーンインするなど、不揮発性メモリに格納される。
ハッシュ計算を達成するために、アプリケーションプログラム1048または類似物が最初に、ページオフセット表1042およびハッシュ表1040を記憶装置1024にロードする(またはすでにロードされている場合には、探し出す)(図22のステップ1100)。キー1046(入力値)をアプリケーションプログラム1048または類似物が受け取り、ハッシュ計算プロセス1050に渡し、それによりステップ1104(図22)で、値は最初に同一ビットグループに分割され、これはページオフセット表1042を構成するために使用される。ビット分割は、ページオフセット表1042の大きさから明らかである。すなわち、ページオフセット表1042のエントリの数がページの数に等しく、したがってページのオフセット情報を格納するために使用されるビット数を表す。例えば、128個のエントリは7ビットに対応する。いうまでもなく、分割およびその他の情報(例えば、対応するハッシュ表のファイル名)もまた、ページオフセット表1042によりヘッダ情報または類似物に維持することができる。
いかなる場合でも、初期の大きい表38に対応する入力値を受け取ると(垂直方向の列がページになる場合)、値の高位部分がステップ1104の一ステップとして計算プロセス1048によってマスクされ、ページ番号を表す適切な数の有効な低位ビットが残される。簡単な例で、4つの可能なビットのうち2つのビットが高位部分に当たり、したがって上位の2ビットがマスクされる。残りの2ビットは、オフセット表1042への零を基底とする索引として使用される。例えば「G」文宇を表示する目的などのために、0110bを受け取ると、上位ビットがマスクされ、10bが残る。同様に、ステップ1104内で、マスクされない上位ビットをページ番号内のビットの数と同数だけ右にシフトすることによって、ページ内へのオフセットを表す上位ビットが得られる。
ステップ1106で、ページ番号は、ページオフセット表1042への索引として使用され、それによって対応するページのオフセット値を決定するために探索動作が実行される。本実施例では、10bから3のオフセット値が得られる。
ステップ1108で、この値はページ内へのオフセットに追加される(ステップ1104における上位ビットのマスキングおよびシフトから決定される01bに等しい)。結果(3+1=4)がハッシュ表1040に対する計算されたハッシュ値索引であり、ステップ1110でアプリケーションプログラム1048に返され、アプリケーションプログラムは次にハッシュ表1040から適切なデータを獲得する。お分かりのように、図18のハッシュ表40の4個(100b)のエントリは、適切に「G」文字を索引付けする。下表は全ての有効な計算の結果を示すが、これについて本書ではそれ以上詳しく説明しない。
Figure 0004717130
ご理解いただけるように、計算はAND(論理和)(マスキングのため)、シフト、配列の索引付け(ページオフセット表1042)、および加算のみで構成され、きわめて高速である。
正確な結果を出すために、ハッシュ計算は有効な入力値、すなわちハッシュ表を使用するアプリケーションプログラムによってサポートされる入力値を必要とすることに注意すべきである。ハッシュ計算を実行する前に、有効性検査(ステップ1102で表されるような)を値に実行して、有効な入力に対応することを確認することができる。入力値が有効であれば、有効なキーから衝突の無い一意の結果が得られるので、ハッシュは完全である。
さらに、ハッシュ表データ自体以外に、ハッシュ値を計算し続けるために必要なものはオフセット表だけである。したがって、合成ビットマップおよび統計など、オフセット表の作成中に蓄積されたその他の情報は廃棄することができる。
いうまでもなく、例えば2つ以上をシステムで利用できる場合には、アプリケーションプログラムが適切なハッシュ表および対応するオフセット表をロードできるようにするために、必要とあらば、幾つかのメタデータおよび/またはその他の情報をオフセット表および/またはハッシュ表と共に維持することもできる。
以上の詳細な説明から分かるように、より大きい範囲の不連続値の任意の部分集合に対する完全なハッシュを生成する方法および機構を提供する。この方法および機構は、ハッシュ値の非常に高速な計算を可能にしながら、ハッシュ値を一緒に密にパックするものである。この方法および機構は、自動的に作動し、不連続ユニコード点の部分集合で特によく機能する。この方法および機構は、高速であり、信頼でき、費用効果が高く、柔軟であり、拡張性がある。
本発明は、様々な変更および代替構成が可能であるが、その特定の例示的実施形態を図面に示し、以上に詳細に記述した。しかし、本発明を開示した特定の形態に限定する意図はなく、反対に、本発明は、本発明の精神および範囲に該当する全ての変更、代替構成、および均等物を網羅するものであることを理解されたい。

Claims (1)

  1. ある範囲の値を含むデータを格納するメモリを備え、該データを処理するコンピュータシステムにより実行される方法であって、前記ある範囲の値のうちの不連続な値から構成される不連続な値の部分集合を完全なハッシュを用いて連続した、またはほとんど連続したより小さい範囲で変換しハッシュ値を得る方法において、
    前記ある範囲の値の中から前記値の部分集合に含まれる値を選択するステップと、
    前記ある範囲の値により構成される集合の値を二次元行列に編成するステップであって、前記行列の1つの次元がページを表し、他の次元が前記ページ内へのオフセットを表し、前記行列のページと該ページ内へのオフセットとの各交叉位置に、その交叉によって表される値が前記値の部分集合に選択された値であるか否かを示す写像情報を含むようにするステップと、
    各ページを選択し、各ページの写像情報を検査して一次元配列内の写像情報との衝突が無いかを調べ、衝突が検知されなくなるまで各ページを、前記オフセットをずらすことによってある量だけシフトし、前記ページの写像情報を一次元配列のシフト後の位置に重ねあわせ、シフト量を記録することによって、前記行列を一次元配列に変換し、前記ページごとのページオフセット表および索引付けされた値を格納するハッシュ表を前記メモリに格納するステップと
    を具え、
    前記値を、その都度行と列に分割する方法を変えながら、別の行列を構成し、特定のループ反復により、以前の最良の分割がさらに改善される場合、そのページオフセット表および付随する統計を前記以前の最良の分割と置換し、それによって全ての可能な分割の組み合わせを試みた後、最少量の空間を使用する分割を最終的に残して該分割により得られたページオフセット表及びハッシュ表を前記メモリに格納し
    アプリケーションプログラムにより入力値として前記ある範囲の部分集合に含まれる値が受け取られると、前記入力値は前記メモリに格納されたページオフセット表のエントリ数で分割され、当該分割された下位ビットを前記ページオフセット表内のページとして、対応するオフセット値を求めることにより、前記メモリに格納されたハッシュ表から、前記入力値に対応するハッシュ値を得ることを特徴とする方法。
JP2009122449A 1997-06-05 2009-05-20 オフセット表を使用する完全ハッシュの生成 Expired - Fee Related JP4717130B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/869,913 US6014733A (en) 1997-06-05 1997-06-05 Method and system for creating a perfect hash using an offset table
US08/869,913 1997-06-05

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP50295599A Division JP4965009B2 (ja) 1997-06-05 1998-06-04 オフセット表を使用する完全ハッシュの生成

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2010211217A Division JP4717154B2 (ja) 1997-06-05 2010-09-21 オフセット表を使用する完全ハッシュの生成

Publications (2)

Publication Number Publication Date
JP2009217839A JP2009217839A (ja) 2009-09-24
JP4717130B2 true JP4717130B2 (ja) 2011-07-06

Family

ID=25354449

Family Applications (3)

Application Number Title Priority Date Filing Date
JP50295599A Expired - Fee Related JP4965009B2 (ja) 1997-06-05 1998-06-04 オフセット表を使用する完全ハッシュの生成
JP2009122449A Expired - Fee Related JP4717130B2 (ja) 1997-06-05 2009-05-20 オフセット表を使用する完全ハッシュの生成
JP2010211217A Expired - Fee Related JP4717154B2 (ja) 1997-06-05 2010-09-21 オフセット表を使用する完全ハッシュの生成

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP50295599A Expired - Fee Related JP4965009B2 (ja) 1997-06-05 1998-06-04 オフセット表を使用する完全ハッシュの生成

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2010211217A Expired - Fee Related JP4717154B2 (ja) 1997-06-05 2010-09-21 オフセット表を使用する完全ハッシュの生成

Country Status (5)

Country Link
US (1) US6014733A (ja)
JP (3) JP4965009B2 (ja)
CN (1) CN1206604C (ja)
AU (1) AU7821198A (ja)
WO (1) WO1998055929A1 (ja)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6014733A (en) * 1997-06-05 2000-01-11 Microsoft Corporation Method and system for creating a perfect hash using an offset table
US6591250B1 (en) * 1998-02-23 2003-07-08 Genetic Anomalies, Inc. System and method for managing virtual property
US6185552B1 (en) * 1998-03-19 2001-02-06 3Com Corporation Method and apparatus using a binary search engine for searching and maintaining a distributed data structure
DE69811477T2 (de) * 1998-05-01 2003-11-20 Hewlett-Packard Co. (N.D.Ges.D.Staates Delaware), Palo Alto Verfahren und Vorrichtung zur Hashkodierung
US6321192B1 (en) * 1998-10-22 2001-11-20 International Business Machines Corporation Adaptive learning method and system that matches keywords using a parsed keyword data structure having a hash index based on an unicode value
US6785278B1 (en) * 1998-12-10 2004-08-31 International Business Machines Corporation Methods, systems and computer program products for hashing address values
US6321232B1 (en) * 1998-12-18 2001-11-20 Xerox Corporation Method for creating a geometric hash tree in a document processing system
US6401185B1 (en) * 1999-05-27 2002-06-04 Oracle Corp. Method and apparatus for accessing paged objects using a fast division technique
US7080382B2 (en) * 2000-02-25 2006-07-18 Oracle International Corporation Accessing shorter-duration instances of activatable objects based on object references stored in longer-duration memory
US6928162B1 (en) * 2000-04-07 2005-08-09 International Business Machines Corporation Method and system for manipulating and telescoping a hash function
US7185005B1 (en) 2000-05-12 2007-02-27 Oracle International Corporation Nested transactions in a file system
US7987217B2 (en) * 2000-05-12 2011-07-26 Oracle International Corporation Transaction-aware caching for document metadata
US7725878B1 (en) 2000-05-12 2010-05-25 Oracle International Corporation Property bundles on a per instance basis
US7389493B1 (en) * 2000-05-12 2008-06-17 Oracle International Corporation Categories on a per instance basis
US6741990B2 (en) * 2001-05-23 2004-05-25 Intel Corporation System and method for efficient and adaptive web accesses filtering
US6801993B2 (en) 2001-09-28 2004-10-05 International Business Machines Corporation Table offset for shortening translation tables from their beginnings
US6748401B2 (en) 2001-10-11 2004-06-08 International Business Machines Corporation Method and system for dynamically managing hash pool data structures
US20050246330A1 (en) * 2004-03-05 2005-11-03 Giang Phan H System and method for blocking key selection
US7831908B2 (en) * 2005-05-20 2010-11-09 Alexander Vincent Danilo Method and apparatus for layout of text and image documents
US20060294126A1 (en) * 2005-06-23 2006-12-28 Afshin Ganjoo Method and system for homogeneous hashing
TWM288401U (en) * 2005-07-15 2006-03-01 Genesys Logic Inc Highly efficient data characteristics recognition device for flash memory
TW200705179A (en) * 2005-07-29 2007-02-01 Genesys Logic Inc Efficient data property identification method for a flash memory
US7382876B2 (en) * 2005-11-01 2008-06-03 Microsoft Corporation Hash function constructions from expander graphs
US7965297B2 (en) * 2006-04-17 2011-06-21 Microsoft Corporation Perfect hashing of variably-sized data
US7619623B2 (en) * 2006-04-17 2009-11-17 Microsoft Corporation Perfect multidimensional spatial hashing
JP4812508B2 (ja) * 2006-05-12 2011-11-09 富士通株式会社 プレゼンス情報を取り扱うシステム
US7424591B2 (en) * 2006-06-19 2008-09-09 International Business Machines Corporation Splash tables: an efficient hash scheme for processors
US7792877B2 (en) * 2007-05-01 2010-09-07 Microsoft Corporation Scalable minimal perfect hashing
US7872648B2 (en) * 2007-06-14 2011-01-18 Microsoft Corporation Random-access vector graphics
US9425825B2 (en) 2012-05-22 2016-08-23 International Business Machines Corporation Path encoding and decoding
GB2533391A (en) * 2014-12-19 2016-06-22 Ibm Wall encoding and decoding
GB2533392A (en) 2014-12-19 2016-06-22 Ibm Path encoding and decoding
GB2533393A (en) 2014-12-19 2016-06-22 Ibm Pad encoding and decoding
US9950261B2 (en) 2016-04-29 2018-04-24 International Business Machines Corporation Secure data encoding for low-resource remote systems
US10515064B2 (en) 2016-07-11 2019-12-24 Microsoft Technology Licensing, Llc Key-value storage system including a resource-efficient index
CN114244817A (zh) * 2021-11-30 2022-03-25 慧之安信息技术股份有限公司 一种基于osip协议栈头域的哈希冲突处理方法和装置
WO2024107203A1 (en) * 2022-11-18 2024-05-23 Visa International Service Association System and method for performing an mph-based lookup of records in a database

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000517086A (ja) * 1997-06-05 2000-12-19 マイクロソフト コーポレイション オフセット表を使用する完全ハッシュの生成

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4115765A (en) * 1977-02-17 1978-09-19 Xerox Corporation Autonomous display processor
US4215402A (en) * 1978-10-23 1980-07-29 International Business Machines Corporation Hash index table hash generator apparatus
US4433389A (en) * 1978-12-26 1984-02-21 Burroughs Corporation Memory address translation system for accessing memory locations via job names
US4488256A (en) * 1981-11-23 1984-12-11 Motorola, Inc. Memory management unit having means for detecting and preventing mapping conflicts
US5133061A (en) * 1987-10-29 1992-07-21 International Business Machines Corporation Mechanism for improving the randomization of cache accesses utilizing abit-matrix multiplication permutation of cache addresses
US5111389A (en) * 1987-10-29 1992-05-05 International Business Machines Corporation Aperiodic mapping system using power-of-two stride access to interleaved devices
US5293593A (en) * 1990-10-11 1994-03-08 Hewlett-Packard Company Method and apparatus for the mapping of physically non-contiguous memory fragments to be linearly addressable
US5377340A (en) * 1991-06-18 1994-12-27 Hewlett-Packard Company Method and apparatus for memory interleaving using an improved hashing scheme
JPH06231047A (ja) * 1993-02-05 1994-08-19 Fujitsu Ltd アドレス変換方法および装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000517086A (ja) * 1997-06-05 2000-12-19 マイクロソフト コーポレイション オフセット表を使用する完全ハッシュの生成

Also Published As

Publication number Publication date
JP4717154B2 (ja) 2011-07-06
CN1206604C (zh) 2005-06-15
WO1998055929A1 (en) 1998-12-10
CN1236454A (zh) 1999-11-24
AU7821198A (en) 1998-12-21
JP2009217839A (ja) 2009-09-24
JP2011003214A (ja) 2011-01-06
JP4965009B2 (ja) 2012-07-04
US6014733A (en) 2000-01-11
JP2000517086A (ja) 2000-12-19

Similar Documents

Publication Publication Date Title
JP4717130B2 (ja) オフセット表を使用する完全ハッシュの生成
JP4805315B2 (ja) データ構造によるコンピュータ表現及びそれに関連する符号化/復号化方法
JP2009259284A (ja) 圧縮データの構造を問い合わせる方法
RU2004121027A (ru) Устройство и способ перемежения для системы связи
JPH0357500B2 (ja)
KR100240243B1 (ko) 데이터 검색장치
KR980004059A (ko) 데이타 처리장치 및 그 레지스터 어드레스 변환방법
JPH05189490A (ja) 関数結果をセーブし検索する方法と装置
KR100474357B1 (ko) 다단계 분할을 이용한 기억소자 할당방법
CN113630123B (zh) 一种数据压缩系统及方法
CN110221778A (zh) 酒店数据的处理方法、系统、存储介质以及电子设备
JP4159761B2 (ja) Fftのためのインプレイスメモリ管理
KR920702514A (ko) 프로세서가 설비된 시스템과 시스템내에서의 어드레스 변환방법
JP3288063B2 (ja) 可変長データの格納および参照システム
JP2708625B2 (ja) 均質ハッシング処理方式
JP2507399B2 (ja) デ―タベ―ス装置
JPH023865A (ja) 漢字文字の検索方式
JPH05204757A (ja) キャッシュメモリ
JPH04323748A (ja) アドレス変換方法および装置
JP2007115015A (ja) メモリシステムおよび検索方法
JP2018060425A (ja) インデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法
JPH11265375A (ja) 使用者定義文字管理装置および記憶媒体
JPH0934788A (ja) アドレス変換装置及びアドレス変換方法
JPH07141251A (ja) アドレス発生装置
JPS59191649A (ja) プログラムの生成方式

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090915

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091211

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100119

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100415

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100518

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100921

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20101004

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20101004

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20101025

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A132

Effective date: 20101119

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110318

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110329

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140408

Year of fee payment: 3

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees