我需要比较Java / Type-script对象的不同状态。这些对象在执行期间会发生变化,因此我无法直接对它们进行比较。我需要根据计算出的哈希值来比较它们'我能够存储的。
通常,Min-Hash算法适用于此类问题。然而,Min-Hash纯粹基于比较字符串集,因此不能比较其内容以某种方式排序的集合,即数字。
让我解释一下我的意思。考虑一个由
组成的对象 "FirstValue"
"SecondValue"
"42"
汇总到100101010
。在不同的时间,同一个对象由
"FirstValue"
"SecondValue"
"41"
导致哈希100010010
现在通常通过检查汉明距离来比较这些哈希值。
100101010 XOR
100010010
=========
000111000 --> Hamming Distance = 3
允许根据Jaccard index (9-3)/9=0.66
计算其相似度。
但是,我希望看到从42
到41
的微小变化以某种方式反映在哈希中。即,两个状态之间的相似性应该更像0.95
。确切的数字并不重要。
如果不需要存储大量额外值,我该怎么做?
答案 0 :(得分:0)
我将使用随机位翻转。
Min-Hash会对常规字符串进行哈希处理。产生的散列由随机位翻转改变。在散列的每个位置处的位翻转的概率与要比较的整数成比例。
"FirstValue"
"SecondValue"
"42"
通过首先散列"FirstValue"
和"SecondValue"
进行哈希处理,从而产生100101011
。
42
现在以下列方式合并到哈希中:
20
和50
之间的值,42
的值为73.3%
。{/ li>
0.733*weight
然而,我仍然需要摆弄随机数生成器的种子以使散列具有确定性。