質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

Q&A

解決済

1回答

1811閲覧

murmurhash3関数の引数を教えてください。

TKZ28

総合スコア5

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

0グッド

0クリップ

投稿2020/02/07 00:50

現在作成しているbloomfilterのプログラムでmurmurhash3を使用したいと考えているのですが、関数の引数のkey以外の意味が理解することが出来ず困っています。

Wikipediaやgithubなどで説明を探したのですが引数につい理解することができませんでした.

関数の引数がどういったもなのか教えてください。
また、murmurhashについての説明のある論文など教えていただけると幸いです。

以下が現在参考にしているプログラムになります.
uint32_t murmur3_32(const uint8_t* key, size_t len, uint32_t seed)
{
uint32_t h = seed;
uint32_t k;
/* Read in groups of 4. /
for (size_t i = len >>2; i; i--) {
// Here is a source of differing results across endiannesses.
// A swap here has no effects on hash properties though.
k = ((uint32_t)key);
key += sizeof(uint32_t);
h ^= murmur_32_scramble(k);
h = (h <<13) | (h >>19);
h = h * 5 + 0xe6546b64;
}
/
Read the rest. /
k = 0;
for (size_t i = len &3; i; i--) {
k <<= 8;
k |= key[i - 1];
}
// A swap is not necessary here because the preceeding loop already
// places the low bytes in the low places according to whatever endianness
// we use. Swaps only apply when the memory is copied in a chunk.
h ^= murmur_32_scramble(k);
/
Finalize. */
h ^= len;
h ^= h >>16;
h *= 0x85ebca6b;
h ^= h >>13;
h *= 0xc2b2ae35;
h ^= h >>16;
return h;
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

外部からの入力に基づいてデータ構造を構築する場合、そしてそのデータ構造にハッシュ値を用いる場合には意図的にハッシュ値が衝突するような入力が与えられると著しく性能が下がってしまいます。 そのような攻撃に対する対策として一部の処理をランダム化するという方法があります。

シード値としてランダムな値を与えることでそれを実現するということを意図しているようです。 (もちろんひとつのデータ構造に対しては一貫した値を使う必要があります。) ただし、 MurmurHash ではシードをランダム化しても攻撃を引き起こせる可能性があるとのことです。

シード値は計算の初期値であるに過ぎず、それ自体は何でも良いようなので、攻撃に晒される可能性がないなら決め打ちの適当な値で良いんじゃないでしょうか。

追記

key 以外の引数がわからないというのは len もわからないということでしょうか。

lenkey が指すデータの長さを表しています。

投稿2020/02/07 01:35

編集2020/02/07 03:49
SaitoAtsushi

総合スコア5684

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TKZ28

2020/02/07 04:00

回答ありがとうございます。 大変わかりやすい説明で助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問