特許第6614632号(P6614632)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧
特許6614632ビットを選択する所定位置を変更することでハッシュ関数を1つ以上生成することが可能なハッシュ値を計算する方法、並びに、その為のコンピュータ及びコンピュータ・プログラム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6614632
(24)【登録日】2019年11月15日
(45)【発行日】2019年12月4日
(54)【発明の名称】ビットを選択する所定位置を変更することでハッシュ関数を1つ以上生成することが可能なハッシュ値を計算する方法、並びに、その為のコンピュータ及びコンピュータ・プログラム
(51)【国際特許分類】
   G06F 16/90 20190101AFI20191125BHJP
【FI】
   G06F16/90
【請求項の数】17
【全頁数】33
(21)【出願番号】特願2014-257340(P2014-257340)
(22)【出願日】2014年12月19日
(65)【公開番号】特開2016-118874(P2016-118874A)
(43)【公開日】2016年6月30日
【審査請求日】2017年8月22日
【前置審査】
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】上田 高徳
【審査官】 樋口 龍弥
(56)【参考文献】
【文献】 特開2001−222537(JP,A)
【文献】 特表2008−510185(JP,A)
【文献】 特表2014−512121(JP,A)
【文献】 金海 和宏,他4名,第74回(平成24年)全国大会講演論文集(1) アーキテクチャ ソフトウェア科学・工学 データベースとメディア、分岐予測機構を応用したループパス予測器の初期検討,第74回(平成24年)全国大会講演論文集(1) アーキテクチャ ソフトウェア科学・工学 データベースとメディア,日本,一般社団法人情報処理学会,2012年 3月 6日,1-69〜1-70頁
(58)【調査した分野】(Int.Cl.,DB名)
G06F 16/00−16/958
(57)【特許請求の範囲】
【請求項1】
ハッシュ値を計算する方法であって、ビットを選択する所定位置を変更することでハッシュ関数を1つ以上生成することを可能にし、ここで、入力キーはLビットであり、ハッシュ値はNビットであり、且つ、N≦Lであり、前記方法は、コンピュータが、生成された或る1つのハッシュ関数の計算を、
事前に生成された所定の乱数列に基づいて、前記入力キーの下位Nビットのうちの或る所定位置にある1個のビットを選択するステップと、
事前に生成された所定の乱数列に基づいて、前記入力キーの上位L−Nビットのうちの或る所定位置にある複数個のビットを選択するステップと、
前記1個のビットを選択するステップで選択された前記1個のビットと、前記複数個のビットを選択するステップで選択された前記複数個のビットとについて、全ビットの排他的論理和を計算するステップと、
当該計算された排他的論理和を前記ハッシュ値のNビットのうちの或る所定位置のビットへ割り当てるステップと、
前記1個のビットを選択するステップにおいて前記下位Nビットのうちのまだ選択されていないビットに対して、前記ハッシュ値のまだ割り当てられていないビットの全てが割り当てられるまで、前記1個のビットを選択するステップ、前記複数個のビットを選択するステップ、前記計算するステップ及び前記割り当てるステップを繰り返すステップと
を含む、前記方法。
【請求項2】
記複数個のビットを選択するステップが、
前記複数個のビットを選択する場合に、前記入力キーの上位L−Nビットのうちの2つ以上の異なる位置から複数個のビットを選択するステップ、又は、
前記複数個のビットを選択する場合に、前記入力キーの上位L−Nビットのうちの全て異なる位置から複数個のビットを選択するステップ
を含む、請求項1に記載の方法。
【請求項3】
前記繰り返すステップにおいて、前記複数個のビットを選択するステップを繰り返す場合に、当該複数個のビットを選択するステップが、
前記入力キーの上位L−Nビットのうちの先に選択された位置と異なる位置のビットを選択するステップ
を含む、請求項1又は2に記載の方法。
【請求項4】
前記繰り返すステップにおいて、前記複数個のビットを選択するステップを繰り返す場合に、当該複数個のビットを選択するステップが、
前記入力キーの上位L−Nビットを均等に分けた個数のビットを選択するステップであって、前記均等に分けた個数は前記複数個のビットを選択するステップが最初に実行されたときに選択されたビットの個数である、前記選択するステップ
を含む、請求項1〜のいずれか一項に記載の方法。
【請求項5】
前記均等に分けた個数が、(L−N)がNで割り切れる場合には、(L−N)/N個である、請求項4に記載の方法。
【請求項6】
前記均等に分けた個数が、(L−N)がNで割り切れない場合には、[(L−N)/N]+1個又は[(L−N)/N]個であり、ここで、[(L−N)/N]は(L−N)/N以下の最大の整数である、請求項4に記載の方法。
【請求項7】
前記上位L−Nビットが同一の2個のキー {2×a,2×a+1,2×a+2,... ,2×(a+1)−1} (aは非負整数である)である、請求項1〜6のいずれか一項に記載の方法。
【請求項8】
前記入力キーがランダム・キーである、請求項1〜6のいずれか一項に記載の方法。
【請求項9】
前記割り当てるステップにおいて、排他的論理和の計算値を求めるステップが、
入力キーkのハッシュ値の下位からrビット目h(k,r)を、入力キーkの下位からpビット目を返す関数b(k、p)のpに前記乱数列を代入して計算するステップを含む、
請求項1〜8のいずれか一項に記載の方法。
【請求項10】
前記コンピュータが、
空の記憶領域を用意するステップ
をさらに実行することを含み、
前記1個のビットを選択するステップが、当該1個のビットを選択するステップで選択した前記1個のビットを前記記憶領域に追加するステップをさらに含み、
記複数個のビットを選択するステップが、当該複数個のビットを選択するステップで選択した前記複数個のビットを前記記憶領域に追加するステップをさらに含む、
請求項1〜のいずれか一項に記載の方法。
【請求項11】
前記1個のビットを選択するステップが前記複数個のビットを選択するステップと並列して実行され、前記1個のビットを選択するステップが前記複数個のビットを選択するステップよりも先に実行され、又は、前記複数個のビットを選択するステップが前記1個のビットを選択するステップよりも先に実行される、請求項1〜のいずれか一項に記載の方法。
【請求項12】
前記生成したハッシュ関数の複数からなるハッシュ関数群が、ユニバーサル・ハッシング(Universal Hashing)として使用される、又はマルチレベル・ハッシュ・テーブル(MHT)で使用される、請求項1〜11のいずれか一項に記載の方法。
【請求項13】
前記生成した1つのハッシュ関数が、上位L−Nビットが同一であり且つ下位Nビットを全パターン網羅したキー(2個)を入力することに応じて、出力し得るハッシュ値の全て(2個)を出力するステップ
を含む、請求項1〜12のいずれか一項に記載の方法。
【請求項14】
前記コンピュータが、
ハッシュテーブルを用意するステップと、
前記生成したハッシュ関数の1つに、又はその複数からなるハッシュ関数群に基づいて前記ハッシュテーブル内のデータへアクセスするステップと、
をさらに実行することを含む、請求項1〜13のいずれか一項に記載の方法。
【請求項15】
前記コンピュータが、
ハッシュテーブルを、FPGA(Field Programmable Gate Array)内のメモリ・ブロック上に用意するステップ
をさらに実行することを含む、請求項1〜のいずれか一項に記載の方法。
【請求項16】
ハッシュ値を計算する為のコンピュータであって、ビットを選択する所定位置を変更することでハッシュ関数を1つ以上生成することを可能にし、ここで、入力キーはLビットであり、ハッシュ値はNビットであり、且つ、N≦Lであり、前記コンピュータが、生成された或る1つのハッシュ関数の計算をする為に、
ビット選択手段が、事前に生成された所定の乱数列に基づいて、前記入力キーの下位Nビットのうちの或る所定位置にある1個のビットを選択し、
前記ビット選択手段が、事前に生成された所定の乱数列に基づいて、前記入力キーの上位L−Nビットのうちの或る所定位置にある複数個のビットを選択し、
ビット割当手段が、前記選択された前記1個のビットを、前記ハッシュ値のNビットのうちの或る所定位置のビットへ割り当て、
前記ビット割当手段が、前記下位Nビットから選択された前記1個のビットと、前記上位L−Nビットから選択された前記複数個のビットとについて、全ビットの排他的論理和を計算し、当該計算された排他的論理和を前記ハッシュ値のNビットのうちの或る所定位置のビットへ割り当て、
前記1個のビットを選択することにおいて前記下位Nビットのうちのまだ選択されていないビットに対して、前記ハッシュ値のまだ割り当てられていないビットの全てが割り当てられるまで、前記ビット選択手段が、前記1個のビットを選択すること及び複数個のビットを選択すること、並びに、前記ビット割当手段が、前記計算すること及び前記割り当てることを繰り返す、
前記コンピュータ。
【請求項17】
ハッシュ値を計算する為のコンピュータ・プログラムであって、ビットを選択する所定位置を変更することでハッシュ関数を1つ以上生成することを可能にし、ここで、入力キーはLビットであり、ハッシュ値はNビットであり、且つ、N≦Lであり、生成された或る1つのハッシュ関数の計算をする為に、コンピュータに、請求項1〜15のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ハッシュ値の計算技法であり、特には、ビットを選択する位置を変更することで、ハッシュ関数を1つ以上、特に複数生成することが可能なハッシュ値を計算する技法に関する。
【背景技術】
【0002】
ハッシュテーブルに、空間効率良くキーを格納する手法として、異なるハッシュ関数を用いてハッシュテーブルを分割するマルチレベル・ハッシュテーブル(Multi-level hash table:MHT)と呼ばれる手法が知られている(下記非特許文献1及び2を参照)。
【0003】
下記特許文献1は、2種類のハッシュ関数を用いて、入力された固定長データの第1及び第2のハッシュ値を求めるハッシュ演算手段と、N(Nは2以上の整数)個のメモリバンクから成り、多数の固定長データが保持されるデータ・テーブルを格納するデータ・テーブル・メモリと、各固定長データの格納先のメモリアドレスが、前記第1のハッシュ値をインデックスとして保持される主メモリ・ポインタ・テーブル、及び、各固定長データの格納先のメモリアドレスが、前記第2のハッシュ値をインデックスとして保持される副メモリ・ポインタ・テーブルを格納するポインタ・テーブル・メモリと、前記N個のメモリバンクの同一メモリアドレスに格納されている複数の固定長データと、前記ハッシュ演算手段に入力された一つの固定長データとを同時に比較し、比較結果を出力する比較手段と、を備える固定長データ検索装置を記載する(請求項7)。
【0004】
下記特許文献2は、2つのタグ・メモリ・アドレスが、2つの異なるハッシュ関数により同時に計算されること:第1及び第2のハッシュ関数64及び66は、各々、引き数として主メモリ・アドレス60を受け取り、「0」から「n−1」までの範囲のタグ・メモリ・アドレスについての値を返すこと、ここで、nは、キャッシュ・エントリの数であること:第1のハッシュ関数64及び第2のハッシュ関数66は、第1のハッシュ関数64であるF1(v)がいずれかの引き数vに対して値iを返し、第2のハッシュ関数66であるF2(v)がいずれかの引き数vに対して値jを返し、そして所与のビット値に関してiとjとが常に異なるように選ばれること:この例では、ビット10が、値iと値jとの間で異なるビットとして選択されていること:このようなiとjとの間で値が異なるようなビットは、制御ビットとして用いることができることを記載する(段落0025)。
【0005】
下記特許文献3は、ハッシュ値計算に使用する係数の値を変化させて、最もハッシュ値の偏りの少ない係数を求めることにより検索効率・メモリ使用効率の良いハッシュテーブルを生成することを特徴とするハッシュテーブル生成方法を記載する(請求項1)。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2004−229163号公報
【特許文献2】特開平8−235060号公報
【特許文献3】特開平7−168841号公報
【非特許文献】
【0007】
【非特許文献1】Andrei Z. Broder et. al., "Multilevel Adaptive Hashing", SODA'90 Proceedings of the first annual ACM-SIAM symposium on Discrete algorithms, pp. 43-53, January 1990
【非特許文献2】Adam Kirsch et. al., "The Power of One Move: Hashing Schemesfor Hardware", IEEE/ACM Transactions on Networking (TON), Vol. 18, No. 6, December 2010<URL:http://www.eecs.harvard.edu/~michaelm/postscripts/infocom_hardware_submit.pdf>から入手可能
【非特許文献3】Udit Dhawan et. al., "Area-Efficient Near-Associative Memories on FPGAs", FPGA 2013 Proceedings of the ACM/SIGDA international symposium on Field programmable gate arrays, pp. 191-200, February 2013
【非特許文献4】「3. TriMatrix Embedded Memory Blocks in Stratix IV Devices」, ALTERA(登録商標)<URL:http://www.altera.com/literature/hb/stratix-iv/stx4_siv51003.pdf>から入手可能
【発明の概要】
【発明が解決しようとする課題】
【0008】
FPGA(Field Programmable Gate Array)は、半導体の製造工程ではなく、機器の生産ラインや現地で(=field)、内部を書き換え可能な(=programmable)、論理回路(=logic gate)が多数配列(=array)された半導体デバイスである。FPGA上にハッシュテーブル(「アソシエイティブ・メモリ」とも呼ばれる)を構築することが出来れば、FPGAの並列計算能力を活用した高スループットの処理においてハッシュテーブルが利用可能になる。
【0009】
ところが、FPGAの内部メモリは、小容量のメモリ・ブロックが数多く配置された構成となっており、その細分化されたメモリ機構を使って、メモリ空間効率の良いハッシュテーブルを実現する方法が課題となる。ハッシュテーブルは一般に、入力されるキーの偏りによって使用されないメモリ領域が発生する。限られた容量のFPGAの内部メモリを有効活用するために、入力されるキーの偏りや、連番キーかランダム・キーかといった性質を利用しようにも、入力されるキーの性質が事前に分からない場合がある。また当該キーの性質が分かったとしても、その性質に合わせてハッシュテーブルのメモリ使用効率を最適化する為にはFPGAの回路の変更が必要であり、特に回路動作中の最適化は困難である。
【0010】
ハッシュテーブルに空間効率良くキーを格納する手法として、マルチレベル・ハッシュテーブル(MHT)と呼ばれる手法が知られている。しかしながら、FPGAにマルチレベル・ハッシュテーブルを実装するには以下に述べる課題がある:
(1)千個を超える膨大なメモリ・ブロック毎に、異なるハッシュ関数が必要である;及び、
(2)スループット向上のためにハッシュ関数を1クロックで計算出来ることが望ましく、そのために乗算のような複雑な演算は避ける必要がある。
【0011】
ハッシュ関数を多く生成するユニバーサル・ハッシング(Universal Hashing)と呼ばれる枠組みが知られている。しかしながら、ユニバーサル・ハッシングを含む既存のハッシュ関数は乗算や剰余演算があり、FPGAに適さない。また、FPGAはデジタル・シグナル・プロセッサ(DSP)を搭載しているが、1クロックで乗算や剰余演算が終了しないうえ、DSPの搭載数はメモリ・ブロックの数よりも大幅に少なく、メモリ・ブロック毎に異なるハッシュ関数を利用するという要求を満たせない。
【0012】
また、非特許文献3では、近似的なアソシエイティブ・メモリ(ハッシュテーブル)をFPGA上に実装している。しかしながら、非特許文献3では近似的なデータ格納方法を利用している為に正しいデータ検索を出来ない場合がある。そのために、正確性が求められている場合には、非特許文献3のアソシエイティブ・メモリを使用することができない。
【0013】
ハッシング方法として、局所性鋭敏型ハッシング(Locality Sensitive Hashing;LSH)が知られている。LSHでは、近いデータが近いハッシュ値になる。しかしながら、LSHは、出力し得るハッシュ値の全パターンの出現を保証するものでない。
【0014】
従って、本発明は、上記課題を解決するとともに、また、FPGAに限定されること無しに、ハッシュテーブルに空間効率良くキーを格納する為に使用するハッシュ関数群(生成された一つのハッシュ関数を複数集めたものである)を生成することを可能にするハッシュ値計算技法を提供することを目的とする。
【課題を解決するための手段】
【0015】
本発明は、ハッシュ値を計算する技法を提供し、ビットを選択する所定位置を変更することでハッシュ関数を1つ以上生成することを可能にする技法を提供する。当該技法は、上記ハッシュ値を計算する方法、並びに、上記ハッシュ値を計算する為のコンピュータ、そのコンピュータ・プログラム及びコンピュータ・プログラム製品を包含しうる。
【0016】
(本発明に従う第1の態様)
【0017】
本発明に従う第1の態様において、ビットを選択する所定位置を変更することでハッシュ関数を1つ以上生成することが可能なハッシュ値を計算する方法は、コンピュータが、生成された或る1つのハッシュ関数の計算を、
上記入力キーの下位Nビットのうちの或る所定位置にある1個のビットを選択するステップと、
上記選択された上記1個のビットを、上記ハッシュ値のNビットのうちの或る所定位置のビットへ割り当てるステップと、
上記選択するステップにおいて上記下位Nビットのうちのまだ選択されていないビットに対して、上記ハッシュ値のまだ割り当てられていないビットの全てが割り当てられるまで、上記選択するステップ及び上記割り当てるステップを繰り返すステップと
を実行することによって行うことを含む。ここで、入力キーはLビットであり、ハッシュ値はNビットであり、且つ、N≦Lである。
【0018】
本発明の一つの実施態様において、上記コンピュータが、
上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択するステップ
をさらに実行することを含みうる。
この場合に、上記ビットを割り当てるステップが、
上記1個のビットを選択するステップで選択された上記1個のビットと、上記1又は複数個のビットを選択するステップで選択された上記1又は複数個のビットとについて、全ビットの排他的論理和の計算値を求め、当該計算値を上記ハッシュ値のNビットのうちの或る所定位置のビットへ割り当てるステップ
を含みうる。
また、この場合に、上記繰り返すステップが、
上記1個のビットを選択するステップにおいて上記下位Nビットのうちのまだ選択されていないビットに対して、上記ハッシュ値のまだ割り当てられていないビットの全てが割り当てられるまで、上記1個のビットを選択するステップ、上記1又は複数個のビットを選択するステップ、及び上記ビットを割り当てるステップを繰り返すステップ
を含みうる。
【0019】
本発明の一つの実施態様において、上記1又は複数個のビットを選択するステップが、
上記複数個のビットを選択する場合に、上記入力キーの上位L−Nビットのうちの2つ以上の異なる位置から複数個のビットを選択するステップ、又は、
上記複数個のビットを選択する場合に、上記入力キーの上位L−Nビットのうちの全て異なる位置から複数個のビットを選択するステップ
を含みうる。
【0020】
本発明の一つの実施態様において、上記繰り返すステップにおいて、上記1又は複数個のビットを選択するステップを繰り返す場合に、当該1又は複数個のビットを選択するステップが、
上記入力キーの上位L−Nビットのうちの先に選択された位置と異なる位置のビットを選択するステップ
を含みうる。
【0021】
本発明の一つの実施態様において、上記繰り返すステップにおいて、上記1又は複数個のビットを選択するステップを繰り返す場合に、当該1又は複数個のビットを選択するステップが、
上記入力キーの上位L−Nビットを均等に分けた個数のビットを選択するステップであって、上記均等に分けた個数は上記1又は複数個のビットを選択するステップが最初に実行されたときに選択されたビットの個数である、上記選択するステップ
を含みうる。
【0022】
本発明の一つの実施態様において、上記均等に分けた個数が、(L−N)がNで割り切れる場合には、(L−N)/N個でありうる。
【0023】
本発明の一つの実施態様において、上記均等に分けた個数が、(L−N)がNで割り切れない場合には、[(L−N)/N]+1個又は[(L−N)/N]個であり、ここで、[(L−N)/N]は(L−N)/N以下の最大の整数でありうる。
【0024】
本発明の一つの実施態様において、上記上位L−Nビットが同一の2個のキー {2×a,2×a+1,2×a+2,... ,2×(a+1)−1} (aは非負整数である)でありうる。
【0025】
本発明の一つの実施態様において、上記入力キーがランダム・キーでありうる。
【0026】
本発明の一つの実施態様において、上記1個のビットを選択するステップが、事前に生成された所定の乱数列に基づいて、上記入力キーの下位Nビットのうちの或る所定位置にある1個のビットを選択するステップを含みうる。また、本発明の一つの実施態様において、上記1又は複数個のビットを選択するステップが、事前に生成された所定の乱数列に基づいて、上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択するステップを含みうる。
【0027】
本発明の一つの実施態様において、上記割り当てるステップにおいて、排他的論理和の計算値を求めるステップが、入力キーkのハッシュ値の下位からrビット目h(k,r)を、入力キーkの下位からpビット目を返す関数b(k、p)のpに上記乱数列を代入して計算するステップを含みうる。
【0028】
本発明の一つの実施態様において、上記コンピュータが、空の記憶領域を用意するステップを実行することをさらに含みうる。この場合に、上記1個のビットを選択するステップが、当該1個のビットを選択するステップで選択した上記1個のビットを上記記憶領域に追加するステップをさらにみうる。また、この場合に、上記1又は複数個のビットを選択するステップが、当該1又は複数個のビットを選択するステップで選択した上記1又は複数個のビットを上記記憶領域に追加するステップをさらに含みうる。
【0029】
本発明の一つの実施態様において、上記1個のビットを選択するステップが上記1又は複数個のビットを選択するステップと並列して実行され、上記1個のビットを選択するステップが上記1又は複数個のビットを選択するステップよりも先に実行され、又は、上記1又は複数個のビットを選択するステップが上記1個のビットを選択するステップよりも先に実行されうる。
【0030】
本発明の一つの実施態様において、上記生成したハッシュ関数の複数からなるハッシュ関数群が、ユニバーサル・ハッシングとして使用されうる、又はマルチレベル・ハッシュ・テーブル(MHT)で使用されうる。
【0031】
本発明の一つの実施態様において、上記生成した1つのハッシュ関数が、上位L−Nビットが同一であり且つ下位Nビットを全パターン網羅したキー(2個)を入力することに応じて、出力し得るハッシュ値の全て(2個)が出力するステップを含みうる。
【0032】
本発明の一つの実施態様において、上記コンピュータが、
ハッシュテーブルを用意するステップと、
上記生成したハッシュ関数の1つに、又はその複数からなるハッシュ関数群に基づいてデータを上記ハッシュテーブル内のデータへアクセスするステップと
をさらに実行することを含みうる。
【0033】
本発明の一つの実施態様において、上記コンピュータが、ハッシュテーブルを、FPGA内のメモリ・ブロック上に用意するステップをさらに実行しうる。
【0034】
(本発明に従う第2の態様)
【0035】
本発明に従う第2の態様において、ハッシュ値を計算する為のコンピュータであって、ビットを選択する所定位置を変更することでハッシュ関数を1つ以上生成することを可能にし、上記コンピュータが、生成された或る1つのハッシュ関数の計算をする為に、
上記入力キーの下位Nビットのうちの或る所定位置にある1個のビットを選択するビット選択手段と、
上記選択された上記1個のビットを、上記ハッシュ値のNビットのうちの或る所定位置のビットへ割り当てるビット割当手段と
を備えており、
上記コンピュータは、上記下位Nビットのうちのまだ選択されていないビットに対して、上記ハッシュ値のまだ割り当てられていないビットの全てが割り当てられるまで、上記ビット選択手段が、上記入力キーの下位Nビットのうちの上記まだ選択されていないビットのうちの或る所定位置にある1個のビットを選択すること、及び、上記ビット割当手段が、上記選択された上記1個のビットを、上記ハッシュ値のNビットのうちの或る所定位置のビットへ割り当てることを繰り返しうる。ここで、入力キーはLビットであり、ハッシュ値はNビットであり、且つ、N≦Lである。
【0036】
上記ビット選択手段がさらに、上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択し、
上記ビット割当手段が、上記下位Nビットから選択された上記1個のビットと、上記上位L−Nビットから選択された上記1又は複数個のビットとについて、全ビットの排他的論理和の計算値を求め、当該計算値を上記ハッシュ値のNビットのうちの或る所定位置のビットへ割り当て、
上記下位Nビットのうちのまだ選択されていないビットに対して、上記ハッシュ値のまだ割り当てられていないビットの全てが割り当てられるまで、上記ビット選択手段が、上記入力キーの下位Nビットのうちの上記まだ選択されていないビットのうちの或る所定位置にある1個のビットを選択すること、及び、上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択すること、並びに、上記ビット割当手段が、上記下位Nビットから選択された上記1個のビットと、上記上位L−Nビットから選択された上記1又は複数個のビットとについて、全ビットの排他的論理和の計算値を求め、当該計算値を上記ハッシュ値のNビットのうちの或る所定位置のビットへ割り当てることを繰り返しうる。
【0037】
本発明の一つの実施態様において、上記ビット選択手段が、
上記入力キーの上位L−Nビットのうちの複数個のビットを選択する場合に、上記入力キーの上位L−Nビットのうちの2つ以上の異なる位置から複数個のビットを選択し、又は、
上記入力キーの上位L−Nビットのうちの複数個のビットを選択する場合に、上記入力キーの上位L−Nビットのうちの全て異なる位置から複数個のビットを選択しうる。
【0038】
本発明の一つの実施態様において、上記繰り返しにおいて、上記ビット選択手段が、上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択することを繰り返す場合に、上記入力キーの上位L−Nビットのうちの先に選択された位置と異なる位置のビットを選択しうる。
【0039】
本発明の一つの実施態様において、上記繰り返しにおいて、上記ビット選択手段が、上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択することを繰り返す場合に、上記入力キーの上位L−Nビットを均等に分けた個数のビットを選択しうる。ここで、上記均等に分けた個数は、上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択することが最初に実行されたときに選択されたビットの個数である。
【0040】
本発明の一つの実施態様において、上記均等に分けた個数が、(L−N)がNで割り切れる場合には、(L−N)/N個でありうる。
【0041】
本発明の一つの実施態様において、上記均等に分けた個数が、(L−N)がNで割り切れない場合には、[(L−N)/N]+1個又は[(L−N)/N]個であり、ここで、[(L−N)/N]は(L−N)/N以下の最大の整数でありうる。
【0042】
本発明の一つの実施態様において、上記上位L−Nビットが同一の2個のキー {2×a,2×a+1,2×a+2,... ,2×(a+1)−1} (aは非負整数である)でありうる。
【0043】
本発明の一つの実施態様において、上記入力キーがランダム・キーでありうる。
【0044】
本発明の一つの実施態様において、上記ビット選択手段が、事前に生成された所定の乱数列に基づいて、上記入力キーの下位Nビットのうちの或る所定位置にある1個のビットを選択しうる。また、本発明の一つの実施態様において、上記ビット選択手段が、事前に生成された所定の乱数列に基づいて、上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択しうる。
【0045】
本発明の一つの実施態様において、上記ビット割当手段が、入力キーkのハッシュ値の下位からrビット目h(k,r)を、入力キーkの下位からpビット目を返す関数b(k、p)のpに上記乱数列を代入して計算して、上記排他的論理和の計算値を求めうる。
【0046】
本発明の一つの実施態様において、上記ビット選択手段がさらに、空の記憶領域を用意し、上記入力キーの下位Nビットのうちの或る所定位置にある選択した1個のビットを上記記憶領域に追加し、且つ、上記入力キーの上位L−Nビットのうちの或る所定位置にある選択した1又は複数個のビットを上記記憶領域に追加しうる。
【0047】
本発明の一つの実施態様において、上記ビット選択手段が、上記入力キーの下位Nビットのうちの或る所定位置にある1個のビットを選択することを上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択することと並列して実行し、又は、上記入力キーの下位Nビットのうちの或る所定位置にある1個のビットを選択することを上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択することよりも先に実行し、又は、上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択することを上記入力キーの下位Nビットのうちの或る所定位置にある1個のビットを選択することよりも先に実行しうる。
【0048】
本発明の一つの実施態様において、上記生成したハッシュ関数の複数からなるハッシュ関数群が、ユニバーサル・ハッシングとして使用されうる、又はマルチレベル・ハッシュ・テーブル(MHT)で使用されうる。
【0049】
本発明の一つの実施態様において、上記生成した1つのハッシュ関数が、上位L−Nビットが同一であり且つ下位Nビットを全パターン網羅したキー(2個)を入力することに応じて、出力し得るハッシュ値の全て(2個)を出力しうる。
【0050】
本発明の一つの実施態様において、コンピュータが、ハッシュテーブルを用意し、上記生成したハッシュ関数の1つに、又はその複数からなるハッシュ関数群に基づいて上記ハッシュテーブル内のデータへアクセスしうる。
【0051】
本発明の一つの実施態様において、コンピュータが、ハッシュテーブルを、FPGA内のメモリ・ブロック上に用意しうる。
【0052】
(本発明に従う第3の態様)
【0053】
本発明に従う第3の態様において、コンピュータ・プログラム及びコンピュータ・プログラム製品は、生成された或る1つのハッシュ関数の計算をする為に、上記コンピュータに、本発明に従う上記第1の態様の方法の各ステップを実行させる。
【0054】
本発明の実施態様に従うコンピュータ・プログラムはそれぞれ、一つ又は複数のフレキシブル・ディスク、MO、CD−ROM、DVD、BD、ハードディスク装置、USBに接続可能なメモリ媒体、ROM、MRAM、RAM等の任意のコンピュータ読み取り可能な記録媒体に格納することができる。当該コンピュータ・プログラムは、記録媒体への格納のために、通信回線で接続する他のデータ処理システム、例えばコンピュータからダウンロードしたり、又は他の記録媒体から複製したりすることができる。また、本発明の実施態様に従うコンピュータ・プログラムは、圧縮し、又は複数に分割して、単一又は複数の記録媒体に格納することもできる。また、様々な形態で、本発明の実施態様に従うコンピュータ・プログラム製品を提供することも勿論可能であることにも留意されたい。本発明の実施態様に従うコンピュータ・プログラム製品は、例えば、上記コンピュータ・プログラムを記録した記憶媒体、又は、上記コンピュータ・プログラムを伝送する伝送媒体を包含しうる。
【0055】
本発明の上記概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの構成要素のコンビネーション又はサブコンビネーションもまた、本発明となりうることに留意すべきである。
【0056】
本発明の実施態様において使用されるコンピュータの各ハードウェア構成要素を、複数のマシンと組み合わせ、それらに機能を配分し実施する等の種々の変更は当業者によって容易に想定され得ることは勿論である。それらの変更は、当然に本発明の思想に包含される概念である。ただし、これらの構成要素は例示であり、そのすべての構成要素が本発明の必須構成要素となるわけではない。
【0057】
また、本発明は、ハードウェア、ソフトウェア、又は、ハードウェア及びソフトウェアの組み合わせとして実現可能である。ハードウェアとソフトウェアとの組み合わせによる実行として、上記コンピュータ・プログラムをインストールされたコンピュータにおける当該コンピュータ・プログラムの実行が典型的な例として挙げられる。かかる場合、当該コンピュータ・プログラムが当該コンピュータのメモリにロードされて実行されることにより、当該コンピュータ・プログラムは、当該コンピュータを制御し、本発明にかかる処理を実行させる。当該コンピュータ・プログラムは、任意の言語、コード、又は、表記によって表現可能な命令群から構成されうる。そのような命令群は、当該コンピュータが特定の機能を直接的に、又は、1.他の言語、コード若しくは表記への変換及び、2.他の媒体への複製、のいずれか一方若しくは双方が行われた後に、実行することを可能にするものである。
【発明の効果】
【0058】
本発明の実施態様に従い、入力ビットがLビットであり且つ生成するハッシュ値がNビットである場合に本発明の実施態様において生成されたハッシュ関数は、上位L−Nビットが同一であり且つ下位Nビットを全パターン網羅したキー(2個)を入力することに応じて、出力し得るハッシュ値の全て(2個)を出力するという性質を有する。ハッシュ値の算出において排他的論理和を計算する際のビットの選択を変更することによって、上記性質を満たした多くのハッシュ関数を生成することを可能にする。
【0059】
本発明の実施態様に従い生成されたハッシュ関数群をマルチレベル・ハッシュ・テーブル(MHT)で使用する場合に、出力し得るハッシュ値の全て(2個)が出現するという性質を利用すると、連続キーを入力した場合、当該メモリの使用効率は100%になる。すなわち、MHTが溢れたとき、全てのスロットが埋まっていることになり、メモリ空間が無駄になることを防ぐことを可能にする。
【0060】
また、本発明の実施態様に従い生成されたハッシュ関数群は、入力キーが連続キーである場合には、従来のハッシュ関数よりも遙かに良い性能を発揮し、入力キーがランダム・キーである場合にも、従来のハッシュ関数と同等な性能を発揮する。
【0061】
また、本発明の実施態様に従うと、例えばFPGA又は専用ハードウェアである場合には1クロック内にハッシュ値の計算を完了することが可能になる。
【0062】
また、本発明の実施態様に従うと、出力し得るハッシュ値の全て(2個)が出現するという性質を利用すると、当該ハッシュ値をメモリ・ブロックのリセットの為に使用出来る。例えば、上位L−Nビットが同一であり且つ下位Nビットを全パターン網羅したキー(2個)を本発明のハッシュ関数に入力する間、出力されたハッシュ値をメモリ・ブロックのアドレスとし、同時にデータとしてゼロを入力すれば、メモリ・ブロック上の全データ(2個)のゼロクリアが実現できる。既存のハッシュ関数の場合、出力し得るハッシュ値の全てが出現するとは限らないため、ハッシュ値をそのままリセットのアドレスに利用することはできず、リセット時に専用の回路が必要になる。本発明の実施態様に従った当該ハッシュ値をメモリ・ブロックのリセットの為に使用することによって、メモリ・ブロックのリセットの為の回路を簡略化することが可能である。
【0063】
また、本発明の実施態様に従い生成されたハッシュ関数群をMHTにおいて使用することが可能である。
【0064】
また、本発明の実施態様に従い生成されたハッシュ関数群をユニバーサル・ハッシングの目的として使用することが可能である。
【図面の簡単な説明】
【0065】
図1A】本発明の実施態様において使用されうるコンピュータ又は本発明の実施態様に従うコンピュータの一例を示した図である。
図1B】本発明の実施態様において使用されうるコンピュータ又は本発明の実施態様に従うコンピュータの一例であって、当該コンピュータ上で1又は複数の仮想マシンを稼働させる場合を示した図である。
図2A】本発明の実施態様に従い、所定位置からビットを選択し、ハッシュ値を生成するダイアグラムを示す。
図2B】本発明の実施態様に従い、所定位置からビットを選択し、ハッシュ値を生成するダイアグラムを示す。
図2C】本発明の実施態様に従い、所定位置からビットを選択し、ハッシュ値を生成するダイアグラムを示す。
図2D】本発明の実施態様に従い、所定位置からビットを選択し、ハッシュ値を生成するダイアグラムを示す。
図2E】本発明の実施態様に従い、所定位置からビットを選択し、ハッシュ値を生成するダイアグラムを示す。
図2F】本発明の実施態様に従い、所定位置からビットを選択し、ハッシュ値を生成するダイアグラムを示す。
図2G】本発明の実施態様に従い、所定位置からビットを選択し、ハッシュ値を生成するダイアグラムを示す。
図3A】本発明の実施態様に従い生成されたハッシュ関数群が、上位L−Nビットが同一であり且つ下位Nビットを全パターン網羅したキー(2個)を入力することに応じて、出力し得るハッシュ値の全て(2個)を出力するダイアグラムを示す。
図3B】本発明の実施態様に従い生成されたハッシュ関数群が、ランダム・キーを入力することに応じて、ハッシュ値(重複する可能性がある)を出力するダイアグラムを示す。
図4】本発明の実施態様に従い生成されうるハッシュ関数を作成する動作の一例を示す。
図5A】本発明の実施態様に従い、生成したハッシュ関数群をマルチレベル・ハッシュ・テーブル(MHT)で使用するダイアグラムを示す。
図5B】マルチレベル・ハッシュ・テーブル(MHT)の概念図のダイアグラムを示す。
図6】本発明の実施態様に従い生成されたハッシュ関数群が、出力し得るハッシュ値の全て(2個)を出力するという性質を利用して、メモリ・ブロックをゼロクリアする際のメモリ・アドレスとしてそのハッシュ値を使用するダイアグラムを示す。
図7】本発明の実施態様に従い、ハッシュテーブルをFPGA内のメモリ・ブロック上に用意するダイアグラムを示す。
図8A】本発明の実施態様に従い、ハッシュ値の一つを生成する処理のフローチャートを示す。
図8B】本発明の実施態様に従い、ハッシュ値の一つを生成する処理のフローチャートを示す。
図9】本発明の実施態様に従い生成されるハッシュ関数の1つ又はその複数からなるハッシュ関数群に基づいて、ハッシュテーブル内のデータへアクセスするダイアグラムを示す。
図10図1A又は図1Bに従うハードウェア構成を好ましくは備えており、図8A図8Bそれぞれに示すフローチャートに従って本発明の実施態様を実施するコンピュータの機能ブロック図の一例を示す図である。
図11】本発明の実施態様に従い、生成したハッシュ関数群をマルチレベル・ハッシュ・テーブル(MHT)で使用した場合の使用されたメモリ・ブロック数の変化を示す。
【発明を実施するための形態】
【0066】
本発明の実施形態を、以下に図面に従って説明する。以下の図面を通して、特に断らない限り、同一の符号は同一の対象を指す。本発明の実施形態は、本発明の好適な態様を説明するためのものであり、本発明の範囲をここで示すものに限定する意図はないことを理解されたい。
【0067】
図1Aは、本発明の実施態様において使用されうるコンピュータ又は本発明の実施態様に従うコンピュータの一例を示した図である。当該コンピュータは例えば、1又は複数のコンピュータ、例えばサーバ・コンピュータ(例えば、サーバ機能を備えているコンピュータ)でありうるが、これらに制限されるものではない。
【0068】
コンピュータ(101)は、1又は複数のCPU(102)とメイン・メモリ(103)とを備えており、これらはバス(104)に接続されている。CPU(102)は例えば、32ビット又は64ビットのアーキテクチャに基づくものである。当該CPU(102)は例えば、インターナショナル・ビジネス・マシーンズ・コーポレーションのPower(商標)シリーズ、インテル社のXeon(登録商標)シリーズ、Core(商標) iシリーズ、Core(商標) 2シリーズ、Pentium(登録商標)シリーズ、Celeron(登録商標)シリーズ若しくはAtom(商標)シリーズ、又は、AMD(Advanced Micro Devices)社のOpteron(商標)シリーズ、Aシリーズ、Phenom(商標)シリーズ、Athlon(商標)シリーズ、Turion(登録商標)シリーズ若しくはSempron(商標)でありうる。
【0069】
バス(104)には、ディスプレイ・コントローラ(105)を介して、ディスプレイ(106)、例えば液晶ディスプレイ(LCD)が接続されうる。また、液晶ディスプレイ(LCD)は例えば、タッチパネル・ディスプレイ又はフローティング・タッチ・ディスプレイであってもよい。ディスプレイ(106)は、コンピュータ(101)上で動作中のソフトウェア(例えば、本発明の実施態様に従うコンピュータ・プログラム又は当該コンピュータ(101)上で動作中の任意の各種コンピュータ・プログラム)が稼働することによって表示されるオブジェクトを、適当なグラフィック・インタフェースで表示するために使用されうる。また、ディスプレイ(106)は例えば、ウェブ・ブラウザ・アプリケーションの画面を出力しうる。
【0070】
バス(104)には任意的に、例えばSATA又はIDEコントローラ(107)を介して、ディスク(108)、例えばハードディスク又はソリッド・ステート・ドライブ(SSD)が接続されうる。
【0071】
バス(104)には任意的に、例えばSATA又はIDEコントローラ(107)を介して、ドライブ(109)、例えばCD、DVD又はBDドライブが接続されうる。
【0072】
バス(104)には、周辺装置コントローラ(110)を介して、例えばキーボード・マウス・コントローラ又はUSBバスを介して、任意的に、キーボード(111)及びマウス(112)が接続されうる。
【0073】
ディスク(108)には、オペレーティング・システム、例えばメインフレーム用に開発されたオペレーティング・システム(例えば、z/OS、z/VM、若しくはz/VSE)、Windows(登録商標)、UNIX(登録商標)、Linux(登録商標)、MacOS(登録商標)、及びAndroid(登録商標)、並びにJ2EEなどのJava(登録商標)処理環境、Java(登録商標)アプリケーション、Java(登録商標)仮想マシン(VM)、Java(登録商標)実行時(JIT)コンパイラを提供するプログラム、本発明の実施態様に従うコンピュータ・プログラム、及びその他の任意の各種コンピュータ・プログラム、並びにデータが、メイン・メモリ(103)にロード可能なように記憶されうる。
【0074】
また、ディスク(108)には、本発明の実施態様に従うハッシュ関数群を生成する処理を可能にするソフトウェアが、メイン・メモリ(103)にロード可能なように記憶されうる。
【0075】
ディスク(108)は、コンピュータ(101)内に内蔵されていてもよく、当該コンピュータ(101)がアクセス可能なようにケーブルを介して接続されていてもよく、又は、当該コンピュータ(101)がアクセス可能なように有線又は無線ネットワークを介して接続されていてもよい。
【0076】
ドライブ(109)は、必要に応じて、CD−ROM、DVD−ROM又はBDからプログラム、例えばオペレーティング・システム、アプリケーション・プログラム又は本発明の実施態様に従うコンピュータ・プログラムをディスク(108)にインストールするために使用されうる。
【0077】
通信インタフェース(114)は、例えばイーサネット(登録商標)・プロトコルに従う。通信インタフェース(114)は、通信コントローラ(113)を介してバス(104)に接続され、コンピュータ(101)を通信回線(115)に有線又は無線接続する役割を担い、コンピュータ(101)のオペレーティング・システムの通信機能のTCP/IP通信プロトコルに対して、ネットワーク・インタフェース層を提供する。なお、通信回線は例えば、無線LAN接続規格に基づく無線LAN環境、IEEE802.11a/b/g/nなどのWi-Fi無線LAN環境、又は携帯電話網環境(例えば、3G、LTE又は4G環境)でありうる。
【0078】
図1Bは、本発明の実施態様において使用されうるコンピュータ又は本発明の実施態様に従うコンピュータの一例であって、当該コンピュータ上で1又は複数の仮想マシンを稼働させる場合を示した図である。当該コンピュータは例えば、ワークステーション、ラックマウント型サーバ、ブレード型サーバ、ミッドレンジ、メインフレームなどのサーバ・コンピュータとして構成されうる。
【0079】
図1Bに示すコンピュータ(121)は、ハードウェア・リソース(122)として、1又は複数のCPU(131)、メイン・メモリ(132)、ストレージ(133)、通信コントローラ(134)、及び通信インタフェース(135)を備えうる。上記1又は複数のCPU(131)、メイン・メモリ(132)、ストレージ(133)、通信コントローラ(134)、及び通信インタフェース(135)並びに通信回線(136)はそれぞれ、図1Aに示すコンピュータ(101)の1又は複数のCPU(102)、メイン・メモリ(103)、ディスク(108)、通信コントローラ(113)、及び通信インタフェース(114)、並びに通信回線(115)それぞれに対応しうる。
【0080】
また、コンピュータ(121)は、物理ホストマシンとして稼働し、また、仮想化ソフトウェア(例えば、VMWare(登録商標)、Hyper−V(登録商標)、Xen(登録商標))のハイパーバイザ(仮想化モニタ又は仮想化OSとも呼ばれる)上で、同一の又は異なるOS(例えば、Windows(登録商標)、UNIX(登録商標)、Linux(登録商標))をゲストOS(156)とした1又は複数の仮想マシン1〜n(125−1〜125−2)(ドメインU又はチャイルド・パーティションとも呼ばれる)を稼働させることが可能である。
【0081】
また、コンピュータ(121)は、上記ハイパーバイザ上で、管理用仮想マシン(124)(ドメイン0又はペアレント・パーティションとも呼ばれる)を稼働させることが可能である。管理用仮想マシン(124)は、管理用OS(141)、当該管理用OS(141)上で動作する制御モジュール(142)、及び仮想リソース(143)を含む。制御モジュール(142)は、ハイパーバイザ(123)に対しコマンドを発行するモジュールである。また、制御モジュール(142)は、ハイパーバイザ(123)に対して、ユーザドメインの仮想マシン1〜n(125−1〜125−2)の作成、及びゲストOS(156)の起動の命令を発行し、仮想マシン1〜n(125−1〜125−2)の動作を制御する。仮想リソース(143)は、管理用仮想マシン(124)の為に割り当てられたハードウェア・リソース(122)である。
【0082】
仮想マシン1〜n(125−1〜125−2)は、仮想リソース、ゲストOS(156)、及び、ゲストOS(156)上で動作する種々のアプリケーション1〜n(157−1〜157−3)を含む。仮想リソースは例えば、仮想CPU(151)、仮想メモリ(152)、仮想ディスク(153)、仮想通信コントローラ(154)及び仮想通信インタフェース(155)を含む。
【0083】
図2A図2Gそれぞれは、本発明の実施態様に従い、ハッシュ関数を用いてハッシュ値を生成するダイアグラム、すなわち所定位置からビットを選択し、ハッシュ値を生成するダイアグラムを示す。なお、以下の説明において、コンピュータ(101)(図1Aを参照)との記載は、コンピュータ(121)(図1Bを参照)と読み替えることも可能である。
【0084】
図2Aは請求項1に係る発明の実施態様の例示であり、入力値(key)が32ビットであり(L=32)且つハッシュ値h(key)が8ビットである(N=8)場合において、所定位置からビットを選択し、ハッシュ値を生成するダイアグラム(201)を示す。コンピュータ(101)は、どのようにビットを下記ステップ(a)及びステップ(b)において選択するかを事前に例えば乱数列を用いて決定しておく(乱数列を使用する場合の例については下記図4を参照)。
【0085】
コンピュータ(101)は、8ビットのハッシュ値(203)を生成する為に、入力値(202)の下位8ビット(N)(ハッシュ値のビット数と同じである)を使用するとする。
【0086】
コンピュータ(101)は、下位8ビットのうちの或る所定位置にある1個のビットを選択する(ステップ(a):204)。図2Aでは、下位8ビット(1ビット目〜8ビット目)のうちの6ビット目(0)が選択されたことを示す。
【0087】
コンピュータ(101)は、上記選択した1個のビット(0)をハッシュ値(203)の8ビットのうちの或る所定位置のビットへ割り当てる(ステップ(c):207)。図2Aでは、上記選択した1個のビット(0)が、ハッシュ値の8ビット(1ビット目〜8ビット目)のうちのうちの3ビット目に格納されたことを示す(209を参照)。
【0088】
コンピュータ(101)は、ハッシュ値(203)の残りの7ビット全てのビットが割り当てられるまで、ステップ(a)及び(c)を繰り返す(ステップ(d):208)。但し、ステップ(a)において、下位8ビットのうち一度選択されたビットは以降の繰り返しのステップにおいて選択されない。
【0089】
ハッシュ値(209)は、ハッシュ値(203)の残りの7ビット全てのビットが割り当てられるまでステップ(a)及び(c)を繰り返した後に生成されたハッシュ値を示す。
【0090】
図2Bは、請求項2に係る発明の実施態様の例示であり、入力値(key)が32ビットであり(L=32)且つハッシュ値h(key)が8ビットである(N=8)場合において、所定位置からビットを選択し、ハッシュ値を生成するダイアグラム(211)を示す。コンピュータ(101)は、どのようにビットを下記ステップ(a)及びステップ(b)において選択するかを事前に例えば乱数列を用いて決定しておく(乱数列を使用する場合の例については下記図4に示す乱数列を参照)。
【0091】
コンピュータ(101)は、8ビットのハッシュ値(213)を生成する為に、入力値(212)の下位8ビット(N)(ハッシュ値のビット数と同じである)及び上位24ビット(L−N)を使用するとする。
【0092】
コンピュータ(101)は、下位8ビット(N)のうちの或る所定位置にある1個のビットを選択する(ステップ(a):214)。図2Bでは、下位8ビット(1ビット目〜8ビット目)のうちの5ビット目(1)が選択されたことを示す。
【0093】
また、コンピュータ(101)は、ステップ(a)と並列して又はステップ(a)と前後して、上位24ビット(L−N)のうちの1又は複数個のビットを選択する(ステップ(b):215)。コンピュータ(101)は、上位24ビット(L−N)のうちの或る所定位置にある1又は複数個のビットを選択する(ステップ(b):215)際に、上位24ビット(L−N)のうちの同一の位置にあるビットを複数回選択してもよい。図2Bでは、上位24ビット(1ビット目〜24ビット目)のうちの16ビット目(1)及び5ビット目(0)の2つが選択されたことを示す。
【0094】
コンピュータ(101)は、ステップ215で選択したビット1及び0と、並びにステップ214で選択したビット1との3ビットの排他的論理和を計算し、計算値0を求める(ステップ216)。
【0095】
コンピュータ(101)は、ステップ216で求めた計算値0をハッシュ値(213)の8ビットのうちの或る所定位置のビットへ割り当てる(ステップ(c):217)。図2Bでは、上記求めた計算値(0)が、ハッシュ値の8ビット(1ビット目〜8ビット目)のうちのうちの3ビット目に格納されたことを示す(219を参照)。
【0096】
コンピュータ(101)は、ハッシュ値(213)の残りの7ビット全てのビットが割り当てられるまで、ステップ(a)、(b)及び(c)を繰り返す(ステップ(d):218)。但し、ステップ(a)において、下位8ビット(N)のうち一度選択されたビットは以降の繰り返しのステップにおいて選択されない。また、当該繰り返しのステップ(b)において、コンピュータ(101)は、繰り返しを通じて、上位24ビット(L−N)のうちの或る所定位置にある1又は複数個のビットを選択する際に、過去に一度選択された位置(先のステップ(b)で選択された位置)と同じ位置にあるビットを選択し、又は、過去に一度選択された位置と異なる位置にあるビット(すなわち、まだ選択されていない位置にあるビット)を選択しうる。
【0097】
ハッシュ値(219)は、ハッシュ値(213)の残りの7ビット全てのビットが割り当てられるまでステップ(a)、(b)及び(c)を繰り返した後に生成されたハッシュ値を示す。
【0098】
図2Cは、請求項3に係る発明の実施態様の例示であり、入力値(key)が32ビットであり(L=32)且つハッシュ値h(key)が8ビットである(N=8)場合において、所定位置からビットを選択し、ハッシュ値を生成するダイアグラム(221)を示す。コンピュータ(101)は、どのようにビットを下記ステップ(a)及びステップ(b)において選択するかを事前に例えば乱数列を用いて決定しておく(乱数列を使用する場合の例については下記図4に示す乱数列を参照)。
【0099】
図2Cは、図2Bと下記点以外は同じである(図2Cに示す符号221〜229それぞれは、図2Bに示す符号211〜219それぞれに対応する)。
【0100】
ステップ(b)において、コンピュータ(101)は、上位24ビット(L−N)のうちの複数個のビットを選択する(ステップ(b):225)際に、上位24ビット(L−N)の2つ以上の異なる位置から複数個のビットを選択し、又は、上位24ビット(L−N)のうちの全て異なる位置から複数個のビットを選択しうる。上記2つ以上の異なる位置から複数個のビットを選択する場合において、同一の位置にあるビットを複数回選択することを許容する。なお、上位24ビット(L−N)のうちの複数個のビットを選択する(ステップ(b):225)際に、上位24ビット(L−N)のうちの全て異なる位置から複数個のビットを選択する方が、上位24ビット(L−N)のうち同一の位置にあるビットを複数回選択することを許容した場合よりも、ハッシュ関数の一様分布性能が良くなり、例えばハッシュテーブルにキーを格納する場合に空間効率が良くなりうる。
【0101】
図2Dは、請求項4に係る発明の実施態様の例示であり、入力値(key)が32ビットであり(L=32)且つハッシュ値h(key)が8ビットである(N=8)場合において、所定位置からビットを選択し、ハッシュ値を生成するダイアグラム(231)を示す。コンピュータ(101)は、どのようにビットを下記ステップ(a)及びステップ(b)において選択するかを事前に例えば乱数列を用いて決定しておく(乱数列を使用する場合の例については下記図4に示す乱数列を参照)。
【0102】
図2Dは、図2Cと下記点以外は同じである(図2Dに示す符号231〜239それぞれは、図2Bに示す符号221〜229それぞれに対応する)。
【0103】
ステップ(d)において、ハッシュ値(233)の残りの7ビット全てのビットが割り当てられるまで、ステップ(a)、(b)及び(c)を繰り返す(ステップ(d):238)際に、コンピュータ(101)は、ステップ(b)の繰り返しを通じて、過去に一度選択された位置(先のステップ(b)で選択された位置)と異なる位置にあるビット(すなわち、まだ選択されていない位置にあるビット)を選択する。なお、ハッシュ値(233)の残りの7ビット全てのビットが割り当てられるまで、ステップ(a)、(b)及び(c)を繰り返す(ステップ(d):238)際に、過去に一度選択された位置と異なる位置にあるビットを選択する方が、過去に一度選択された位置と同じ位置にあるビットを選択するよりも、ハッシュ関数の一様分布性能が良くなり、例えばハッシュテーブルにキーを格納する場合に空間効率が良くなりうる。
【0104】
図2Eは、請求項5に係る発明の実施態様の例示であり、入力値(key)が32ビットであり(L=32)且つハッシュ値h(key)が8ビットである(N=8)場合において、所定位置からビットを選択し、ハッシュ値を生成するダイアグラム(241)を示す。コンピュータ(101)は、どのようにビットを下記ステップ(a)及びステップ(b)において選択するかを事前に例えば乱数列を用いて決定しておく(乱数列を使用する場合の例については下記図4に示す乱数列を参照)。
【0105】
コンピュータ(101)は、8ビットのハッシュ値(243)を生成する為に、入力値(242)の下位8ビット(N)(ハッシュ値のビット数と同じである)を使用するとする。
【0106】
コンピュータ(101)は、下位8ビットのうち或る所定位置にある1個のビットを選択する(ステップ(a):244)。図2Eでは、下位8ビット(1ビット目〜8ビット目)のうちの5ビット目(1)が選択されたことを示す。
【0107】
また、コンピュータ(101)は、ステップ(a)と並列して又はステップ(a)と前後して、上位24ビット(L−N)のうちの或る所定位置にある1又は複数個の異なる位置にあるビットを選択する(ステップ(b):245)。図2Eでは、上位24ビット(1ビット目〜24ビット目)のうちの16ビット目(1)、11ビット目(1)及び5ビット目(0)の3つが選択されたことを示す。
【0108】
コンピュータ(101)は、ステップ245で選択したビット1、1及び0、並びにステップ244で選択したビット1の排他的論理和を計算し、計算値1を求める(ステップ246)。
【0109】
コンピュータ(101)は、ステップ246で求めた計算値1をハッシュ値(243)の8ビットのうちの或る所定位置のビットへ割り当てる(ステップ(c):247)。図2Eでは、上記求めた計算値(1)が、ハッシュ値の8ビットの(1ビット目〜8ビット目)うちの4ビット目に格納されたことを示す(249を参照)。
【0110】
コンピュータ(101)は、ハッシュ値(243)の残りの7ビット全てのビットが割り当てられるまで、ステップ(a)、(b)及び(c)を繰り返す(ステップ(d):248)。但し、ステップ(a)において、下位8ビットのうち一度選択されたビットは以降の繰り返しのステップにおいて選択されない。また、ステップ(d)において、ハッシュ値(243)の残りの7ビット全てのビットが割り当てられるまで、ステップ(a)、(b)及び(c)を繰り返す(ステップ(d):248)際に、コンピュータ(101)は、ステップ(b)の繰り返しを通じて、過去に一度選択された位置(先のステップ(b)で選択された位置)と異なる位置にあるビット(すなわち、まだ選択されていない位置にあるビット)を選択する。
【0111】
また、コンピュータ(101)は、過去に一度選択された位置(先のステップ(b)で選択された位置)と異なる位置にあるビットを選択する際に、可能な限り、入力キーの上位L−Nビットを均等に分けた個数のビットを可能な限り選択する。ここで、均等に分けた個数とは、(L−N)がNで割り切れる場合には、(L−N)/N個でありうる。また、当該均等に分けた個数は、(L−N)がNで割り切れない場合には、[(L−N)/N]+1個又は[(L−N)/N]個である。ここで、[(L−N)/N]は(L−N)/N以下の最大の整数でありうる。
【0112】
図2Fは、請求項6に係る発明の実施態様の例示であり、入力値(key)が32ビットであり(L=32)且つハッシュ値h(key)が8ビットである(N=8)場合において、所定位置からビットを選択し、ハッシュ値を生成するダイアグラム(251)を示す。コンピュータ(101)は、どのようにビットを下記ステップ(a)及びステップ(b)において選択するかを事前に例えば乱数列を用いて決定しておく(乱数列を使用する場合の例については下記図4に示す乱数列を参照)。
【0113】
図2Fは、図2Eと下記点以外は同じである(図2Fに示す符号251〜259それぞれは、図2Eに示す符号241〜249それぞれに対応する)。
【0114】
ステップ(d)において、コンピュータ(101)は、過去に一度選択された位置(先のステップ(b)で選択された位置)と異なる位置にあるビットを選択する際に、入力キーの上位L−Nビットを均等に分けた個数のビットを選択する。ここで、均等に分けた個数とは、(L−N)がNで割り切れる場合において、(L−N)/N個であることをいう。図2Fでは、(L−N)=24がN=8で割り切れるので、均等に分けた個数は3である。
【0115】
図2Gは、請求項7に係る発明の実施態様の例示であり、入力値(key)が35ビットであり(L=35)且つハッシュ値h(key)が8ビットである(N=8)場合において、所定位置からビットを選択し、ハッシュ値を生成するダイアグラム(261)を示す。コンピュータ(101)は、どのようにビットを下記ステップ(a)及びステップ(b)において選択するかを事前に例えば乱数列を用いて決定しておく(乱数列を使用する場合の例については下記図4に示す乱数列を参照)。
【0116】
コンピュータ(101)は、8ビットのハッシュ値(263)を生成する為に、入力値(262)の下位8ビット(N)を使用するとする。
【0117】
コンピュータ(101)は、下位8ビットのうちの或る所定位置にある1個のビットを選択する(ステップ(a):264)。図2Gでは、下位8ビット(1ビット目〜8ビット目)のうちの5ビット目(1)が選択されたことを示す。
【0118】
また、コンピュータ(101)は、ステップ(a)と並列して又はステップ(a)と前後して、上位27ビット(L−N)のうちの或る所定位置にある1又は複数個の異なる位置にあるビットを選択する(ステップ(b):265)。図2Gでは、上位27ビット(1ビット目〜27ビット目)のうちの16ビット目(1)、11ビット目(1)及び5ビット目(0)の3つが選択されたことを示す。
【0119】
コンピュータ(101)は、ステップ265で選択したビット1、1及び0、並びにステップ264で選択したビット1の排他的論理和を計算し、計算値1を求める(ステップ266)。
【0120】
コンピュータ(101)は、ステップ266で求めた計算値1をハッシュ値(263)の8ビットのうちの或る所定位置のビットへ割り当てる(ステップ(c):267)。図2Gでは、上記求めた計算値(1)が、ハッシュ値の8ビットの(1ビット目〜8ビット目)うちの4ビット目に格納されたことを示す(269を参照)。
【0121】
コンピュータ(101)は、ハッシュ値(263)の残りの7ビット全てのビットが割り当てられるまで、ステップ(a)、(b)及び(c)を繰り返す(ステップ(d):268)。但し、ステップ(a)において、下位8ビットのうち一度選択されたビットは以降の繰り返しのステップにおいて選択されない。また、ステップ(d)において、ハッシュ値(263)の残りの7ビット全てのビットが割り当てられるまで、ステップ(a)、(b)及び(c)を繰り返す(ステップ(d):268)際に、コンピュータ(101)は、ステップ(b)の繰り返しを通じて、過去に一度選択された位置(先のステップ(b)で選択された位置)と異なる位置にあるビット(すなわち、まだ選択されていない位置にあるビット)を選択する。また、コンピュータ(101)は、過去に一度選択された位置(先のステップ(b)で選択された位置)と異なる位置にあるビットを選択する際に、L−NがNで割り切れないので、入力キーの上位L−Nビットのうちの[(L−N)/N]+1個又は[(L−N)/N]個のビットを選択する。ここで、[(L−N)/N]は(L−N)/N以下の最大の整数である。図2Gでは、(L−N)=27がN=8で割り切れないので、[(L−N)/N]+1=4個のビットを選択するのが3回であり、[(L−N)/N]=3個のビットを選択するのは5回としている。
【0122】
図3Aは、請求項8に係る発明の実施態様の例示であり、本発明の実施態様に従い生成されたハッシュ関数が、上位L−Nビットが同一であり且つ下位Nビットを全パターン網羅したキー(2個)を入力することに応じて、出力し得るハッシュ値の全て(2個)を出力するダイアグラムを示す。
【0123】
入力値(key)が32ビットであり(L=32)且つハッシュ値h(key)が8ビットである(N=8)とする。
【0124】
コンピュータ(101)は、上位L−Nビットが同一の2個のキー {2×a,2×a+1,2×a+2,... ,2×(a+1)−1} (aは非負整数である)の全要素が一度ずつ出現するキーの集合を入力値(301)として本発明の実施態様に従い生成されたハッシュ関数に入力する。当該ハッシュ関数は、0〜255の全ハッシュ値パターンが必ず1度ずつ出現するハッシュ値(302)を出力する。なお、上位L−Nビットが同一の2個の上記キーは任意の順序で入力されてもよい。
【0125】
このように、上位L−Nビットが同一の2個のキー {2×a,2×a+1,2×a+2,... ,2×(a+1)−1} (aは非負整数である)の全要素が一度ずつ出現するキーの集合を入力値(301)とすると、連続する2値の距離が最大で2−1になる。
【0126】
図3Bは、請求項9に係る発明の実施態様の例示であり、本発明の実施態様に従い生成されたハッシュ関数が、ランダム・キーを入力することに応じて、ハッシュ値(重複する可能性がある)を出力するダイアグラムを示す。
【0127】
入力値(key)が32ビットであり(L=32)且つハッシュ値h(key)が8ビットである(N=8)とする。
【0128】
コンピュータ(101)は、ランダム・キーを入力値(311)として本発明の実施態様に従い生成されたハッシュ関数に入力する。当該ハッシュ関数は、ハッシュ値(312)を出力する。当該ハッシュ値は、重複する可能性がある。ハッシュ値(312)において、ハッシュ値125及び129が重複している。なお、ランダム・キーは上位L−Nビットが同一でなくてもよい。
【0129】
図4は、本発明の実施態様に従い生成されうるハッシュ関数を作成する動作の一例を示す。
【0130】
ハッシュ関数が生成するハッシュ値をNビットとし、且つ、入力キーをLビットとする(N≦L)。
【0131】
図4の式401に示す条件を満たす乱数列posを用意する。一つの乱数列を作る動作は、ハッシュ関数を一つ生成するという動作に相当する。ここで、式401中、i, j は共にposの添え字であり、1≦ i, j ≦ L をとる任意の整数である。
【0132】
乱数列(411)は、L=32、N=8の場合に式401の条件を満たすように生成された乱数列の例である。乱数列(411)は、1から8(=N)までの値が一度出現する部分(421)と、9(=N+1)から32(=L)までの値が任意に出現する部分(422)を有する。
【0133】
コンピュータ(101)は例えば、入力値(key)kの下位ビットからpビット目を返す関数をb(k,p)とし、pに乱数列posを代入して、ハッシュ値の下位からrビット目h(k,r)を図4の431に示す排他的論理和の式に従って、計算しうる。乱数を生成した後は、ビットの選択方法は固定され、当該選択方法は変更されない。コンピュータ(101)は、ハッシュ値の生成において、上記固定されたビット選択方法に基づいて、選択したビットについて排他的論理和を計算する。
【0134】
排他的論理和の式(431)のL=32,N=8の時の具体例は例えば、図4の441に示す通りである。排他的論理和の式の具体例(441)は、部分(451)では、キーの下位8ビットから、重複がないようにランダムに選択すること、且つ、部分(452)では、キーの上位24ビットから、重複がないように又は重複があってもよいようにランダムに選択することを示す。排他的論理和の式(431)において、乱数列posを変更することによって、多数のハッシュ関数を生成することが可能であり、ハッシュ関数群を構成することができる。
【0135】
排他的論理和の式(461)は、排他的論理和の式の具体例(441)に、乱数列を具体的に代入した場合の式を示す。排他的論理和の式(461)において、部分(471)では、キーの下位8ビットから、重複がないようにランダムに選択されており、且つ、部分(472)では、キーの上位24ビットから、重複がないようにランダムに選択されている態様を示す。
【0136】
図5Aは、本発明の実施態様に従い、生成したハッシュ関数群をマルチレベル・ハッシュ・テーブル(MHT)で使用するダイアグラムを示す。
【0137】
図5Aに示す上記ダイアグラムを説明する前に、マルチレベル・ハッシュ・テーブル(MHT)の概念図を図5Bに示すダイアグラムに従って説明する。
【0138】
図5Bに示すように、MHTでは、N個の異なるハッシュテーブルT〜T(561,562,・・・,563)を用意する。また、ハッシュテーブルT〜T(561,562,・・・,563)はそれぞれ、6個の記憶容量を有しているとする。また、MHTでは、ハッシュテーブルT〜T(561,562,・・・,563)それぞれに、N個の異なるハッシュ関数h(key)〜h(key)(551,552,・・・,553)を用意する。このように、MHTでは、h(key)〜h(key)のようにテーブル数分の異なるハッシュ関数が必要である。
【0139】
コンピュータ(101)は、キー(追加したいデータである)のハッシュ値を上記異なるハッシュ関数を使用して計算して、ハッシュテーブルT〜T(561,562,・・・,563)のうちの空いているスロットの左端にキーを追加していく。すなわち、コンピュータ(101)は、キーの追加時には、ハッシュ関数が指す先の空きスロットのうち、最も左のハッシュテーブルのスロットにキーを追加する。ここでは、黒塗りされているスロットがキーの追加先である。
【0140】
また、コンピュータ(101)は、キーの検索時には、ハッシュ関数が指す先の全スロットから等しいキーを探す。
【0141】
MHTでは、ハッシュテーブルT(563)のハッシュテーブルにも空きがない場合には溢れるが、Nが十分に大きい場合には溢れたときにスロットの大部分が埋まっていることから、ハッシュテーブルの空間効率が良い。
【0142】
図5Aに戻ると、上段に示すハッシュ値の生成(501)は、図2Eに示すハッシュ値を生成するダイアグラム(241)と同じである。
【0143】
コンピュータ(101)は、ステップ(d)でハッシュ値のまだ割り当てられていないビットの全てが割り当てられるまでステップ(a)、(b)及び(c)を繰り返してハッシュ値(10101011)(511)を生成する。上記ステップ(a)及び(b)において、ビットの選び方をランダムに変更することで、異なるハッシュ関数を大量に生成することが可能である。
【0144】
そして、コンピュータ(101)は、ハッシュ関数が指す先の空きスロットのうち、最も左のハッシュテーブルにキーを追加する。図5Aでは、ハッシュテーブル(522)にキーを追加することを示す。
【0145】
このように、本発明の実施態様に従い生成されたハッシュ関数群をMHTにおいて使用することが可能である。
【0146】
図6は、本発明の実施態様に従い生成されたハッシュ関数群が、出力し得るハッシュ値の全て(2個)を出力するという性質を利用して、メモリ・ブロックをゼロクリアする際のメモリ・アドレスとしてそのハッシュ値を使用するダイアグラムを示す。
【0147】
図6の上段に示すダイアグラム(601)は、従来技術に従うゼロクリア回路を示す。ここで、メモリ・ブロック(611)の容量は256エントリとする。従来技術に従うゼロクリア回路では、メモリ・ブロック(611)のデータをゼロ(613)でリセットをする為に、リセット(614)信号に応じて通常動作時のアドレス(612)とリセット用のアドレス(0〜255を入力)の切り替えの為のマルチプレクサ(615)が必要である。すなわち、従来技術に従うゼロクリア回路では、リセットの為の追加の回路が必要である。
【0148】
図6の下段に示すダイアグラム(621)は、本発明の実施態様に従い生成されたハッシュ値を使用して、メモリ・ブロック(631)のデータをゼロでリセットをする一例を示す。本発明の実施態様に従い生成されたハッシュ値を使用して、メモリ・ブロック(631)のデータをゼロ(633)でリセットをする場合には、当該ハッシュ値(0〜255のハッシュ値)をそのまま、リセット動作時のメモリ・アドレスとして利用可能である(621)。これは、本発明の実施態様に従うと、生成したハッシュ関数群が、上位L−Nビットが同一であり且つ下位Nビットを全パターン網羅したキー(2個)を入力することに応じて、ランダムな順番ではありうるが、出力し得るハッシュ値の全て(2個)(0〜255)を出力する為である。従って、図6の上段(601)に示すマルチプレクサ(615)がゼロクリア回路において不要になる。すなわち、本発明の実施態様に従うと、リセットの為の追加の回路が不要になる。なお、下段に示すダイアグラム(621)では、上位L−Nビットが同一であり且つ下位Nビットを全パターン網羅したキーが入力される限りにおいて、キーの入力順序は問わず、さらには0〜255の範囲である必要もない。
【0149】
図7は、本発明の実施態様に従い、ハッシュテーブルをFPGA内のメモリ・ブロック上に用意するダイアグラムを示す。
【0150】
コンピュータ(101)は、本発明の実施態様に従い、ハッシュテーブルをFPGA内のメモリ・ブロック(701)上に用意する。例えば、Altera Strarix(登録商標) IVデバイスのM9Kブロックである。M9Kブロックについては、下記URL<http://www.altera.com/literature/hb/stratix-iv/stx4_siv51003.pdf>に記載の「3. TriMatrix Embedded Memory Blocks in Stratix IV Devices」を参照されたい(非特許文献4)。
【0151】
そして、コンピュータ(101)は、メモリ・ブロック(701)上の、ハッシュ関数(702)が指す先の空きメモリ・ブロックにキーを追加する。
【0152】
このように、MHTをFPGA上に実装して、FPGA上の基本的演算機能によって、本発明の実施態様に従い生成されたハッシュ関数群を使用することが可能である。また、本発明の実施態様に従うことで、排他的論理和によってハッシュ値が計算できることから、1クロック内にハッシュ値の計算を完了することが可能になる。また、ハッシュテーブルをFPGA内のメモリ・ブロックに構築することによって、1クロックでハッシュテーブルからのデータ検索が可能になるため、FPGAの計算性能を最大限に発揮することが可能になる。
【0153】
図8A及び図8Bは、本発明の実施態様に従い、生成したハッシュ関数を用いて、入力されたキーのハッシュ値の一つを計算する処理のフローチャートを示す。ここで、或る所定位置とは事前に決定されており、入力キーからどのビットを選択して、排他的論理和を計算するかを決定する。或る所定位置を決定することは、ハッシュ関数を1つ生成することに対応する。なお、以下では、Lビットの入力キーから、Nビットのハッシュ値を生成する場合(N≦L)を示す。
【0154】
図8Aに示すフローチャートは、請求項1に記載の処理に対応する。
【0155】
ステップ801において、コンピュータ(101)は、ハッシュ値を計算する処理を開始する。
【0156】
ステップ802において、コンピュータ(101)は、変数iに1を代入する。ここで、1≦i≦Nである。
【0157】
ステップ804において、コンピュータ(101)は、入力キーの下位Nビットのうちの未選択である所定位置にある1個のビットを選択する。未選択であるビットとは、1≦i≦Nを通して、一度も選択されていないビットのことである。
【0158】
ステップ806において、コンピュータ(101)は、ステップ804で選択した1個のビットを、ハッシュ値のNビットのうちの或る所定位置(すなわち、ハッシュ値のiビット目でなくともよい)へ割り当てる。
【0159】
ステップ807において、コンピュータ(101)は、変数iにi+1を代入し、iをインクリメントする。なお、コンピュータ(101)は、iの値を過去のiと重複しないようにランダムな値になるようにしうる。例えば、ステップ807について、変数iにi+1を代入し、iをインクリメントするループ処理の代わりに、まだiに代入していない1以上N以下の値があるかを判断する判断処理に変更しうる。
【0160】
ステップ808において、コンピュータ(101)は、i≦Nであるかを判断する。コンピュータ(101)は、i≦Nであることに応じて、処理をステップ804に戻す。一方、コンピュータ(101)は、i≦Nでないこと(すなわち、N<iであること)に応じて、処理を終了ステップ809に進める。なお、ステップ804において、下位Nビットのうち一度選択されたビットは以降の繰り返しのステップにおいて選択されない。
【0161】
ステップ809において、コンピュータ(101)は、ハッシュ値を計算する処理を終了する。コンピュータ(101)は、図8Aに示すフローチャートの或る所定位置を変更することによって、複数のハッシュ関数が集まったハッシュ関数群を生成することができる。
【0162】
図8Bに示すフローチャートは、請求項2に記載の処理に対応する。
【0163】
ステップ811において、コンピュータ(101)は、ハッシュ値を計算する処理を開始する。
【0164】
ステップ812において、コンピュータ(101)は、変数iに1を代入する。ここで、1≦i≦Nである。
【0165】
ステップ813において、コンピュータ(101)は、メモリ内に空の記憶領域を用意する。
【0166】
ステップ814において、コンピュータ(101)は、入力キーの下位Nビットのうちの未選択である所定位置にある1個のビットを選択する。未選択であるビットとは、1≦i≦Nを通して、一度も記憶領域に追加していないビットのことである。そして、コンピュータ(101)は、当該選択した1個のビットを上記記憶領域に追加する。なお、排他的論理和は計算順序が変わってもその計算値は同じであるので、記憶領域への選択したビットの格納の順序は任意である。
【0167】
ステップ815において、コンピュータ(101)は、上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択する。コンピュータ(101)は、任意の個数の複数個のビットを選択してもよく、又は、1≦i≦Nを通して、未選択のビットから(出来るだけ)均等に分けた個数のビットを選択してもよい。未選択のビットから(出来るだけ)均等に分けた個数のビットを選択することによって、一様分布性能の良いハッシュ関数を得ることが可能である。
【0168】
未選択のビットから(出来るだけ)均等に分けた個数のビットを選択する場合において、(L−N)がNで割り切れる場合には、当該均等に分けた個数は(L−N)/N個である。
【0169】
また、均等に分けた個数のビットを選択する場合において、(L−N)がNで割り切れない場合には、当該均等に分けた個数は、[(L−N)/N]+1個又は[(L−N)/N]個である。ここで、[(L−N)/N]は(L−N)/N以下の最大の整数である。コンピュータ(101)は例えば、i=Nのときの選択が終わったときに、上記入力キーの上位L−Nビットの全てのビットが一度ずつ選択するようにしうる。
【0170】
また、コンピュータ(101)は、複数個のビットを選択する場合に、(1)上記入力キーの上位L−Nビットのうちの少なくとも1つが異なる位置から複数個のビットを選択する(言い換えれば、上記入力キーの上位L−Nビットのうちの2つ以上の異なる位置からビットを選択する)か、又は、(2)上記入力キーの上位L−Nビットのうちの全て異なる位置から複数個のビットを選択しうる。
【0171】
なお、コンピュータ(101)は、ステップ814とステップ815とを並列して実行し、ステップ814をステップ815よりも先に実行し、又はステップ815をステップ814よりも先に実行してもよい。
【0172】
ステップ816において、コンピュータ(101)は、上記記憶領域内の全ビットの排他的論理和の計算値を求め(すなわち、ステップ814で選択した1個のビットと、ステップ815で選択した1又は複数個のビットとについて、全ビットの排他的論理和の計算値を求め)、当該計算値をハッシュ値のNビットのうちの或る所定位置(すなわち、ハッシュ値のiビット目でなくともよい)へ割り当てる。コンピュータ(101)は例えば、ステップ815で2ビット以上を選択した場合には、ステップ814で選択した1個のビットと、ステップ815で選択した2ビット以上とを合わせて、3ビット以上の排他的論理和の計算値を求める。その結果、1ビットの計算値が得られる。
【0173】
ステップ817において、コンピュータ(101)は、変数iにi+1を代入し、変数iをインクリメントする。なお、コンピュータ(101)は、iの値を過去のiと重複しないようにランダムな値になるようにしうる。例えば、ステップ807について、変数iにi+1を代入し、iをインクリメントするループ処理の代わりに、まだiに代入していない1以上N以下の値があるかを判断する判断処理に変更しうる。
【0174】
ステップ818において、コンピュータ(101)は、i≦Nであるかを判断する。コンピュータ(101)は、i≦Nであることに応じて、処理をステップ813に戻す。一方、コンピュータ(101)は、i≦Nでないこと(すなわち、N<iであること)に応じて、処理を終了ステップ819に進める。なお、ステップ814において、下位Nビットのうち一度選択されたビットは以降の繰り返しのステップにおいて選択されない。
【0175】
ステップ819において、コンピュータ(101)は、ハッシュ値を計算する処理を終了する。コンピュータ(101)は、図8Bに示すフローチャートの或る所定位置を変更することによって、複数のハッシュ関数が集まったハッシュ関数群を生成することができる。
【0176】
図9は、本発明の実施態様に従い生成されるハッシュ関数に基づいて、ハッシュテーブル内のデータへのアクセスに利用するダイアグラムを示す。
【0177】
ステップ901において、コンピュータ(101)は、ハッシュテーブル内のデータへのアクセス処理を開始する。なお、ハッシュ値を生成するコンピュータとハッシュ値を利用する(例えば、ハッシュテーブルへのアクセスを行う)コンピュータとは、同じコンピュータであってもよく又は異なるコンピュータであってもよい。
【0178】
ステップ902において、コンピュータ(101)は、図8A又は図8Bに示すフローチャートに従ってハッシュ値を生成する。
【0179】
ステップ903において、コンピュータ(101)は、ステップ902で生成したハッシュ値に基づいて、データが格納されていると予期されるスロットにアクセスする。当該データは、ビット列で表現できるものであれば、その内容は制限されない。
【0180】
ステップ904において、コンピュータ(101)は、ハッシュテーブル内のデータへのアクセス処理を終了する。
【0181】
図10は、図1A又は図1Bに従うハードウェア構成を好ましくは備えており、図8A図8Bそれぞれに示すフローチャートに従って本発明の実施態様を実施するコンピュータの機能ブロック図の一例を示す図である。
【0182】
コンピュータ(1001)は例えば、図1Aに示すコンピュータ(101)に示されている構成、例えばCPU(102)、メイン・メモリ(103)、記憶装置(108)、及びディスク(108)を備えている。
【0183】
コンピュータ(1001)は、ビット選択手段(1011)及びビット割当手段(1012)を備えている。なお、以下では、Lビットの入力キーから、Nビットのハッシュ値を生成する場合(N≦L)を示す。
【0184】
ビット選択手段(1011)は、入力キーの下位Nビットのうちの或る所定位置にある1個のビットを選択する。そして、ビット割当手段(1012)は、ビット選択手段(1011)によって選択された上記1個のビットを、上記ハッシュ値のNビットのうちの或る所定位置のビットへ割り当てる。
【0185】
ビット選択手段(1011)はさらに、上記入力キーの上位L−Nビットのうちの或る所定位置にある1又は複数個のビットを選択する。そして、ビット割当手段(1012)は、下位Nビットから選択された1個のビットと、上位L−Nビットから選択された1又は複数個のビットとについて、全ビットの排他的論理和の計算値を求め、当該計算値をハッシュ値のNビットのうちの或る所定位置のビットとして割り当てる。
【0186】
ビット選択手段(1011)は、図8Aに記載のステップ802〜804及び807〜808、並びに、図8Bに記載のステップ812〜815及び817〜818を実行しうる。
【0187】
ビット割当手段(1012)は、図8Aに記載のステップ806、及び図8Bに記載のステップ816を実行しうる。
【0188】
図11は、本発明の実施態様に従い、生成したハッシュ関数群をマルチレベル・ハッシュ・テーブル(MHT)で使用し、キーを追加していった場合の使用されたメモリ・ブロック数の変化を示す。
【0189】
グラフ(1101)は、本発明に従うハッシュ関数(1102)及び従来技術であるユニバーサル・ハッシング(1103)それぞれにおいて、追加したデータ個数(2a(aは非負整数)から始まる32ビット連続整数をキーとした場合のキー追加個数)に対するメモリ・ブロック使用量変化を示す(入力キーL=32ビット,ハッシュ値N=8ビット)。なお、使用されたメモリ・ブロック数が少ないほどメモリ効率の観点から性能が良いことを示す。
【0190】
グラフ(1111)は、本発明に従うハッシュ関数(1112)及び従来技術であるユニバーサル・ハッシング(1113)それぞれにおいて、追加したデータ個数(32ビットランダム整数をキーとした場合のキー追加個数)に対するメモリ・ブロック使用量変化を示す(入力キーL=32ビット,ハッシュ値N=8ビット)。
【0191】
グラフ(1101)に示されているように、本発明に従うハッシュ関数(1102)では、追加したデータ(2a(aは非負整数)から始まる32ビット連続整数をキーとした場合)において、常に全てのスロットを埋めることができた。すなわち、本発明に従い生成されたハッシュ関数群をMHTに利用し、入力キーが2a(aは非負整数)から始まる32ビット連続整数がキーである場合には、メモリ使用効率は100%に達した。すなわち、MHTが溢れたときに、全てのスロットが埋まっている。これは、本発明の実施対象に従うハッシュ関数群が、上位L−Nビットが同一であり且つ下位Nビットを全パターン網羅したキー(2個)を入力することに応じて、出力し得るハッシュ値の全て(2個)を出力するため、全てのスロットにデータが格納されることによる。また、本発明に従うハッシュ関数(1102)では従来技術であるユニバーサル・ハッシングよりも、計算を容易にしつつ、常に良好な性能を実現した。
【0192】
グラフ(1111)に示されているように、本発明に従うハッシュ関数(1112)では、追加したデータ(32ビットランダム整数をキーとした場合)において、計算を容易にしつつ、従来技術であるユニバーサル・ハッシング(1113)と同等の性能を実現することができた。使用効率は、ランダム・キーの場合に、実験的に全ブロック容量の99.52%に達した。
図1A
図1B
図2A
図2B
図2C
図2D
図2E
図2F
図2G
図3A
図3B
図4
図5A
図5B
図6
図7
図8A
図8B
図9
図10
図11