查找30维向量的10个最接近的匹配,什么数据结构?

时间:2012-12-25 12:43:49

标签: algorithm data-structures tree nearest-neighbor

我有一个30维度的向量,我想在我的数据库中找到10个最接近的匹配项。我的DB中有大约3000个向量,我要将它与之进行比较。有些尺寸比其他尺寸更重要,所以我想给它们所有单独的重量。

30个维度是由10倍RGB值构建的。我将一张图片拆分为9个图块。所以9 * 3(RGB)27。最后三个值是图片平均颜色的RGB。

我的问题是:这是否可行,如果是的话。使这个过程尽可能快速有效的最佳方法是什么?我自己,我在想某种树,但是有很多树,我不知道哪一棵树最适合我的问题。

编辑:

我想我对自己想要达到的目标并不完全清楚。我有一个随机向量,我想将这个与我的数据库中的向量进行比较,找到10关闭。我有一个包含所有载体的数据库。我将它们存储在MySQL数据库中,每一行都是一个向量。见下文

DB

1 个答案:

答案 0 :(得分:0)

这个问题类似于当你有太多的参考点时找到n个最近点的问题。

假设您知道如何比较两个向量以找到它们之间的“距离”,您可以使用最大堆。使用随机向量的距离作为比较来自db的两个向量的关键。也就是说,

  1. 从数据库中的前10个向量中找出随机向量的距离,并将它们存储在大小为10的最大堆中。因此,根将是距离随机向量最远的向量。
  2. 逐个比较并找到从随机向量到所有其他向量的距离。
  3. 对于每次比较,如果找到的距离小于最大堆的根,则从堆中提取max元素并在堆中插入最新的向量。
  4. 最后,你的堆中将有10个最接近的向量。
  5. 那就是说,你的问题空间似乎很小。因此,您可以按照评论中的建议使用蛮力。