こんにちは、Javaでカウントブルームフィルタを開発しようとしています。私は花のフィルターについてのほとんどの情報源を実際に検索しました。私が理解していることは、特定の文字列や単語をハッシュ(ハッシュ)すると、ハッシュの結果がその結果の値に内容を格納できるように場所。 しかし、私の大きな疑問は、ハッシング(アルゴリズム)のやり方です。特定の文字列や単語をハッシュすると実際に何が起こりますか?特定の文字列や単語をハッシュしたときに実際に何が起きているのかを教えてください(特定の文字列や単語をハッシュしたときの最終的な値の到着方法など)。私はまた、衝突の可能性もあることを読む。また、結果として得られるハッシュ値がユニークでない理由(さまざまな入力に対して同じハッシュ値が返される理由)を対処できますか?そして、私は本当にハッシュを行うためのコードを書く必要がありますか、ハッシュを行うためにjavaにinbuilt関数がありますか?特定の文字列や単語をハッシュするときに実際に何が起こるか(実際のプロセス)
答えて
任意のオブジェクトでhashCode()
を呼び出すだけで、簡単にハッシュコードを取得できます。 javadocからクラスString
ため特に:
公共int型のhashCode()
は、この文字列のハッシュコードを返します。文字列オブジェクトのハッシュコード は、
[0] * 31 ^(n-1)+ s [1] * 31 ^(n-2)+ ... + s [n-1]として計算されます。 ]
int arithmeticを使用します。s [i]は文字列のi番目の文字、n は文字列の長さ、^はべき乗を示します。 (空の文字列のハッシュ 値はゼロである。)
String
ために実行されるコードはこの1つである:従って
public int hashCode() {
int h = hash;
int len = count;
if (h == 0 && len > 0) {
int off = offset;
char val[] = value;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
ハッシュ関数(全単射ではない)であり、異なる入力することができ同じ結果が得られます。これは、関数通常セットI
がO
よりもはるかに大きいまたは複雑です
H: I -> O
である「ハッシュ」
ハッシュ関数の基本です。ハッシュテーブルI
では、あなたの要素のクラスは、O
は正の整数のセットです。特に、ブルームフィルタでは、n
異なる機能を持っています。ハッシュ関数を開発するには、類似のオブジェクトの異なる特性を抽出する必要があります。例えば、文字列のためにあなたが持つことができます。
- 長
- 最初の文字
- 特定の文字
- 多項式
h(S) = sum (s(i)*31^i) mod d
複数のハッシュを使用する場合は、特性の衝突を避ける必要があります。たとえば、number of voyels
とnumber of non-voyels
を使用すると、実際には役に立ちません。ハッシュ関数にはいくつかの特徴は、Javaは、あなたが行っている場合は、あなたのクラスは、ハッシュアルゴリズム
public class Employee {
// Default implementation might want to use "name" for as part of hashCode
private String name;
@Override
public int hashCode() {
// We know that ID is always unique, so don't use name in calculating
// the hash code. & hashCode() is an int
return id;
}
}
*を(使用するためのhashCode()メソッドをオーバーライドすることができますwikipedia entry
を見て、そこに持っている必要がありますhashCodeをオーバーライドするにはequalsもオーバーライドする必要があります)。
ハッシュコードは、コレクションに格納されたオブジェクトごとに計算されます。 標準アルゴリズムを使用して計算されます。 実際には、オブジェクト単位でhashcodeメソッドをオーバーライドできます。 ハッシュコードメソッドを実装する方法の1つはHashcodeBuilderを使用しています。
これが役に立ちます。この記事に関連したスタックオーバーフローの詳細を検索すると、より説明的な回答が得られます。
- 1. lwzでは実際に何が起こっていますか?
- 2. Android、強制終了後に実際に何が起こるのですか?
- 3. mysqlの実際のエスケープ文字列エラー
- 4. 実際にアサーションやNSAssertとは何が良いですか?
- 5. グレープ特定の文字/単語から特定の文字/単語を特定の文字/単語に読み取る
- 6. 文字列内の実際の%での文字列補間
- 7. iOSアプリのアップデート中に実際に何が起こっていますか?
- 8. 文字列から特定の単語を削除する
- 9. Ruby - ハッシュ形式の配列を実際のハッシュに変換する
- 10. smlで文字列を実際に変換する
- 11. JSON文字列を実際のオブジェクト定義にバインドする方法は?
- 12. EventMachineスレッドとRubyスレッド - 実際に何が起こっていますか?
- 13. 偽の起床は実際に起こりますか?
- 14. 文字列形式の配列を実際の配列に変換する
- 15. MacVimの起動が実際に遅い
- 16. Linuxカーネルで実際のGRAND祖先プロセスとは何ですか?
- 17. 実際に見ることができる文字列の文字だけをどのように反復するのですか?
- 18. 実際にDOMStringとは何ですか?
- 19. 実際にreduxとは何ですか?
- 20. ChannelFutureが実際に完了したことは何ですか?
- 21. iPhoneのobjective-c:「実際の」単語を検出する
- 22. PHPプロセスの実効ユーザーIDと実際のユーザーIDは何ですか?
- 23. PHP:文字列を実際の値に変更
- 24. 文字列内の大文字の単語を特定して取得する
- 25. Test :: Unitテストが実行されたときに実際に何が起こるかを確認するにはどうすればよいですか?
- 26. スレッドのアフィニティマスクを設定すると、実際のパフォーマンスが向上しますか?実際には、被験者は
- 27. 誰かが実際の言語でクロージャーを定義することはできますか?
- 28. 充電器を携帯電話に接続すると実際に何が起こりますか?
- 29. は私の実際の割り当ては、この文字列に
- 30. 文字列から特定の単語を取り除く
質問をする前に少し勉強してください。http://en.wikipedia.org/wiki/Hash_function –
ブルームファイターでは、複数のハッシュが必要です。 – UmNyobe