【问题标题】:Locality Sensitive Hash Implementation? [closed]局部敏感哈希实现? [关闭]
【发布时间】:2011-08-11 19:32:28
【问题描述】:

在 C/C++/Java/C# 中有没有相对容易理解(并且易于实现)的局部敏感哈希示例?

我想了解更多关于这个概念的信息,所以想在几个文本文件上尝试一个实现,看看它是如何工作的,所以我不需要任何高性能或任何东西......只是一个例子一个散列函数,它为相似的输入返回相似的散列。之后我可以通过示例从中学到更多。 :)

【问题讨论】:

    标签: c# java c hash locality-sensitive-hash


    【解决方案1】:

    对于字符串,您可以使用近似匹配算法。

    如果字符串与参考字符串等距,那么它们很可能彼此相似。这样你就有了一个字符串的局部敏感哈希实现。

    您可以为一系列距离创建不同的哈希桶。

    编辑:您可以尝试其他的字符串距离变化。一个更简单的算法只会返回 no。两个字符串之间的公共字符。

    【讨论】:

    • +1 这似乎是正是我正在寻找的,我会再看一下。非常感谢! :)
    • @Hasan:我有点困惑......字符串"abcd""xyzw""6pGO" 这样的随机字符串的距离都为4,但它们完全不同。这是如何运作的? (对于长度为 4 的几乎 any 随机字符串,它是 4...)
    • @Mehrdad 这个算法告诉你需要多少更改才能将输入字符串转换为参考(随机)字符串。您也可以尝试一个更简单的算法,其中距离为否。随机字符串和您的输入字符串之间共有的字符数。
    • @Hasan:是的,我理解算法的作用,但问题是它根本不能正常工作,就像我展示的那样。你碰巧知道任何更好的算法吗? (你刚才提到的那个好像不错,我会考虑的。)
    • 这样的散列解决方案可以很好地处理类似的字符串,但对于不相关的字符串,它会给你带来无用的结果,但如果你在这种情况下查看它,你无论如何都没有类似的字符串,所以任何算法都不会'不工作。在第一种情况下,所有不相关的都属于哈希码 4,因为您可以维护另一个哈希列表以进一步分解它。
    【解决方案2】:

    MSDN 博客上有一篇很棒的文章:http://blogs.msdn.com/b/spt/archive/2008/06/11/locality-sensitive-hashing-lsh-and-min-hash.aspx

    还有至少一个 C++ 库,您可以在这里查看源代码:http://sourceforge.net/projects/lshkit/

    【讨论】:

    • 与@Mehran 的链接相同的问题,但无论如何感谢+1。
    【解决方案3】:

    Hadoop 上还有一个 Java 实现。它在文档方面做得很好。

    它叫LikeLike

    目前 Likelike 仅支持 Min-Wise 独立排列。 Min-Wise 独立排列是 适用于推荐 谷歌新闻

    【讨论】:

    • 感谢您的链接,但对于我的情况来说这似乎有点太复杂了......我试图避免使用大型库,直到我理解一个简单的库。 :-) 无论如何,谢谢,+1。
    【解决方案4】:

    我知道您明确要求使用 C/C++/C#,但 a Python port 中的 nilsimsa hash 可能比其他更大的库更容易理解。

    【讨论】:

    • +1 太棒了,我也在学习 Python,所以它用一块石头杀死了两只鸟。感谢分享这个! :)
    猜你喜欢
    • 2012-10-08
    • 1970-01-01
    • 2011-09-26
    • 2016-10-14
    • 2012-12-27
    • 2015-10-10
    • 2016-09-23
    • 1970-01-01
    • 2018-04-24
    相关资源
    最近更新 更多