Hash 比较哈希以测试冲突

Hash 比较哈希以测试冲突,hash,Hash,我希望比较散列来检查冲突(是的,我知道这很耗时,但没关系)。在检查冲突时,需要比较哈希。最好的方法是在一个变量中有一个单独的散列进行比较,或者有一个以前生成的所有散列的列表,并将最新的散列与列表中的每个项目进行比较 我更喜欢第一个选项,因为它快得多,但是有推荐的方法吗?使用第一种方法是否不太可能发现碰撞 最好的方法是在一个变量中有一个单独的散列进行比较,或者有一个以前生成的所有散列的列表,并将最新的散列与列表中的每个项目进行比较 都不是 我更喜欢第一个选项,因为它快得多,但是有推荐的方法吗 我不

我希望比较散列来检查冲突(是的,我知道这很耗时,但没关系)。在检查冲突时,需要比较哈希。最好的方法是在一个变量中有一个单独的散列进行比较,或者有一个以前生成的所有散列的列表,并将最新的散列与列表中的每个项目进行比较

我更喜欢第一个选项,因为它快得多,但是有推荐的方法吗?使用第一种方法是否不太可能发现碰撞

最好的方法是在一个变量中有一个单独的散列进行比较,或者有一个以前生成的所有散列的列表,并将最新的散列与列表中的每个项目进行比较

都不是

我更喜欢第一个选项,因为它快得多,但是有推荐的方法吗

我不明白你为什么认为第一种方法可行,但是你还没有完全解释你的情况。不过,如果要检测重复的散列值,确实需要跟踪已经看到的散列值:要做到这一点,您不希望通过列表线性搜索,而应该使用集合容器来存储看到的散列值;哈希表——如在几个小时后由GnasHe729注释所建议的——将给出O(1)性能,例如在你的哈希中的C++中,64位,<代码> STD::unOrdEdEdSt< <代码>),或者是O(Logn)性能的平衡二叉树(例如C++ <代码> STD::SET)。 使用第一种方法是否不太可能发现碰撞

你很可能错过碰撞


尽管如此,你可能想重新审视你的前提。一个好的(加密质量)散列函数产生冲突的几率接近。根据经验,如果你有2^N个不同的值要散列,如果你的散列宽度超过2*N位,统计上你就不太可能看到冲突:如果你允许足够的“舒适度”,你就更可能被流星击中,而不是让你的程序看到冲突。您提到了MD5,所以我希望是128位:除非您存储的是万亿次或更多的值(字面意思),否则忽略冲突的可能性是非常安全的

请注意,哈希值的一个重要用途是,由于不同的原因,冲突更频繁地发生,这是在哈希表中,即使是非冲突的哈希值,在“包装”后也可能在同一个bucket索引处发生冲突-当
N
是bucket数时,通常是la
h%N
。一般来说,忽略哈希表中可能发生的冲突是不切实际的,尝试这样做是非常不明智的

最好的方法是在一个变量中有一个单独的散列进行比较,或者有一个以前生成的所有散列的列表,并将最新的散列与列表中的每个项目进行比较

都不是

我更喜欢第一个选项,因为它快得多,但是有推荐的方法吗

我不明白你为什么认为第一种方法可行,但是你还没有完全解释你的情况。不过,如果要检测重复的散列值,确实需要跟踪已经看到的散列值:要做到这一点,您不希望通过列表线性搜索,而应该使用集合容器来存储看到的散列值;哈希表——如在几个小时后由GnasHe729注释所建议的——将给出O(1)性能,例如在你的哈希中的C++中,64位,<代码> STD::unOrdEdEdSt< <代码>),或者是O(Logn)性能的平衡二叉树(例如C++ <代码> STD::SET)。 使用第一种方法是否不太可能发现碰撞

你很可能错过碰撞


尽管如此,你可能想重新审视你的前提。一个好的(加密质量)散列函数产生冲突的几率接近。根据经验,如果你有2^N个不同的值要散列,如果你的散列宽度超过2*N位,统计上你就不太可能看到冲突:如果你允许足够的“舒适度”,你就更可能被流星击中,而不是让你的程序看到冲突。您提到了MD5,所以我希望是128位:除非您存储的是万亿次或更多的值(字面意思),否则忽略冲突的可能性是非常安全的


请注意,哈希值的一个重要用途是,由于不同的原因,冲突更频繁地发生,这是在哈希表中,即使是非冲突的哈希值,在“包装”后也可能在同一个bucket索引处发生冲突-当
N
是bucket数时,通常是la
h%N
。一般来说,忽略哈希表中可能发生的冲突是不切实际的,尝试这样做是非常不明智的。

您可以使用哈希表。@gnasher729我正在比较哈希表。什么技术?什么类型的
hash
?@DmitriyZapevalov
MD5
开始。技术?@techydesigner什么语言?什么的collisons?你可以使用一个哈希表。@gnasher729我正在比较哈希。什么技术?什么类型的
hash
?@DmitriyZapevalov
MD5
开始。技术?@techydesigner什么语言?我不想考虑任何选项-我要求一个建议,因为我对哈希的理解有点基本-你的答案回答了我的问题-谢谢。不要介意我想考虑任何选项-我要求一个建议,因为我对哈希的理解是有点基础的。-你的回答回答了我的问题——谢谢。