1

我想知道将图像用作哈希集/字典键的大小应该是多少。我也在考虑为此目的使用散列函数,但我害怕散列冲突。我需要存储大约百万张图像。

4

3 回答 3

2

在 HashSet 或 Dictionary 中使用什么数据作为键并不重要,但您需要为它实现一个GetHashCode和一个Equals方法。

哈希冲突不是问题。这将只是将两个图像放在同一个桶中,并使用该Equals方法找到正确的图像。

于 2012-12-17T14:27:55.543 回答
1

位图图像作为键?这不是一个好主意。Hashset 键应该尽可能小,否则性能会受到很大影响。

您可以做的是从图像中计算哈希值(例如 SHA1),然后将其用作键。它只有 20 个字节,因此应该是一个不错的大小,无论如何都比完整的位图图像要好得多。

于 2012-12-17T14:29:48.633 回答
1

给定图像的字节,您可以使用诸如 MD5 或 SHA1 之类的算法来计算它的哈希值。

bytes作为图片的字节数组的示例:

using (var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider())
{
    var hash = Convert.ToBase64String(md5.ComputeHash(bytes));
    //Store hash
}
于 2012-12-17T14:32:14.643 回答