問題タブ [hash-code-uniqueness]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
725 参照

scrapy - スクレイピー イメージ ダウンロードでイメージ ファイル名の重複を処理する方法

Scrapy は sha1 を使用してランダムな画像ファイル名を生成します。重複が発生すると、ファイルが上書きされ、既存のイメージ ファイルが失われます。重複を処理するために追加のコード (例: オーバーライド クラス) を書くことは可能ですか? たとえば、重複が見つからなくなるまで、新しいランダムなファイル名を生成し続けますか? はいの場合、コード例を提供してください。

--- 古い質問: images_store フォルダーの下にあるすべての画像ファイルのファイル名が一意であることを確認しますか? Scrapy は、画像のダウンロード中に sha1 を使用してランダムなファイル名を生成します。Sha1 は優れたレベルの一意性を提供しますが、確率によって重複の可能性があります。

0 投票する
1 に答える
881 参照

java - Javaで良いhashCode関数を実装していますか?

私は今、Apache commons langのHashCodeBuilderのような組み込みユーティリティを利用できることを知っていますが、自分でそれを実装する方法を理解しようとしていて、http://en.wikipedia.org/wiki/Java_hashCodeでEmployeeクラスのhascode関数の例に出くわしました()

Googleのどこでも、ゼロ以外の値に奇数の素数を掛けてからインスタンス変数と合計するなど、同じ種類の手法が提案されています(インスタンス変数に対して実行します)。

質問:-

1) 一意であるため、employeeId を hascode として返すことができないのはなぜですか。シンプルで、hascode の目的を果たします。ユニークでない場合は、おそらくそのようなテクニックが必要です。そうですか?

2)従業員IDが一意ではない場合でも、奇数の素数を掛けることが提案されているのはなぜですか? なぜいまいましい整数を取ることが良いと見なされないのですか?

アップデート:-

ピーター私はあなたがそれが印刷されたと述べた例を実行しました

[0, 32, 64, 96, 128, 160, 192, 224, 288, 256, 352, 320, 384]

[0, 32, 64, 96, 128, 160, 192, 224, 288, 256, 352, 320, 384]

私はあなたがあなたの答えで述べたように概念を理解することを期待していたように、今のところその出力を想定しています

[373, 343, 305, 275, 239, 205, 171, 137, 102, 68, 34, 0]

[0, 34, 68, 102, 137, 171, 205, 239, 275, 305, 343, 373]

コメントで示唆したように、この例では、一意のハッシュコードでも同じバケットになる可能性があることを示しました。この例は、この動作をどのように示しましたか? integers の場合は 373 で、integers2 の場合は 0 が同じバケットになるということですか?

この例で素数はどの程度役に立ち、34 は役に立たなかったのでしょうか?

0 投票する
2 に答える
3440 参照

c# - .Net C# String.GetHashCode() の代替

多くの文字列データ (csv ファイル) の比較に問題があります。これらのファイルには uniqueID がありますが、ソートされておらず、非常に大きいです。

そこで、キーがファイルの uniqueID で、値が int で、変更に関心のある文字列の GetHashCode() を返す 2 つの辞書を作成しようとしました。

しかし、短い例:

それを行う方法は他にありますか?

フットプリントをできるだけ小さくする必要があります (約 3M 行を含む 2 つの csv ファイルの 2 つの辞書のメモリ割り当てのため) ありがとうございます

0 投票する
1 に答える
351 参照

hash - 互いに直交するハッシュ関数はどれですか?

マルチレベルのデータ整合性チェックと修正に興味があります。複数のエラー訂正コードが使用されている場合 (同じタイプのコードが 2 つある場合もあります)。使用されている2つのハッシュコードが互いに直交している場合、2つのコードを使用するシステムが最大の効果を発揮するという印象を受けています。

どのコードが何と直交しているかのリストはありますか? または、同じハッシュ関数を使用する必要がありますが、パラメーターまたは使用方法が異なりますか?

