具有“加权”输入的类哈希算法

计算科学 算法
2021-12-05 09:13:29

标题不是最好的,但由于我不知道我实际上在搜索什么,所以我只是使用了一些广泛的东西。我正在寻找一种算法、一类算法或至少可以用于进一步研究的关键字。

本质上,我正在寻找一个类似于散列的函数,它接受输入并将其归结为更紧凑的表示。我希望类似的输入彼此接近,并且我希望输入的某些部分的权重高于/低于其他部分。只要我有部分排序,我不在乎距离有多远,这样我就可以将相似的条目组合在一起。

例如,假设我有输入字符串:

A = alittlebeer
B = alittlebear
C = blittlebear

并假设我定义了我的体重,以便我对前 3 个字符的权重比其他字符高得多。那么我希望|f(A)f(B)|<<|f(B)f(C)|<|f(C)f(A)|

3个回答

通常,k-means 聚类用于对单词进行分组,这里提出的技术:https ://stackoverflow.com/questions/13769242/clustering-words-into-groups可用于计算距离词。

但是,我认为 kd-tree 可能是一种更适合根据单词距离对单词进行排序的技术。在这里,A、B 或 C 的最大字符长度将是树的维度。字符串的第一个字符是第一个维度,第二个字符是第二个 D...,依此类推。搜索和插入操作会很快,前 3 个字符自然会比其他字符更重要。

希望这可以帮助。

我相信你可能想看看字符串指标: http ://en.wikipedia.org/wiki/String_metric

这些算法基本上试图定义一组相似性度量。您可以通过使用字符串的字谜模型来计算排序指标来对字符串列表进行排序。字谜模型是您的原始哈希或主键。字谜过于简单,但希望你明白我的意思。

Levenshtein 距离是一种非常著名的相似性算法。

这将是一个幼稚的建议而不是解决方案:

  1. 考虑每个字符串一系列来自 ASCII 映射的数字。这定义了字母的接近程度。

  2. 声明一个输入容器,它是一个最大长度的向量。现在给出一个相同长度的权重向量。

  3. 根据给定的权重向量对每个输入进行排序,然后从输入的开头到结尾贪婪地匹配字母。失配发生得越早,输入之间的距离就越大。

  4. 为了量化距离,假设我们使用这个不可解释的朴素公式:

距离 = exp(100 + mismatch-weight) + mismatch-weight * ASCII-difference

这是一种贪婪的方法。我忽略了字符串中可能存在大量不匹配的事实。距离度量也根本没有意义。