【发布时间】:2016-05-26 12:21:53
【问题描述】:
我想获得一些想法,以找到一种快速方法来获得 2 个向量之间的最大差异就像它们是累积的一样。
例如,(尚未累积)
vector<int> vec1 = {10, 30, 20, 40 };
vector<int> vec2 = {5, 10, 5, 8 };
获取结果的简单方法是先将它们累积到新向量中,因此:
vector<int> accumulated_vec1 = {10, 10+30, 10+30+20, 10+30+20+40};
vector<int> accumulated_vec2 = {5, 5+10, 5+10+5, 5+10+5+8};
即:
accumulated_vec1 = {10,40,60,100};
accumulated_vec2 = {5,15,20,28};
然后,结果是abs(accumulated_vec1[i]-accumulated_vec2[i]) 与 0
所以result = 72(当 i==3 时)
更快的方法是用 1 个数字(甚至 0.10302040)表示向量...但我觉得它没有帮助:\ 认为我有数百万对 2 个向量 vec1 和 vec2,我正在尝试避免计算每一对的累积向量。如果不清楚,很抱歉,但如果我找到解决方案,我会回答这个烦人的问题。
【问题讨论】:
-
这看起来很简单......(您可以即时计算累积,无需将其存储在另一个向量中)。你遇到了什么问题?
-
对不起,忘了说我需要累积向量用于其他函数中的其他计算。我只是想考虑将它们保存在向量之外的其他结构中。也许,其他方式,例如六角\数字(不知何故)。想想我有数百万对这样的对
-
您的代码已经相当快了,但请确保您在累积的向量上调用
.reserve()以避免在将内容推回其中时重新分配(我假设您正在将其填充到里面实际代码中的循环)。如果你确实有很多你刚才说的元素,这将是对你的代码的一个很好的优化。 -
我不知道你的问题到底是什么。是如何将部分总和计算到
vectors 中?还是什么? -
@ErezShmiel 我不太明白你的问题。在问题中您说“好像它们是累积的”,这表明您正在寻找一种替代方法来避免累积和复制到其他向量,然后在您的评论中说 您需要其他事物的两个累积向量。如果您确实需要这些向量用于其他计算,那么真的没有办法避免这些向量的计算,对吧?如果您确实需要该数据,则不能跳过该步骤。我对你到底需要什么感到困惑。