Hash 通过计算最小散列来比较两个对象

Hash 通过计算最小散列来比较两个对象,hash,typescript,dimensionality-reduction,Hash,Typescript,Dimensionality Reduction,我需要比较Java/Type脚本对象的不同状态。这些对象在执行过程中会发生变化,因此我无法直接比较它们。我需要根据我能够存储的计算出的“散列值”对它们进行比较 通常,该算法对于此类问题非常有效。但是,最小哈希纯粹基于比较字符串集,因此无法比较内容以某种方式“有序”的集,即数字集 让我解释一下我的意思。考虑一个由组成的对象 "FirstValue" "SecondValue" "42" 它被散列为100101010。在不同的时间,同一对象由 "FirstValue" "SecondVa

我需要比较Java/Type脚本对象的不同状态。这些对象在执行过程中会发生变化,因此我无法直接比较它们。我需要根据我能够存储的计算出的“散列值”对它们进行比较

通常,该算法对于此类问题非常有效。但是,最小哈希纯粹基于比较字符串集,因此无法比较内容以某种方式“有序”的集,即数字集

让我解释一下我的意思。考虑一个由

组成的对象
 "FirstValue"
 "SecondValue"
 "42"
它被散列为
100101010
。在不同的时间,同一对象由

 "FirstValue"
 "SecondValue"
 "41"
这将导致散列
100010010

现在,通常通过检查汉明距离来比较这些散列

 100101010 XOR
 100010010 
 =========
 000111000 --> Hamming Distance = 3
允许根据as
(9-3)/9=0.66
计算它们的相似性

然而,我希望看到从
42
41
的微小变化以某种方式反映在散列中。也就是说,两种状态之间的相似性应该更像
0.95
。确切的数字无关紧要


如果不需要存储大量附加值,我将如何做到这一点

我将使用随机位翻转

常规字符串通过最小哈希进行哈希。产生的散列通过随机位翻转来改变。哈希的每个位置的位翻转概率与要比较的整数成正比

"FirstValue"
"SecondValue"
"42"
通过第一次散列
“FirstValue”
“SecondValue”
进行散列,结果是
100101011

42
现在通过以下方式合并到散列中:

  • 由于我期望值介于
    20
    50
    之间,
    42
    处于该范围的
    73.3%
  • 然后,每个位置的位翻转概率为
    0.733*weight

但是,我仍然需要修改随机数生成器的种子,以使哈希具有确定性

我将使用随机位翻转

常规字符串通过最小哈希进行哈希。产生的散列通过随机位翻转来改变。哈希的每个位置的位翻转概率与要比较的整数成正比

"FirstValue"
"SecondValue"
"42"
通过第一次散列
“FirstValue”
“SecondValue”
进行散列,结果是
100101011

42
现在通过以下方式合并到散列中:

  • 由于我期望值介于
    20
    50
    之间,
    42
    处于该范围的
    73.3%
  • 然后,每个位置的位翻转概率为
    0.733*weight

但是,我仍然需要修改随机数生成器的种子,以使哈希具有确定性

我想您应该在比较散列之后比较原始字符串?问题是,要将
41
42
进行比较,我需要沿散列存储数字
42
。只有这样,我才能比较旧状态(即
42
)和新状态(即
41
)-->更多的ram使用。我想你应该在比较散列后比较原始字符串?问题是,要将
41
42
进行比较,我需要沿散列存储数字
42
。只有这样,我才能比较旧状态(即
42
)和新状态(即
41
)-->更多的ram使用。