如何有效计算 SQL 中二进制字符串之间的汉明距离?

Linda Hamilton
发布: 2024-10-25 06:11:29
原创
850 人浏览过

How can I efficiently calculate Hamming distance between binary strings in SQL?

SQL 中二进制字符串的汉明距离计算

问题陈述:

数据库表通常将 SHA256 哈希值存储为二进制值。汉明距离表示两个哈希值之间按位差异的数量,是相似性分析的关键指标。本文旨在提供一种 SQL 解决方案来计算给定值与指定列中每个哈希之间的汉明距离。

现有低效方法:

将二进制字符串分解为更小的整数块,计算每个块的汉明距离,然后对结果求和是一种麻烦且性能有限的方法。

改进的方法:

将哈希值存储在多个 BIGINT 列而不是单个 BINARY 列中显着改进表现。这允许创建可以有效计算多个 BIGINT 值之间的汉明距离的自定义函数。

BIGINT 的汉明距离函数:

可以创建以下自定义函数来计算之间的汉明距离四个 BIGINT:

<code class="sql">CREATE FUNCTION HAMMINGDISTANCE(
  A0 BIGINT, A1 BIGINT, A2 BIGINT, A3 BIGINT, 
  B0 BIGINT, B1 BIGINT, B2 BIGINT, B3 BIGINT
)
RETURNS INT DETERMINISTIC
RETURN 
  BIT_COUNT(A0 ^ B0) +
  BIT_COUNT(A1 ^ B1) +
  BIT_COUNT(A2 ^ B2) +
  BIT_COUNT(A3 ^ B3);</code>
登录后复制

使用示例:

使用此函数,您可以使用以下查询按表条目到提供值的汉明距离对表条目进行排序:

<code class="sql">SELECT * FROM table 
  ORDER BY HAMMINGDISTANCE(col0, col1, col2, col3, UNHEX(<insert supplied sha256 hash here>)) ASC 
  LIMIT 10</code>
登录后复制

结论:

将 SHA256 哈希值拆分为四个 BIGINT 列并使用自定义函数是在 SQL 中计算汉明距离的高效方法。与将哈希值存储为 BINARY 值和采用传统的基于整数的计算相比,此方法显着提高了性能。

以上是如何有效计算 SQL 中二进制字符串之间的汉明距离?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!