【问题标题】:finding closest hamming distance找到最近的汉明距离
【发布时间】:2011-02-15 00:44:07
【问题描述】:

我有 N Pr(bi=0), Pr(bi=1) 用于从 0 到 n-1 的所有 i。

但这并没有太大帮助,因为 N 太大并且在每个位位置都有几乎相等的 1/0 分布。有没有办法可以更有效地完成这件事。现在,您可以假设 n=32,N = 2^24。

【问题讨论】:

  • 不,我希望你对你的 cmets 更有用。
  • 是的,也许这是一个更有用的评论:您 8 个月前在 stackoverflow 注册,问了 6 个问题,只接受了 2 个答案,只投了一次,从未回答过一个问题。也许您应该阅读常见问题解答。
  • 我们可以专注于问题而不是提出问题的人。再一次,我希望你对你的 cmets 有用。不知道是可以的,接受它并有时向前迈进。
  • 典型值为

标签: algorithm probability hamming-distance


【解决方案1】:

Google 在this paper 中为 k=3、n=64、N=2^34(更大的语料库、更少的位翻转、更大的指纹)提供了此问题的解决方案。基本思想是,对于小的 k,n/k 相当大,因此如果您形成几个具有置换位顺序的表,您希望附近的指纹应该具有相对较长的公共前缀。但是,我不确定它是否适合您,因为您的 n/k 小得多。

【讨论】:

    【解决方案2】:

    如果“查找”是指在整个文件中搜索指定的数字,然后对每个可能的匹配项重复“查找”,那么只需读取整个文件一次,检查每个条目到指定数字的汉明距离。这样,您只需读取文件一次,而不是 C(n 1) + C(n 2) + C(n 3)...+C(n,k) 次。

    【讨论】:

    • 是的,我知道,但这不是我想要的,尤其是。当文件太大而无法存储在内存中时。
    【解决方案3】:

    您可以使用量子计算来加快搜索过程,同时最大限度地减少所需的步骤数。我认为 Grover 的搜索算法将对您有所帮助,因为它提供了对搜索问题的二次加速.....

    【讨论】:

    • 你打算在量子计算机上解决这个问题吗?假设大多数人都没有,那如何在经典计算机上解决这个问题?
    【解决方案4】:

    也许您可以将其存储为图表,并通过汉明距离将其链接到集合中下一个最接近的数字,然后您需要做的就是按照另一个数字的链接之一找到下一个最接近的数字。然后使用索引通过文件偏移量来跟踪数字的位置,因此当您需要查找附近的邻居时,您不必在图表中搜索 Y。

    你还说你有 2^24 个数字,根据 wolfram alpha (http://www.wolframalpha.com/input/?i=2^24+*+32+bits) 只有 64MB。你能把它全部放在内存中以加快访问速度吗?也许这会在您的机器上进行缓存自动发生?

    【讨论】:

    • 构建图是个问题,也许你指的是汉明图,但是当你有 2^24 个节点和 2^32 - 2^24 个浪费的节点时会浪费很多空间。
    • 加上汉明距离取决于输入值。为给定的输入值预先构建数据结构可能不切实际。
    【解决方案5】:

    如果您的应用程序有能力进行一些广泛的预处理,您可以在生成 n 位数字时计算与该数字相距最多 k 的所有其他数字并将其存储在查找表中。它类似于地图 >。 riri 声称您可以将其放入内存中,因此哈希表可能工作得很好,但否则,您可能需要一个 B+ 树用于 Map。当然,正如你之前提到的,这很昂贵,但如果你能事先做到这一点,你以后会有快速查找,要么 O(1) 要么 O(log(N) + log(2^k))。

    【讨论】:

    • 是的,当您有一个庞大的列表并为大数据集寻找可行的解决方案时,再次存储所有可能的最多 k 距离的数字是昂贵的内存。
    猜你喜欢
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 2012-09-26
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 2015-03-21
    相关资源
    最近更新 更多