测量稀疏矢量和30k其他预定义稀疏矢量之间的最小角度

时间:2015-07-28 19:56:39

标签: algorithm sorting statistics computer-science knn

我说有一个稀疏的向量 < 0,0,...,0,8,3,...>

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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