Wolfram mathematica 使用md5比较两个阵列?

Wolfram mathematica 使用md5比较两个阵列?,wolfram-mathematica,md5,Wolfram Mathematica,Md5,背景:我有两个对象数组,我想知道这两个数组是否相同。我是否可以计算所有对象的md5并将它们相加以进行一次比较 基本上,如果我知道md5(a)=md5(b),那么实际上a=b 但如果我知道 md5(a)+md5(b)=md5(c)+md5(d),我能说a=c和b=d吗 我有两个对象数组,我想知道这两个数组是否相同。我是否可以计算所有对象的md5并将它们相加以进行一次比较 这是优化吗 如果您只有2个数组,您将不会从中受益,因为计算内存块的哈希是一个O(n)操作。如果要比较数组一次,简单比较长度和每个

背景:我有两个对象数组,我想知道这两个数组是否相同。我是否可以计算所有对象的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吗

不需要。如果您需要一种快速的方法来消除大量的案例,您可以将其用作初始猜测,因为如果
a==c
b==d
为真,
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
    (巧合假阳性)

您需要考虑所有这些因素,才能使此启发有用。

谢谢!我猜得差不多。原因是我已经有了所有对象的md5,所以我希望有一种方法可以让我计算“数组的md5”,这样我就可以比较数组了。md5(ab)=md5(a)+md5(b)不,不会。编辑:嗯,可以。但一般来说,它不会。有没有办法从md5(a)和md5(b)中获得md5(ab)?而不是重新计算?不。也许你应该在维基百科上查一下“单向散列”。谢谢!我猜得差不多。原因是我已经有了所有对象的md5,所以我希望有一种方法可以让我计算“数组的md5”,这样我就可以比较数组了。