将向量的元素与同一向量的所有元素相乘

Multiply elements of a vector with all elements of same vector

本文关键字:元素 向量      更新时间:2023-10-16

我正在尝试解决一个问题,我想将向量的元素与同一向量的所有元素相乘(也与自身相乘)。

我有一个有效的解决方案,如下所示:

for(int i=0;i<v.size();i++)
        {
            for(int j=0;j<v.size();j++)
            {
                r.insert(v[i]*v[j]);
            }
        }

在这里,v是最初存储元素的向量,r是我存储产品的向量。

我面临的问题

这是一个 O(N^2) 算法,我想在 O(N) 时间内实现这一点。有什么办法可以做到这一点吗?谢谢。

编辑 1:

实际上,我想在通过将向量的元素与其他元素相乘而获得的数字列表中找到第 n 个最大的数字。我的方法是:

  1. 查找乘积并将值存储在向量中。(时间- O(N^2) )。
  2. 对向量进行排序。(时间 - O(N logN) )
  3. 通过索引访问查找第 n 个最大数字。

我想提高 N^2 的时间复杂度。

您可以做的是避免两次计算相同的值。事实上,使用您的解决方案,所有货币对都将乘以两次。如果在矩阵中显示结果值,则最好看到这一点:

input: [a, b, c]
output:
aa ba ca
ab bb cb
ac bc cc

您可以看到对角线两侧的对称性。这意味着在计算第 n 列时,您只需要计算size of input - n值,因为其他n已经存在于前面的列中,您可以在其中检索它们。

请注意,这对算法的复杂性没有影响。

这个问题在当前公式中无法O(n)时间内解决,因为输出具有O(n^2)元素。