我想知道应该使用图像作为哈希集/字典键的图像大小。我也在考虑使用散列函数来达到这个目的,但我害怕散列冲突。我需要存储大约百万的图像。作为字典键的位图图像
1
A
回答
0
位图图像作为关键?这不是一个好主意。散列码键应尽可能小,否则性能将受到严重影响。
你可以做的是从图像中计算一个散列值(比如SHA1),然后用它作为关键字。它只有20个字节,所以应该是一个好的尺寸,总比完整的位图图像好得多。
+0
不需要downvote这个答案,它是正确的!如果你做得不好,至少要有礼貌来解释原因。 –
2
无论您在HashSet或Dictionary中使用什么数据作为密钥,但您需要为其实施GetHashCode
和Equals
方法。
散列冲突不是问题。这只会将两个图像放在同一个桶中,并使用Equals
方法来查找正确的图像。
1
给定图像的字节数,可以使用算法(如MD5或SHA1)为其计算散列值。
例与bytes
为您的图片的字节数组:
using (var md5 = new System.Security.Cryptography.MD5CryptoServiceProvider())
{
var hash = Convert.ToBase64String(md5.ComputeHash(bytes));
//Store hash
}
相关问题
- 1. C#字典键作为字典
- 2. 试图JSON转换为[键,值]字典
- 3. 在C#字典中为一个键添加多个位图值
- 4. 将字节转换为位图图像
- 5. 矩阵作为字典键
- 6. 用法作为字典键
- 7. UIView作为字典键?
- 8. 字典作为关键值?
- 9. 用字典上传图像
- 10. 在Matlab中将位图图像保存为位图图像
- 11. 作为位图的示例摄像头图像Android
- 12. 设置图像视图位图作为一个返回的位图
- 13. 试图存储字典作为变量
- 14. 从图像发件人获取字典关键字
- 15. pyyaml地图字典为对象字典
- 16. 使用字典作为其他字典中的关键字
- 17. 图像与位图图像与位图
- 18. 使用字符串作为字典键?
- 19. Python字典键作为一组数字
- 20. GNUplot - 如何将图像作为关键?
- 21. IPv4Network对象作为字典中的键
- 22. 变量作为键的Python字典
- 23. 列表作为字典的关键
- 24. 作为字典键的sqlalchemy对象?
- 25. Python变量作为字典的键
- 26. 的Python:使用* ARGS作为字典键
- 27. 真理表作为字典的键
- 28. 使用Timespan作为字典中的键?
- 29. 使用kwargs作为字典中的键
- 30. 使用CFUUIDRefs作为字典的键
但是你有什么作为重点使用?第一个x字节数?如果图像大部分是相同的呢?然后你可能会发生很多碰撞,使得你的HashTable更像一个链表。更不用说,Equals函数是什么样子的?在碰撞的情况下,您是否必须比较*所有*字节以测试相等性?在我看来,要么有一个非常慢的散列函数(几乎没有碰撞),要么是一个非常快的散列函数,有很多冲突,还有一个非常慢的Equals函数。我同意@Roy Dictus:不要使用图像本身。 – aquinas