質問
を作りたいこと(文字列)のハッシュします。できると考えるのはこのハッシュする。
解決
GUIDほど確実に一意ではありません、いいえ。
拡張するだけで、一意性が4倍に減少します。16バイトから4バイトの可能な組み合わせになります。
コメントで指摘されているように、ハッシュサイズは違いをもたらします。 4バイトのことは、デフォルトのハッシュサイズが4バイト(int)である.NETで使用される可能性があるという、せいぜい恐ろしい仮定でした。したがって、上記の内容を、ハッシュのバイトサイズに置き換えることができます。
他のヒント
いいえ。
ミニGUIDが必要な場合は、ここを参照してください: http: //blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx
一言で言えば、いいえ。
ピジョンホールの原理により、ハッシュのビットがGUIDよりも少ないと仮定しましょう。GUIDのマッピングは複数存在する必要があります->ハッシュがGUIDSより少ないため、ハッシュします。
ハッシュのビット数がGUIDよりも大きいと仮定した場合、適切なハッシュ関数を使用していると仮定すると、衝突の可能性は非常にわずかですが、有限です。
のないハッシュ関数を低減する任意のサイズのデータをブロックを固定サイズのビット数までの1対1のマッピングの間はご対応できません常にありが存在するのと異なる二つのデータブロックに減らすことで、同じ系列のビットのハッシュ.
良いハッシュアルゴリズムを最小限に抑える可能性同様の事態が発生しないよう、一般的に、ビットのハッシュ、少々の衝突.
ハッシュ衝突のため、保証されていません。 GUID自体はほぼ保証されています。
実用的な理由から、ハッシュは一意であると想定できますが、GUID自体を使用しないのはなぜですか?
いいえ、ハッシュ値の一意性は仮定しません。ハッシュ値は一意である必要はなく、範囲全体に均等に分散する必要があるため、それは問題ではありません。分布が均一であればあるほど、(ハッシュテーブルで)発生する衝突は少なくなります。衝突が少ないほど、ハッシュテーブルのパフォーマンスが向上します。
fyiハッシュテーブルの機能の詳細については、ハッシュテーブルとハッシュマップとその典型的なユースケースとは何ですか?
暗号化ハッシュ(MD5、SHA1、RIPEMD160)を使用する場合、ハッシュは一意になります(非常にありそうにないモジュロ衝突-SHA1はデジタル署名に使用され、MD5は randomの衝突耐性もあります入力)。しかし、なぜGUIDをハッシュしたいのですか?
GUIDをXサイズにハッシュしたいのですが、10個以下のGUIDがセットにある場合があるので、10,000,000個のGUIDがセットにある場合よりも短いハッシュで衝突することはありません。関数を呼び出すときにハッシュのサイズを指定できるようにしたいだけです。