algorithm - 如何在 O(m+n) 中获取两个稀疏向量的点积,其中 m 和 n 是两个向量中的元素数

标签 algorithm big-o linear-algebra

我有两个稀疏向量 X 和 Y,想得到 O(m+n) 的点积,其中 m 和 n 是 X 和 Y 中非零元素的数量。我能想到的唯一方法是选择向量 X 中的每个元素并遍历向量 Y 以查找是否存在具有相同索引的元素。但这需要 O(m * n)。我将矢量实现为链表,每个节点都有一个元素。

最佳答案

如果您的向量存储为元组的链接列表,每个元组包含索引和非零元素的值并按索引排序,您就可以这样做。

您通过从较低索引处的向量中选择下一个元素来遍历两个向量。如果索引相同,则将元素相乘并存储结果。

重复直到一个列表到达末尾。

由于每个列表中的每个非零元素都有一个步骤,因此根据需要复杂度为 O(m+n)。

脚注:数据结构不必是链表,但必须提供 O(1) 方法来访问下一个非 0 元素及其索引。

关于algorithm - 如何在 O(m+n) 中获取两个稀疏向量的点积,其中 m 和 n 是两个向量中的元素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32753310/

相关文章:

Python 3 : Insertion Sort comparisons counter

java - 当 a、b 或 c <= 1000 时,更快地找到所有毕达哥拉斯四元数

algorithm - 渐近分析

c - main() 之外的 Scanf 段错误

algorithm - 在无环图 (E,V) 中,找到总和为 0 的路径

performance - Mathematica 快速二维分箱算法

c - for 循环中 n * n * n 次迭代的时间复杂度是多少?

big-o - 最小交换次数?

c++ - 从四元数到 OpenGL 旋转

c - 在 C 中的 3D 线上查找点