3

我正在尝试找到一种方法来快速访问(优于 O(n))来存储我的数据。

我的数据库由代表有关某些项目的一些信息的数据(4096 字节字符串)组成。
问题是,查询永远不会准确。我得到一个项目,然后需要使用函数找到最接近的匹配项F(a,b)

只是一个例子:

1234
3456
6466
F(a,b) = return % of similar digits  

GetClosest(1233,F) = 1234

问题是 F(a,b) 是一个复杂的算法,(不是一个适当的度量)。

我现在所拥有的只是遍历整个数据库以搜索最佳匹配。
是否有一种树或其他集群数据库类型可以让我更快地找到复杂性?

更多信息:

F 以百分比返回相似度值。其中 100% 是完美匹配。

4

2 回答 2

1

抱歉,答案是“可能不是”,除非您的问题还有一些您没有描述的结构。使用 4096 字节的字符串,您正遭受维度诅咒

如果您有较短的字符串和足够的数据,那么最接近的匹配很可能在大部分字符串上是相同的,那么您可以使用多个树状结构来存储您的数据,这些结构在不同的字符串块上建立索引。最接近的很可能足够接近,以至于您可以仅根据这些树中的接近元素证明它是最近的。但是,由于字符串的大小和可以存储在计算机中的数据有限,这不可能奏效。

也就是说,您需要最接近的,还是只需要稍微接近的?如果只是一个可能接近的,那么您可以通过几个随机稀疏位样本对其进行索引。在您的搜索中,您只能检查与其中一个元素完全匹配的元素。这将大大减少搜索空间,同时拒绝更少的近邻,并可能产生合理的(即使经常是错误的)答案。

于 2011-05-10T14:44:06.227 回答
0

有什么方法可以为每个数据分配一个“分数”。

您可以按分数对数据进行索引/排序。

当您搜索时,您会为搜索条件分配一个分数,然后查找分数最接近的项目。

这在很大程度上取决于您的数据和您对“差异”的定义是否可行。

于 2011-05-10T09:34:14.740 回答