2016-12-02 4 views
-6

数値のセットとハッシュテーブルのサイズを指定した場合、どのようにして衝突数をシミュレートできますか?ハッシュテーブル内の衝突の数を一連の値から数えるにはどうすればよいですか?

+3

あなたがこれまでどのような研究を行っていますか? –

+2

衝突の回数は、あなたのハッシュアルゴリズムに依存します。したがって、これには一応の答えはありません。 – diesieben07

答えて

1

セット内の数値のハッシュ値を計算し、重複したハッシュ値の数を数えます。この

単純な実装は次のようになります。

List<Integer> yourValues = /* Your set of numbers */; 
Map<Integer, Set<Integer>> map = new HashMap<>(); 
// Insert all elements into buckets based on their hash value 
yourValues.forEach(value -> { 
    if (!map.containsKey(value.hashCode())) 
     map.put(value.hashCode(), new HashSet<>()); 
    map.get(value.hashCode()).add(value); 
}); 
// Sum up the number of values in each bucket, subtract the number of buckets, so only duplicate values are counted 
int collisions = map.values().stream().map(Set::size).reduce(0, Integer::sum) - map.size(); 
System.out.printf("Number of collisions: %d\n", collisions); 
+0

ありがとうございます。しかし、私はあなたのオブジェクトがどんなデータ型であるのかちょっと混乱しています。おそらく明確にすることができますか? – Name158

+0

これは整数値の集合です。おそらくリストまたはセット。私は答えを変えた。 – Palle

関連する問題