背景:我有两个对象数组,我想知道这两个数组是否相同。我可以计算所有对象的 md5 并将它们加起来做一个比较吗?
基本上,如果我知道 md5(a)=md5(b),那么实际上 a=b
但是如果我知道 md5(a) + md5(b) = md5(c) + md5(d),我可以说 a=c 和 b=d 吗?
背景:我有两个对象数组,我想知道这两个数组是否相同。我可以计算所有对象的 md5 并将它们加起来做一个比较吗?
基本上,如果我知道 md5(a)=md5(b),那么实际上 a=b
但是如果我知道 md5(a) + md5(b) = md5(c) + md5(d),我可以说 a=c 和 b=d 吗?
我有两个对象数组,我想知道这两个数组是否相同。我可以计算所有对象的 md5 并将它们加起来做一个比较吗?
这是优化吗?
如果您只有 2 个数组,则不会从中受益,因为计算内存块的哈希是 O(n) 操作。如果您要比较一次数组,那么简单地比较长度和每个元素的简单方法会更快。
但是如果我知道 md5(a) + md5(b) = md5(c) + md5(d),我可以说 a=c 和 b=d 吗?
不。如果您需要一种快速的方法来消除大量案例,您可以将其用作初始猜测,因为 fora == c
和b == d
to 为真,md5(a) == md5(c)
并且md5(b) == md5(d)
也必然为真。但是,不确定:存在 md5 检查会成功但数组不相等的情况。如果您决定依赖此检查,则需要确保清除此类误报。
此外,如果您取总和,顺序变得无关紧要。换句话说,您最终会遇到一些总和可能相等的不同情况:
a == c
和b == d
(预期)a == d
和b == c
(交换值)a != c
和a != d
和b != c
(b != d
巧合的误报)您将需要考虑所有这些,以使此启发式方法有用。