英語版
このページの英語版を見る
std.digest.murmurhash
任意のデータの
を計算する。MurmurHashは非暗号化ハッシュ関数である。
一般的なハッシュベースの検索に適している。x86用に最適化されているが、すべてのアーキテクチャで使用できる。
すべてのアーキテクチャで使用できる。
現在のバージョンはMurmurHash3で、32ビットまたは128ビットのハッシュ値が得られる。
旧バージョンのMurmurHash1と2は現在サポートされていない。
MurmurHash3には3つのフレーバーがあり、スループットの高い順に並んでいる:
- MurmurHash3!32 32ビット値を生成し、32ビット・アーキテクチャに最適化されている。
- MurmurHash3!(128, 32) 128ビット値を生成し、32ビット・アーキテクチャに最適化されている。
- MurmurHash3!(128, 64) 128ビット値を生成し、64ビット・アーキテクチャに最適化されている。
注釈
- MurmurHash3!(128, 32) と は異なる値を生成する。MurmurHash3!(128, 64)
- 現在の実装はリトルエンディアン・アーキテクチャに最適化されている。 ビッグエンディアン・アーキテクチャでは異なる結果となり、分布も若干一様でなくなる。 一様でない分布を示すだろう。
License:
Authors:
Guillaume Chatelet
Examples:
// MurmurHash3!32、MurmurHash3!(128, 32)、MurmurHash3!(128, 64)は // std.digest Template APIを実装している。 static assert(isDigest!(MurmurHash3!32)); // 便利なダイジェストテンプレートにより、あらゆるデータを素早くハッシュ化できる。 ubyte[4] hashed = digest!(MurmurHash3!32)([1, 2, 3, 4]); writeln(hashed); // [0, 173, 69, 68]
Examples:
// ハッシュ関数をインスタンス化して'put'メソッドを呼び出すことで、ubyteデータを // 分割してハッシュ化することもできる。 const(ubyte)[] data1 = [1, 2, 3]; const(ubyte)[] data2 = [4, 5, 6, 7]; // 入力データは、要素ごとにバッファリングされ、ハッシュ化される。 MurmurHash3!32 hasher; hasher.put(data1); hasher.put(data2); // 'finish'の呼び出しにより、次のことが保証される: // - 残りのビットが処理される // - ハッシュが確定する auto hashed = hasher.finish(); writeln(hashed); // [181, 151, 88, 252]
Examples:
// `putElements`、`putRemainder`、`finalize`を使用すると、 // アルゴリズムのどの部分を実行するかを完全に制御できる。 // これにより、最大の処理能力を発揮できるが、細心の注意が必要である。 // データ型はハッシュの要素型と同じでなければならない: // - MurmurHash3!32用のuint // - MurmurHash3!(128, 32)用のuint[4] // - MurmurHash3!(128, 64)用のulong[2] const(uint)[] data = [1, 2, 3, 4]; // hasherは'Fast'で始まることに注意。 MurmurHash3!32 hasher; // 必要なだけ要素の配列をプッシュする。呼び出し回数は少ないほど良い。 hasher.putElements(data); // 必要に応じて残りのバイトを入れる。このメソッドは1回しか呼び出せない。 hasher.putRemainder(ubyte(1), ubyte(1), ubyte(1)); // ハッシュにデータ長を組み込むためにfinalizeを呼び出す。 hasher.finalize(); // 最後にハッシュ値を取得する。 auto hashed = hasher.getBytes(); writeln(hashed); // [188, 165, 108, 2]
- struct
MurmurHash3
(uint size, uint opt = size_t.sizeof == 8 ? 64 : 32); - MurmurHash3 関数を実装する。ハッシュのsize をビット単位で指定できる。 ハッシュのビット数を指定できる。128 ビットのハッシュの場合、32 ビットと 64 ビットのどちらのアーキテクチャに最適化するかを指定できる。 または64ビットアーキテクチャに最適化するかを指定できる。opt の値を指定しないと、ホストプラットフォームの最速バージョンが選択される。 ホスト・プラットフォームの最速バージョンを選択する。このハッシャーはDigest API と互換性がある:
- void start()
- void put(scope const(ubyte)[] data...)
- ubyte[Element.sizeof] finish()
- void putElements(scope const(Element[]) elements...)
- void putRemainder(scope const(ubyte[]) data...)
- void finalize()
- Element get()
- ubyte[Element.sizeof] getBytes()
Examples:便利なダイジェスト・テンプレートにより、どんなデータでも素早くハッシュ化できる。ubyte[4] hashed = digest!(MurmurHash3!32)([1, 2, 3, 4]); writeln(hashed); // [0, 173, 69, 68]
Examples:ハッシャーをインスタンス化して「put」メソッドを呼び出せば、ubyteデータを分割してハッシュすることもできる。 メソッドを呼び出す。const(ubyte)[] data1 = [1, 2, 3]; const(ubyte)[] data2 = [4, 5, 6, 7]; // 入力データは、要素ごとにバッファリングされ、ハッシュ化される。 MurmurHash3!32 hasher; hasher.put(data1); hasher.put(data2); // 'finish'の呼び出しにより、次のことが保証される: // - 残りのビットが処理される // - ハッシュが確定する auto hashed = hasher.finish(); writeln(hashed); // [181, 151, 88, 252]
- alias
Element
= uint; - 32ビット実装のエレメント型。
- pure nothrow @nogc void
putElement
(uintblock
); - element_count を増やすことなく、1つのエレメントを追加する。 を呼び出すたびに、element_count をElement.sizeof だけ増やすようにする。
putElement
. - pure nothrow @nogc void
putRemainder
(scope const(ubyte[])data
...); - 余りのバイトを入れる。これはputElement の後、finalize の前に一度だけ呼び出されなければならない。
- pure nothrow @nogc void
finalize
(); - element_count を組み込み、ハッシュを確定する。
- pure nothrow @nogc Element
get
(); - ハッシュをuint値として返す。
- pure nothrow @nogc ubyte[4]
getBytes
(); - 現在のハッシュ値をubyte配列として返す。
- pure nothrow @nogc void
putElements
(scope const(Element[])elements
...); - 要素の配列を一度にプッシュする。1回の呼び出しでできるだけ多くのデータをプッシュする方が効率的である。 アンアラインドリードをサポートしないプラットフォーム(MIPSや古いARMチップ)では、コンパイラは正しさを保証するために遅いコードを生成するかもしれない。
- pure nothrow void
put
(scope const(ubyte)[]data
...); - 消化器にデータを追加する。この関数はstartの後、finishの前に連続して何度も呼び出すことができる。 この関数は、startの後、finishの前に連続して何度も呼び出すことができる。
- pure nothrow ubyte[Element.sizeof]
finish
(); - ハッシュの計算を終了し、計算された値を返す。 注釈:」である。
finish
は一度しか呼び出すことができない。 put 。
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku