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

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(使用前将#替换为@)

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

  • 用于计算三角函数、对数或类似函数的算法。仅限加减法

    我正在修复 Ascota 170 古董机械可编程计算机 它已经开始工作了 现在我正在寻找一种算法来展示其功能 例如计算三角或对数表 或类似的东西 不幸的是 从数学运算来看 计算机只能进行整数的加减法 从 1E12到1E12的55个寄存器 甚
  • 如何在单向链表(一次遍历中)中从尾部获取第 n 个节点?

    所以我在一次考试中得到了这个问题 如何从单链表的尾部获取第 n 个节点 每个节点都有一个值和一个下一个 指向下一个值的指针 我们得到这个 getNodeFromTail Node head int x 所以我的做法是通过遍历一次来求出列表的
  • 运行时间为 O(n) 且就地排序的排序算法

    有没有运行时间为O n 并且还分类到位 在某些情况下 最好的情况是 O n 但这可能是因为项目集合已经排序 你正在看 O nlogn 一些较好的平均值 话虽如此 排序算法的 Wiki 还是相当不错的 有一个表格比较了流行的算法 说明了它们的
  • Google 文档如何处理编辑冲突?

    我一直在尝试编写自己的 Javascript 编辑器 其功能类似于 Google Docs 允许多人同时使用 我不明白一件事 假设用户 A 和用户 B 直接相互连接 网络延迟为 10 毫秒 我假设编辑器使用 diff 系统 据我了解 Doc
  • 神经网络的层和神经元

    我想更多地了解神经网络 我正在开发一个 C 程序来制作神经网络 但我坚持使用反向传播算法 很抱歉没有提供一些工作代码 我知道有很多库可以用多种语言创建神经网络 但我更喜欢自己制作一个 关键是我不知道要实现特定目标 例如模式识别或函数近似或其
  • 如何在 JavaScript 中构建树模式匹配算法?

    好吧 这是一个有点复杂的问题 但是 tl dr 基本上是如何使用 模式树 解析 实际树 如何检查特定的树实例是否与特定的模式树匹配 首先 我们有我们的结构模式树 模式树通常可以包含以下类型的节点 sequence节点 匹配一系列项目 零个或
  • 定点数学比浮点运算快吗?

    多年前 即 20 世纪 90 年代初期 我构建了图形软件包 该软件包基于定点算术和预先计算的 cos sin 表格以及使用牛顿近似方法进行 sqrt 和对数近似的缩放方程来优化计算 这些先进技术似乎已经成为图形和内置数学处理器的一部分 大约
  • 数独算法,暴力破解[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 如何为多边形创建内部螺旋?

    对于任何形状 我如何在其内部创建类似形状的螺旋 这与边界 使用 Minkowski 和 类似 尽管它会是相同形状的螺旋 而不是在形状内部创建相同的形状 我找到了这个 http www cis upenn edu cis110 13su le
  • 什么是“朴素”算法,什么是“封闭式”解决方案?

    我有一些关于描述算法时使用的术语语义的问题 首先 朴素 算法是什么意思 这与给定问题的其他解决方案有何不同 解决方案还可以采取哪些其他形式 其次 我听到很多人提到 封闭式 解决方案 我也不知道这意味着什么 但在尝试解决递归关系时经常会出现
  • Python 旅行商贪婪算法 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 因此 我为旅行推销员问题创建了一种排序 并按 x 坐标和 y 坐标进行排序 我正在尝试实施贪婪搜索 但无法做到 此外 每
  • 为什么这个算法的Big-O复杂度是O(n^2)?

    我知道这个算法的大O复杂度是O n 2 但我不明白为什么 int sum 0 int i 1 j n n while i lt j sum 即使我们设定了j n n一开始 我们在每次迭代期间递增 i 并递减 j 因此最终的迭代次数不应该比n
  • 求先递增后递减列表的最大值和最小值

    我尝试用谷歌搜索这个问题 但没有取得太大成功 我确信这个问题或类似问题有一个技术名称 但我似乎找不到答案 给定一个列表L整数 即严格递增 然后严格递减 找到该列表的最大值和最小值 例如 L可能 1 2 3 4 5 4 3 2 or 2 4
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto
  • JavaScript 中的埃拉托斯特尼筛法对大量数据无限运行

    我一直在尝试写埃拉托斯特尼筛法 http en wikipedia org wiki Sieve of EratosthenesJavaScript 中的算法 基本上我只是按照以下步骤操作 创建从 2 到 n 1 的连续整数列表 令第一个素
  • 排序矩阵的选择算法

    这是谷歌面试问题 给定一个 N N 矩阵 所有行均已排序 所有列均已排序 找到矩阵的第 K 个最大元素 在 n 2 中执行它很简单 我们可以使用堆或合并排序 n lg n 对它进行排序 然后得到它 但是有没有更好的方法 比 n lg n 更
  • 用于查找最近邻居的空间划分算法如何工作?

    为了找到最近的邻居 空间分区 http en wikipedia org wiki Nearest neighbor search Space partitioning是算法之一 它是如何工作的 假设我有一组 2D 点 x 和 y 坐标 并
  • 如何获取一个类的所有实例

    我是一名初学者 正在学习 Python 我想创建一个课程Person 在构造函数中 我想将我创建的每个实例放入一个名为 实例 的集合中 然后我希望实例 方法返回所有实例 我怎样才能做到这一点 class Person Type annota
  • 用于在链表中查找结点的生产代码

    我在一次采访中被问到这个问题 我被要求编写代码 用于在 O 1 空间和线性时间的生产环境中在链表 其形式为 Y 形式 双臂不一定相等 中查找结点 我想出了这个解决方案 我以前在某处见过 1 Measure lengths of both l

随机推荐

  • 无法使用 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 但考虑到我想做的