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