最初のレベルの ecc はリード ソロモン コードになると思いますが、実際にはこの最初の関数を制御することはできません。そのため、機能が向上した単一のコードを使用することはできません。

暗号化のセキュリティには関心がないことに注意してください。

編集:これはの複製ではありません

0 投票する
3 に答える
2138 参照

java - すでに一意の整数でハッシュコードを生成する

簡単な質問です。私はオブジェクトを持っています:

int id誰が等しいかは(データベース ID) に基づいて決定されます。

Netbeans はこのメソッドを自動生成しましたhashCode():

問題は、(すでに) unique を返すだけでこれに利点はありますint idか?

どちらにしても衝突はありえません。

右?

0 投票する
5 に答える
1029 参照

java - Javaでhashcode()が同じ値に解決されないようにする方法は?

クラスのハッシュコードの実装があり、ハッシュコードの実装はEclipseが生成するものと一致しており、ここで説明されている最も一般的に受け入れられているプラ​​クティスとも一致しています

これが私のハッシュコードの実装です(このメソッドで使用されるすべてのIDがオブジェクトのキーを構成します):

非常に大規模なデータ セットをテストしていて、コレクションにこのクラスのオブジェクトの期待数がないというシナリオに遭遇しました。よく見ると、以下の 2 つのデータ セットは同じハッシュコード : 50268236873 になり、ハッシュコードが同じであるため、レコードはコレクションに追加された最後のレコードに置き換えられました。

したがって、質問:

1] これは、2 つの異なるオブジェクトのハッシュ コードが同じ値を持つ明確なケースです。では、これがどのデータセットでも起こらないようにする方法は? 素数は大きい方がいいですか?

2] 実装の hashCode 変数をよく見ると、最大値が 2^31 - 1 = 2147483647 である int データ型であり、上記のデータ セットに対して計算されるハッシュコード = 50268236873 よりも大きいため、オーバーフローが発生します。 . hashCode 値の型として long を使用する結果はありますか?

ありがとう
Nohsib

編集 :

私はHashSetを使用しており、投稿された回答を読んだ後、以下のようにequalsの実装を調べました.equalsでは、2つのオブジェクトのhashCodesが同じかどうかを確認し、それを使用してそれらが同じかどうかを判断するためだと思います.同じオブジェクトがこの問題を引き起こしています。

これを確認できる人はいますか?

解決策 : hashCode を使用して 2 つのオブジェクトが等しいかどうかを判断したため、equals メソッドの実装が間違っていました。equals メソッドの実装を修正すると、ハッシュセットが既存のレコードを置き換えていたという問題が解決しました。

0 投票する
1 に答える
5639 参照

hash - CRC-32 ハッシュの一意性は、ファイル名を含む文字列を一意に識別するのに十分ですか?

文字列に連結されたファイル名のリストを並べ替えましたが、一意のチェックサムによってそのような文字列をそれぞれ識別したいと考えています。

これらの文字列のサイズは、最小 100 バイト、最大 4000 バイト、平均 1000 バイトです。文字列の総数はいくらでもかまいませんが、約 . 10000。

CRC-32 はこの目的に適していますか?

たとえば、次の文字列のそれぞれに異なる固定長 (できれば短い) チェックサムが必要です。

CRC-32 ハッシュの一意性は入力長によって増加しますか?

この目的のためのチェックサムのより良い選択はありますか?

0 投票する
0 に答える
1136 参照

hash - MurmHash3 の逆

この Java バージョンで実装されているMurmurHash3_x64_128の逆関数を探しています。違いは、初期化と、シードをいくつかのマジック ナンバーで xor することにあることに注意してください。また、実際には、ビット 33 ~ 64 のみに関心があります ( 32 -> 32 ビットの簡略化されたバージョンの逆を見つけようとしているためです。h1h2

残念ながら、アルゴリズムのさまざまなバリエーションを使用している素敵なブログ投稿を見つけました。

ウィキによると、アルゴリズムは暗号学的に安全ではないため、逆が存在するはずです。