两个十六进制数的相似度

2024-01-11

我试图使用汉明和编辑距离找到类似的哈希值(十六进制哈希值)。假设两个哈希值相似,如果它们的汉明距离小于 10(不同位数)。

Hash 1= ffffff (base 16)
Hash 2= fffff0 (base 16)

两个哈希之间的汉明距离是4。它们是相似的。因为,

Hash 1= 11111111 11111111 11111111 (base 2)
Hash 2= 11111111 11111111 11110000 (base 2)

我有 800 万个这样的哈希值。我想知道存储 800 万个哈希值的合适数据结构是什么。我最初尝试了“Trie”,但考虑以下场景,

Hash 1 = 0fabde (00001111 10101011 11011110)
Hash 2 = adcbfe (10101010 11001011 11111110)

汉明距离是7。所以我无法进行前缀搜索。

我知道我可以使用 XOR 和 Integer.bitCount() 来获取不同位数,但我有一个目标哈希和 800 万个哈希来搜索,即给定一个哈希,我必须在 800 万个哈希中找到所有相似的哈希我们在存储库中拥有的。

有什么方法可以有效地存储哈希值,从而减少我的搜索库?


如果哈希值如图所示那么小,您可以“直接”对它们进行索引 - 也就是说,将它们放入一个大数组中,然后对索引进行一些数学计算。

仅生成可能对应于请求的汉明距离内的哈希值的索引非常简单d,只需将密钥与包含最多包含的所有掩码进行异或d设置位(见下文)。由于有 800 万个哈希值,但只能存在 1600 万个,因此预计大约一半的访问索引是“有用的”,即可以找到一些东西。

要生成掩码,您可以使用旧的下一个位排列 https://graphics.stanford.edu/~seander/bithacks.html#NextBitPermutation例如,该技巧之前已在 StackOverflow 上发布过多次here https://stackoverflow.com/q/8281951/555045。对于java,只需使用逻辑右移和替换__builtin_ctz by numberOfTrailingZeros得到(未测试)

int t = v | (v - 1);
int w = (t + 1) | (((~t & -~t) - 1) >>> (Integer.numberOfTrailingZeros(v) + 1));

Here w将是之后的位排列v.

全局结构类似于(未测试)

