针对一组测试最小汉明距离的算法?

2024-03-20

我想做一件相对简单的事情:

  • 给定一个查询号码Q, 查询距离d,和一组数字S, 判断是否S包含any汉明距离小于或等于的数字d.

最简单的解决方案就是使S一个列表并迭代它,计算距离。如果计算出的距离小于或等于 d,则退出返回TRUE.

但考虑到我想做的只是检查是否存在,比线性时间解决方案更快的东西应该是可能的。

我尝试过的一件事是M-tree。参考 stackoverflow 上的一些其他问题,维基百科文章 (https://en.wikipedia.org/wiki/M-tree https://en.wikipedia.org/wiki/M-tree)和两个预先存在的实现,我昨天花了几个小时来实现一个自定义解决方案。这个问题的好处之一是,通过两个数字的 XOR(使用 SSE 指令)计算 popcount 实际上比存储可以避免计算指标的数字更便宜,因此该解决方案有几个方面:可以简化并优化速度。

结果非常令人失望。事实证明,与最小汉明距离相比,我正在处理的公制半径很小。例如,在 12 位数字的空间中,最大汉明距离是 12。如果我要寻找的最小值是 4,那么就没有太多机会进行良好的非重叠分区。事实上,我就是这样尝试的,通过暴力创建一组最小汉明距离为 4 的 12 位数字,然后(通过暴力)找到最佳二叉树分区,以便搜索算法可以访问最少数量的节点。如果我想count查询 d 内的集合元素数量,我无法将节点访问数量减少到总数的约 30% 以下,并且当我发现第一个节点访问数量约为 4% 时停止。这意味着我或多或少地提出了一个线性时间解决方案,其中复杂的树搜索算法的开销与不必检查尽可能多的集合成员所节省的开销大致相同。

但我想做的事情却很有限。我什至不想计算具有查询距离的集合成员的数量<= d,更不用说列举它们了。我只是想检查是否存在。这让我思考诸如布隆过滤器和哈希之类的事情。

我还考虑过尝试构建一个图形结构,其中集合成员通过带有权重的边连接。利用汉明距离尊重三角不等式这一事实,在我看来,必须有某种方法来搜索该图,以便边缘遍历导致到查询的距离可能更小的方向,但我什至不知道从哪里开始这里。

有没有人对这里的解决方案有任何其他建议,可以轻松击败简单迭代数组的性能?

编辑和动机:

归根结底,这来自于编码理论问题。对于给定的偶数d和字大小N,一个 N 位数字可以容纳多少个最小汉明距离 d 的代码?这允许创建可以检测错误的代码d/2位纠正错误高达d/2-1位。我们知道像 LDPC 这样的香农极限码,但这是针对具有模糊最小汉明距离的长码,并且它们需要很长时间才能解码。还有像 OLSC 这样的多位错误码,解码速度很快,但空间利用率很低。另一方面,对于d = 4,扩展汉明 (SECDED) 代码是最佳紧凑的。我见过基于 BCH 的方法来制作 DECTED 代码,但我不知道它们是否是最佳的。为了探索最佳编码,我想做的是生成替代的代码集N具有任意 d 的位并生成电路来编码和解码它们,选择最紧凑的。我还希望找到一些可以用于更长代码的模式。

如果 (a) 尚未完成,(b) 可行,以及 (c) 有人想共同撰写一篇论文,请告诉我。 :)


我认为这个问题可以通过将每个数字分开来解决S到子字符串,使得查询结果必须至少有 1 个分区与查询的相应分区的汉明距离不大于 1。

文章中描述了这个算法:Alex X. Liu,沉克,Eric Torng。大规模汉明距离查询处理,2011 https://ieeexplore.ieee.org/document/5767831。作者将该算法称为HEngine。我尝试解释一些直觉。

Lets N- 数字的位数(它的维数)

k- 查询汉明距离

r-cut(α)- 分号功能α into r子串{α1, α2, ..., αr}第一个在哪里r - (m 模 r)子串有长度⌊m/r⌋和最后一个m mod r子串有长度⌈m/r⌉

该算法基于以下定理:

对于任意两个二进制字符串β and γ这样HD(β,γ)≤k, 考虑r-cut(β) and r-cut(γ) where r ≥ ⌊k/2⌋ + 1。一定是这样的HD(βi,γi)≤1至少q = r − ⌊k/2⌋的不同值i.

例如,我们有长度的二进制字符串N = 8位。我们想找到子串k = 2.

α = 10001110
β = 10100110
HD(α, β) = 2

那么最小值r = ⌊2/2⌋ + 1 = 2。在这种情况下r-cut(α,β)产生 2 个长度为 4 位的子串:

    α1 = 1000    α2 = 1110
    β1 = 1010    β2 = 0110
HD(α1, β1) = 1,  HD(α2, β2) = 1

q = 2 - ⌊2/2⌋ = 1.

作者还介绍了下一个定理:

考虑任何字符串β ∈ T这样HD(α, β) ≤ k。给定任意r ≥ ⌊k/2⌋ + 1,由此可知至少有一个签​​名β-签名与其兼容的签名相匹配α-签名。

该算法的基本思想是预处理S方便查找所有字符串β in S满足签名匹配属性,然后验证这些字符串中的哪些实际上在汉明距离内k of α.

我想你应该准备一套S使用HEngine算法分表,并拆分Q以同样的方式进行分区。然后按对应分区进行搜索,并考虑到与对应分区的汉明距离不大于1。

我建议您在文章中查看更多详细信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

