database - 在数据库中存储和索引二进制字符串

标签 database algorithm indexing binary hamming-distance

此处定义的二进制字符串是固定大小的位“数组”。我称它们为字符串,因为它们没有顺序(将它们排序/索引为数字没有意义),每一位都独立于其他位。每个这样的字符串都是 N 位长,N 以百为单位。

我需要存储这些字符串,并使用汉明距离作为距离度量,为最近的邻居提供一个新的二进制字符串查询。
有专门的数据结构(度量树)用于基于度量的搜索(VP 树、覆盖树、M 树),但我需要使用常规数据库(在我的例子中是 MongoDB)。

是否有一些索引函数可应用于二进制字符串,以帮助数据库在执行一对一汉明距离匹配之前仅访问记录的子集? 或者,如何在标准数据库上实现这种基于汉明的搜索?

最佳答案

汉明距离是一个度量,因此它满足三角不等式。对于数据库中的每个位串,您可以将它的汉明距离存储到某个预定义的常量位串。然后就可以利用三角不等式过滤掉数据库中的位串。

让我们说

C <- some constant bitstring
S <- bitstring you're trying to find the best match for
B <- a bitstring in the database
distS <- hamming_dist(S,C)
distB <- hamming_dist(B,C)

因此对于每个 B,您将存储它对应的 distB

hamming(B,S) 的下界将是 abs(distB-distS)。上限为 distB+distS

您可以丢弃所有 B,使得下限高于最低上限。

对于选择哪个 C 的最佳方式,我不是 100% 确定。我想您会希望它是一个靠近您的位串度量空间“中心”的位串。

关于database - 在数据库中存储和索引二进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6597713/

相关文章:

MySQL LIMIT 优化问题

mysql - 如何在MySQL中选择一个范围内的日期?

javascript - 自下而上的树遍历

mysql - 如何识别最适合索引的列

基于 $in 的 MongoDB 索引?

c# - "System.Data.OleDb.OleDbException: ' INSERT INTO 语句中的语法错误。 '"

python - 使用python获取Redis数据库中的所有键

java - Dijkstra algorithm alternatives - graph, bus routes 中的最短路径

javascript - 路径生成算法混淆

algorithm - 文本搜索算法