for (int k = 1; k <= d; k++) {
    int diff = (1 << k) - 1;
    while (diff <= 0xFFFFFF) {
        if (hashes[key ^ diff])
            // do something with it
        diff = nextBitPermutation(diff);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个十六进制数的相似度 的相关文章

  • 使用 Java 的 Apache Http 摘要身份验证

    我目前正在开发一个 Java 项目 但无法使 http 摘要身份验证正常工作 我尝试使用 Apache 网站 但没有帮助 我有一个需要 HTTP 摘要身份验证的网站 DefaultHttpClient httpclient new Defa
  • java中监视目录变化

    我正在使用 WatchService 来监视目录中的更改 特别是目录中新文件的创建 下面是我的代码 package watcher import java nio file import static java nio file Stand
  • 如何在由子控件组成的 SWT 复合材料上跟踪鼠标?

    我创建了自己的控件 我想跟踪鼠标并添加一个MouseTrackListener 很遗憾MouseEnter and MouseLeave当鼠标移动到我的合成部分 即标签和按钮 上时 也会生成事件 Mouse enter mouse ente
  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是
  • 如何在 JPQL 或 HQL 中进行限制查询?

    在 Hibernate 3 中 有没有办法在 HQL 中执行相当于以下 MySQL 限制的操作 select from a table order by a table column desc limit 0 20 如果可能的话 我不想使用
  • Android studio - 如何保存先前活动中选择的数据

    这是我的代码片段 这Textview充当按钮并具有Onclicklistner在他们 当cpu1000时Textview单击它会导致cpu g1000其代码如下所示的类 public class Game 1000 extends AppC
  • 将巨大的模式编译成Java

    有两个主要工具提供了将 XSD 模式编译为 Java 的方法 xmlbeans 和 JAXB 问题是 XSD 模式确实很大 30MB 的 XML 文件 大部分模式在我的项目中没有使用 所以我可以注释掉大部分代码 但这不是一个好的解决方案 目
  • Mockito 使用 @Mock 时将 Null 值注入到 Spring bean 中?

    由于我是 Spring Test MVC 的新手 我不明白这个问题 我从以下代码中获取了http markchensblog blogspot in search label Spring http markchensblog blogsp
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • 从jar中获取资源

    我有包含文件的 jar myJar res endingRule txt myJar wordcalculator merger Marge class 在 Marge java 中我有代码 private static final Str
  • Akka 与现有 java 项目集成的示例

    如果我已经有现有的javaWeb 应用程序使用spring and servlet容器 将 Akka 集成到其中的正确方法是什么 就像我将会有Actor1 and Actor2互相沟通的 开始使用这些演员的切入点是什么 例如 1 把它放在那
  • Jetty、websocket、java.lang.RuntimeException:无法加载平台配置器

    我尝试在 Endpoint 中获取 http 会话 我遵循了这个建议https stackoverflow com a 17994303 https stackoverflow com a 17994303 这就是我这样做的原因 publi
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • Spring @Cacheable 和 @Async 注解

    我需要缓存一些异步计算的结果 具体来说 为了克服这个问题 我尝试使用 Spring 4 3 缓存和异步计算功能 作为示例 我们采用以下代码 Service class AsyncService Async Cacheable users C
  • 将 JavaFX FXML 对象分组在一起

    非常具有描述性和信息性的答案将从我这里获得价值 50 声望的赏金 我正在 JavaFX 中开发一个应用程序 对于视图 我使用 FXML
  • 手动设置Android Studio的JDK路径

    如何为 Android Studio 使用自定义 JDK 路径 我不想弄乱 PATH 因为我没有管理员权限 是否有某个配置设置文件允许我进行设置 如果您查看项目设置 您可以从那里访问 jdk 在标准 Windows 键盘映射上 您可以在项目
  • 列表过滤器内的 Java 8 lambda 列表

    示例 JSON id 1 products id 333 status Active id 222 status Inactive id 111 status Active id 2 products id 6 status Active
  • 抛出 Java 异常时是否会生成堆栈跟踪?

    这是假设我们不调用 printstacktrace 方法 只是抛出和捕获 我们正在考虑这样做是为了解决一些性能瓶颈 不 堆栈跟踪是在构造异常对象时生成的 而不是在抛出异常对象时生成的 Throwable 构造函数调用 fillInStack
  • Java 11 - 将 Spring @PostConstruct 替换为 afterPropertiesSet 或使用 initMethod

    我正在使用 spring 应用程序 有时会使用 PostConstruct用于代码和测试中的设置 看来注释将被排除在外Java 11 https www baeldung com spring postconstruct predestro
  • Java 和/C++ 在多线程方面的差异

    我读过一些提示 多线程实现很大程度上取决于您正在使用的目标操作系统 操作系统最终提供了多线程能力 比如Linux有POSIX标准实现 而windows32有另一种方式 但我想知道编程语言水平的主要不同 C似乎为同步提供了更多选择 例如互斥锁

随机推荐

  • iOS 如何处理 URL 方案重复?

    如果另外 2 个应用程序注册相同的 url 方案 iOS 如何处理这个问题 The iOS 文档 http developer apple com library ios documentation iPhone Conceptual iP
  • 调试测试时使用 DatabaseManager 连接到内存 Hsql(高超音速)数据库

    我想在 IDE Intellij IDEA 11 1 2 中调试测试时使用 hsql DatabaseManager 或 swing 版本 这并不重要 连接到内存中的 HSQL 数据库实例 我已经按照建议尝试过这个答案 https stac
  • 在 C# 中显示带有 alpha 通道的 PNG

    有没有办法在 C 应用程序中正确显示带有 alpha 通道的图像 比如说 PNG 感谢您的任何建议 UPDATE 好吧 我的问题有点不准确 我想获得 Alpha 通道的真正透明度 不填充父级的背景颜色 在下图中我们可以看到支持透明度 但按钮
  • Objective C 类别的实例变量

    我遇到的情况是 我似乎需要将实例变量添加到类别中 但我从 Apple 的文档中知道我不能这样做 所以我想知道最好的替代方案或解决方法是什么 我想要做的是添加一个类别 为 UIViewControllers 添加功能 我会发现它在我所有不同的
  • 在大型分箱数据集上使用“ggplot”时出现内存泄漏

    我正在制作各种ggplot在非常大的数据集上 比示例大得多 我在 x 轴和 y 轴上创建了一个分箱函数 以便能够绘制如此大的数据集 在下面的示例中 memory size 是在开始时记录的 然后将大数据集模拟为dt dt s x2是针对x1
  • SQL Server 的自定义处理器 + DBCPConnectionPool:未加载驱动程序 jar

    I have created a controller service to connect to a test db 我有一个自定义处理器 可以从 SQL Server 读取数据 模拟测试 构建和部署到 NiFi 都成功 处理器遇到错误
  • PHP 5.5.X 及更高版本中是否需要再使用 & 符号?

    我到处都收到混合信号 我是否使用 符号通过引用传递变量 以下链接似乎告诉我它已被弃用并且不再需要 http gtk php net manual en html tutorials tutorials changes references
  • 我可以将 LayoutPrams 与 ViewGroup.addView 一起重复使用吗?

    Does ViewGroup addView clones LayoutParams数据放到里面还是链接到呢 我可以重用同一个实例吗LayoutParams多次调用addView 有不同的看法吗 apidoc 中没有任何相关内容 WOW 答
  • 压缩后的位图质量=比原始文件大小大 100 倍

    我正在尝试将图像发送到服务器 在发送之前 我会减小其大小和质量 然后解决任何旋转问题 我的问题是 旋转图像后 当我保存它时 文件比以前大 旋转前大小为 10092 旋转后大小为 54226 Scale image to reduce it
  • 表值函数和实体框架

    我正在尝试使用实体框架执行 TVF 但由于某种原因它不起作用 也许那里的任何人都可以帮助我解决这个问题 以下是代码示例 这就是函数 CREATE FUNCTION dbo udf profileSearch keywords NVARCHA
  • Kotlin:创建自定义 CoroutineContext

    我在 API 后端使用 Kotlin 我不想在中运行数据库查询common pool 基本上 我想创建一个CoroutineContext有许多与数据库匹配的线程maximumPoolSize 完成此任务的最佳方法是什么 一般情况下以及针对
  • 为什么有些项目的 use 子句接受 Jpeg,而其他项目则需要 vcl.imaging.jpeg?

    我正在将一些项目更新到 XE2 但我不明白为什么在某些项目上 uses jpeg 被接受 在其他方面我需要写 uses vcl imaging jpeg 你能给我解释一下吗 差异在于各个项目的项目选项中的单元范围名称设置 如果你有Vcl I
  • 如何用单斜杠替换特殊字符

    我有一个关于 Java 中字符串的问题 比方说 我有一个像这样的字符串 String str The startup trace state is info 由于字符串包含特殊字符 例如 我需要将字符串替换为 根据我的要求 如何替换特殊字符
  • R {targets} 包:如何使用字符串引用现有目标?

    我正在使用 targets 包 尝试根据现有目标创建新目标 虽然通过以 NSE 样式键入名称来引用现有目标很简单 但通过使用字符串作为 别名 却无法做到这一点 只是为了清楚我在说什么 我会表明我的意思outside the targets
  • 在 DatePickerDialog 中以数字格式而不是字母顺序显示月份字段

    下图显示了我在 Android 应用程序中的当前日期选择器 但是我想将所有月份显示为 01 02 03 12 而不是一月 二月 三月 十二月 任何帮助将不胜感激 你可以自己设计Dialog with NumberPicker 但如果你仍然想
  • Symfony 一次性实例化一项服务并与多个用户一起使用

    我正在尝试做一项仅实例化一次的服务 然后当新用户访问我的主页时 我可以在需要时重新使用它 我想做的是一个实例化后设置日期时间的服务 当任何用户连接到我的主页时 我会向我的服务发送一个日期时间 然后比较两个日期时间 实例化服务时的日期时间和用
  • 将 AWS API Gateway API 端点的 IP 列入公司防火墙中的白名单

    我已经构建了一个 AWS API Gateway API 端点 该端点将被我公司网络中的一台机器命中 以每隔一定时间间隔发布数据 但是 当我通过 Postman 从办公室网络尝试它时 办公室防火墙会阻止它 但是当我使用移动热点 其他 wif
  • 分配变量并显示结果

    我收到 T ECHO 意外错误 完成上述任务的正确方法是什么 我稍微扩展一下这个问题 这是一段 wordpress 代码 get option 函数不回显该值 所以我尝试了
  • java - HashMap 中的内容适当的数据

    想象一下您有一本学生评价日记 每个学生在日记中都有每个科目的分数 我想将其存储在HashMap lt gt 但我不明白为什么标记会合并 在期刊课上 public class Journal private static HashMap
  • 两个十六进制数的相似度

    我试图使用汉明和编辑距离找到类似的哈希值 十六进制哈希值 假设两个哈希值相似 如果它们的汉明距离小于 10 不同位数 Hash 1 ffffff base 16 Hash 2 fffff0 base 16 两个哈希之间的汉明距离是4 它们是