【问题标题】:Hamming distance of two integers mysql两个整数mysql的汉明距离
【发布时间】:2017-05-09 00:30:13
【问题描述】:

mysql 架构和查询在这里

http://sqlfiddle.com/#!9/444873/1

查询似乎有效,只返回给我的行 汉明距离小于 7 位。

似乎以下属性适用:

bit_count(a ^ b ) >= abs(bit_count(a) - bit_count(b))

一些例子

                bit_count
a     1111       4
b     0000       0
a^b   1111       4

a     1010       2
b     0110       2
a^b   1100       2

a     1001       2    
b     1001       2
a^b   0000       0

上面的不等式是真的吗?

如果是,有人可以提供证据吗?

我问这个是因为如果上面的不等式是真的,那么 我使用的索引对于减少查询时间很有意义

【问题讨论】:

  • 是真的(用SMT求解确定),还没有证据

标签: mysql algorithm math computer-science proof


【解决方案1】:

这是一个证明,它可能可以做得更简单,但还不错。

通过对位串长度的归纳,基本情况是空字符串,不等式显然成立。

归纳步骤是在 A 和 B 前面加一点(或追加,没有任何区别)。

  • 如果我们在两者前面加上 0,popcnts 不会改变,因此不等式仍然成立。
  • 如果我们在其中一个前面加上 0 而在另一个前面加上 1,则它们的 XOR 将再设置一个位,因此 LHS 上升 1。在 RHS 中,popcnts 之一上升(不管哪个, 绝对差是可交换的),因此 RHS 将 up 上升 1(与 LHS 相同,没问题)或 down 1 (仍然可以, RHS 可以小于 LHS,但这就是它不相等的原因)
  • 如果我们在两者前面加上 1,它们的 XOR 不会改变,因此 LHS 保持不变。在 RHS 中,两个 popcnt 都上升 1,它们相互抵消,所以 RHS 也保持不变。

因此,这种不等式适用于任何长度的位串。

【讨论】:

  • 很好的解释
猜你喜欢
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多