针对一组测试最小汉明距离的算法? 的相关文章

  • (x % 64) == (x & 63) 背后的基本原理是什么? [复制]

    这个问题在这里已经有答案了 可能的重复 按位与代替模运算符 https stackoverflow com questions 3072665 bitwise and in place of modulus operator 有人可以解释使
  • 使用布隆过滤器有什么好处?

    我正在阅读布隆过滤器 它们看起来很愚蠢 使用布隆过滤器可以完成的任何事情 都可以使用单个哈希函数而不是多个哈希函数在更少的空间内更有效地完成 或者看起来就是这样 为什么要使用布隆过滤器以及它有何用处 亚历克斯已经解释得很好了 对于那些还没有
  • 根据内部数组中的值对外部数组进行排序,javascript

    我有一个包含数组的数组 我想根据内部特定列中的值对外部数组进行排序 我敢打赌这听起来有点令人困惑 所以我将直接跳到一个例子 初始数据 var data row 1 col1 2 row 1 col2 c row 1 coln row 2 c
  • 对于基准测试和压力测试子串搜索算法有哪些好的测试用例?

    我正在尝试评估不同的子字符串搜索 ala strstr 算法和实现 并寻找一些精心设计的针和干草堆字符串 这些字符串将捕获最坏情况的性能和可能的极端情况错误 我想我可以自己解决它们 但我认为有人必须在某个地方收集大量测试用例 一些想法和对自
  • 最大覆盖不相交间隔

    假设您有 k 无法尝试所有可能的子集 2 k 不可行 贪婪方法按 a i 区间覆盖算法 排序 按 b i 最大不相交区间数算法 排序不起作用 不知道是否有动态程序解决方案 考虑到输入的大小 我认为解决方案应该是 O k log k 或 O
  • Codility 的复杂性达到顶峰

    我刚刚完成了以下 CodilityPeaks http codility com demo take sample test peaks问题 问题如下 给出一个由 N 个整数组成的非空零索引数组 A 峰值是大于其邻居的数组元素 更准确地说
  • 找出数组中重复的元素

    有一个大小为 n 的数组 数组中包含的元素在 1 到 n 1 之间 每个元素出现一次 只有一个元素出现多次 我们需要找到这个元素 尽管这是一个非常常见的常见问题解答 但我仍然没有找到正确的答案 大多数建议是我应该将数组中的所有元素相加 然后
  • 了解荷兰国旗计划

    我正在读荷兰国旗问题 http en wikipedia org wiki Dutch national flag problem 但无法理解什么low and high参数在threeWayPartitionC 实现中的函数 如果我假设它
  • 强连通分量有什么用?

    我发现了几种可以解释的算法how在有向图中找到强连通分量 但没有解释why你会想要这样做 强连通分量有哪些应用 您应该查看 Coursera 上 Tim Roughgarden 的算法简介课程 对于他所讨论的每一种算法 他都会解释其一些应用
  • 经济模拟的算法?

    我想创建一个游戏 玩家可以创建不同价格的不同产品 称为报价 然后我给他们一定数量的客户 称为需求 现在 我想要一个算法来确定每个参与者的市场份额 当然 我现在就可以使用随机的方式来制作我的 但在这样做之前 我更愿意先问一下 因为我确信在我之
  • 计算具有特定子集大小的集合分区

    给定一组n元素 我需要找到该集合的所有分区k大小几乎相等的子集 例如 对于一个包含 7 个元素和 3 个子集的集合 我只需要其中有两个子集 每个子集包含 2 个元素 和一个子集包含 3 个元素的分区 我不想要一个包含 1 2 和 4 个元素
  • 使用 QueueLinearFloodFill 算法着色时留下空白

    我正在尝试在android中实现洪水填充算法 它的工作速度非常慢 所以我根据此链接尝试了队列线性洪水填充算法 Android中如何使用洪水填充算法 https stackoverflow com questions 16968412 how
  • 3 维装箱算法

    我面临着 3 维装箱问题 目前正在进行一些初步研究 了解哪些算法 启发式方法目前能产生最佳结果 由于问题是 NP 难问题 我不希望在每种情况下都能找到最佳解决方案 但我想知道 1 最好的精确求解器是什么 分支定界 我期望使用合理的计算资源可
  • 找到与另一个子集和匹配的最小子集和

    我有一个现实世界的问题 不是家庭作业 需要找到集合 A 的子集之和等于其他集合 B 的子集之和 一个非常相似的问题 有一个有用的答案is here https stackoverflow com questions 443712 algor
  • set()是如何实现的?

    我见过有人这么说setpython 中的对象具有 O 1 成员资格检查 他们如何在内部实施以实现这一点 它使用什么类型的数据结构 该实施还有哪些其他影响 这里的每个答案都非常有启发性 但我只能接受一个 所以我将选择最接近我原来问题的答案 谢
  • 查找字符串中只出现一次的字符

    我正在用 PHP 编写一个算法来解决给定的数独难题 我已经设置了一个带有两个类的面向对象的实现 Square9x9 棋盘上每个单独图块的类 以及Sudoku类 其矩阵为Squares 代表董事会 我正在使用的算法的实现是一种三层方法 第一步
  • 比 O(n) 更好的范围交集算法?

    范围交集是一个简单但不平凡的问题 已经回答过两次了 查找数字范围交集 https stackoverflow com questions 224878 find number range intersection 比较日期范围 https
  • 不均匀圆盘的最佳覆盖

    What kind of algorithm can I use to search for an optimal minimum area covering of a limited region of the XY plane with
  • 解释暴力算法[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • php PDO 可以获取两个结果集吗?如果是,1 个结果集和 1 个以上结果集哪个更好?

    如果可能的话 如何获取两个结果集 sth dbh gt prepare SELECT FROM tb1 WHERE cond1 SELECT from tb2 Where cond2 sth gt execute row sth gt fe

随机推荐

  • 无法使用 Robo3T 连接到 Mongo 副本集

    我在使用 RoboMongo 连接到 Mongo 集群时遇到问题 当我在指南针中使用相同的连接字符串时 它可以工作 但 Compass 社区版不像 Robomongo 那样灵活 无法连接到副本集 Employee UAT hhds6666
  • PHP DateTime::createFromFormat 返回错误的日期

    当尝试跑步时createFromFormat使用太平洋 奥克兰时区和格式字符串 F Y 尽管我提供了 2019 年 9 月 但返回的日期是 10 月 1 日 我尝试在 CLI 和 FPM 中的 PHP 7 3 9 和 7 2 22 上运行它
  • 为什么 WPF 吞咽 Window.Activated 的事件处理程序中引发的异常?

    简单的 WPF 应用程序 带有简单 空的内容Window其中我将事件处理程序连接到窗口Activated event public partial class MainWindow public MainWindow InitializeC
  • 如何从 Nexus 存储库请求工件的大小?

    我知道 Nexus 支持 REST 请求 您能告诉我如何根据 Nexus 从存储库请求某些工件的大小吗 谢谢 您有以下选项 使用工件内容 URI 的完整路径并添加参数describe info 例如 https repository son
  • 如何将要渲染的任意窗口重定向到内存中的后缓冲区?

    我正在尝试一个自行开发的应用程序托管框架 并且我想抽象输入 输出 以便我可以优雅地处理崩溃 Chrome 使用非常相似的模型 有什么方法可以获取任意窗口句柄 并说服它开始渲染到后缓冲区吗 或者我应该首先创建自己的窗口 然后将客户端应用程序重
  • 如何告诉 TypeScript 接口 T 比具有索引签名的类型 U 窄?

    我有一个函数可以验证 JSON 响应以确保它对应于给定的形状 以下是我的类型 定义了所有可能的 JSON 值 取自https github com microsoft TypeScript issues 1897 issuecomment
  • 如何更改操作栏上的文本

    目前它只显示应用程序的名称 我希望它显示自定义的内容并且对于我的应用程序中的每个屏幕都不同 例如 我的主屏幕可以在操作栏中显示 page1 而应用程序切换到的另一个活动可以在该屏幕操作栏中显示 page2 更新 最新的 ActionBar
  • Android 应用程序中的 VideoView 全屏

    我的应用程序中有一个视频视图 代码是这样的
  • 加载时将 Google 地图信息窗口居中

    我在将 InfoWindow 集中在页面加载时遇到问题 加载时 地图以标记为中心 这使 InfoWindow 离开屏幕 我正在使用地图容器的较短高度 现在 单击标记确实会将地图重新 置于信息窗口的中心 使其看起来与我想要的一模一样 在这种情
  • 访问其他层中的对象(cocos2d)

    我正在用操纵杆在一层中移动精灵 现在 根据最佳实践 操纵杆和精灵必须位于同一场景的不同层中 我已经设法将它们分开 但我现在完全陷入困境 完全不知道如何将操纵杆命令从一层传递到另一层 推荐的方法是什么 Scene Game Play Laye
  • 图像中的隐形水印[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 JavaFX 8 中管理多线程的最佳方法是什么?

    我正在尝试找到一种有效的方法来影响 JavaFX GUI 元素的形状和内容 例如简单的Pane 使用多线程 假设我有一个简单的Pane 我在其上显示已填充Circle在给定的时间间隔内 我希望有可能回答它们 例如通过按相应的键 到目前为止
  • 向 Jira 的 api 添加附件

    我正在尝试使用他们的 API 将文件附加到 Jira 案例 我在 Drupal 6 PHP v 5 0 中执行此操作 这是我的代码 ch curl init header array Content Type multipart form
  • 身份验证时出现 umbraco 公共访问错误

    我在 Umbraco 7 中的公共访问方面遇到问题 我使用自定义会员资格提供商通过 CRM 数据库对用户进行身份验证 我设置了一条规则来允许访问仅经过身份验证的 前端 用户我使用自定义角色提供程序来定义经过身份验证的用户具有访客角色 如果未
  • 未找到 GoogleWebAuthorizationBroker

    我正在学习 C 为 Windows Phone 开发 并且我正在尝试验证我的用户进入 Google 帐户 我使用这个代码 https developers google com api client library dotnet guide
  • 如何使用 JavaScript 将非英语字符转换为英语

    我有一个 C 函数 它将所有非英语字符转换为给定文本的正确字符 就像下面这样 public static string convertString string phrase int maxLength 100 string str phr
  • 使用 pandas 删除 Excel 中的标题行

    我有一个带有合并标题的 Excel 文件 我使用 pandas 将其读取为数据框 之后看起来像这样pd read excel Unnamed 0 Pair Unnamed 1 Type Unnamed 23 cabinet name gro
  • 设计时 XAML 的默认值

    我有一个绑定的TextBlock XAML
  • C 复数和 printf

    如何打印 使用 printf 复数 例如 如果我有以下代码 include
  • 针对一组测试最小汉明距离的算法?

    我想做一件相对简单的事情 给定一个查询号码Q 查询距离d 和一组数字S 判断是否S包含any汉明距离小于或等于的数字d 最简单的解决方案就是使S一个列表并迭代它 计算距离 如果计算出的距离小于或等于 d 则退出返回TRUE 但考虑到我想做的