【问题标题】:Measuring smallest angle between a sparse vector and 30k other predefined sparse vectors测量稀疏向量和 30k 其他预定义稀疏向量之间的最小角度
【发布时间】:2015-10-19 13:49:04
【问题描述】:

我有一个稀疏向量,比如说

我想从一组预定义的 30k 个向量中找到 k 个最近的向量。我正在做的特定“近”计算类似于标量乘法以找到向量之间的角度。

有没有办法优化这个过程(除了进行 30k 计算并保存前 k 个结果的天真方法)?我对优化运行时间感兴趣,而不是内存

【问题讨论】:

  • 如果你把它想象成O(N * D),你可能会得到一些改进,其中N是向量的数量,D是向量的维数。对于某些输入,可能会获得更好的结果。 IE:其中大多数(在这种情况下超过 k)向量并不接近查询向量。您还可以使用仔细的近似和/或向量分组。即使在最好的情况下,你也会得到O(D + k)

标签: algorithm sorting statistics computer-science knn


【解决方案1】:

一个简单的解决方案是预先计算所有角度并将它们存储在查找表(上三角矩阵)中。那将花费 30k * 30k / 2 = 450m。那将是最快的。

【讨论】:

    【解决方案2】:

    有一个可能相关的问题被认为没有任何不明显的加速。这是在 n 的列表中找到一对正交布尔向量的问题。在某些情况下,成本可能是不可约的 O(n^2) - 参见例如http://theory.stanford.edu/~virgi/conclusions-amir.pdf 的幻灯片 4。如果它更低,我们可以比 O(2^n) 更快地完成 SAT,这被认为很难。这至少意味着很多人都关注过这个问题,却一无所获。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 2014-03-07
      • 2015-10-09
      • 2013-07-28
      • 1970-01-01
      • 2013-02-16
      相关资源
      最近更新 更多