0

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

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

我的问题是:如果可以,这是否可能。使此过程尽可能快速和高效的最佳方法是什么?我自己,我在考虑某种树,但是树太多了,我不知道哪一种最适合我的问题。

编辑:

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

D B

4

1 回答 1

0

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

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

  1. 找出随机向量与数据库中前 10 个向量的距离,并将它们存储在大小为 10 的最大堆中。因此,根将是迄今为止离随机向量最远的向量。
  2. 一一比较并找到从随机向量到所有其他向量的距离。
  3. 对于每次比较,如果找到的距离小于最大堆的根,则从堆中提取最大元素,并在堆中插入最新的向量。
  4. 最后,您的堆中将有 10 个最接近的向量。

也就是说,您的问题空间似乎很小。因此,您可以按照评论中的建议使用蛮力。

于 2012-12-25T15:52:41.890 回答