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
上面的不平等是真的吗?
如果是,有人能提供证据吗?
我这么问是因为如果上面的不平等是真的
我使用的索引可以减少查询时间
最佳答案
这是一个证明,也许可以做得更简单,但也不算太糟。
在对位串长度进行归纳的情况下,基本情况是空字符串,对于空字符串,不等式明显成立。
归纳步骤是在a和b上加上一点(或者加上一点,没有任何区别)。
如果我们将两者都设为0,则popcnt不会改变,因此不等式仍然成立。
如果我们将0前置到其中一个,而将1前置到另一个,则它们的异或将多设置一个位,因此lhs将增加1。在RHS中,其中一个POPCNT向上(不管是哪一个,绝对差是可交换的),结果RHS要么上升1(与LHS相同,没有问题),要么下降1(仍然可以,RHS允许小于LHS,但这就是为什么它不是一个等式)
如果我们将两者都设为1,则它们的xor不会改变,因此lh保持不变。在rhs中,两个popcnt都增加了1,它们互相抵消,因此rhs也保持不变。
因此,这个不等式适用于任何长度的位字符串。
关于mysql - 两个整数的汉明距离mysql,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41299099/