给定两个整数,它们的长度可能不相等,如何通过在两个向量之间的对应数字对之间选择最大值,并在较短的向量中插入额外的零以弥补大小差异,来确定可能的最大结果?
例如,考虑以下两个向量作为输入:
[8 1 4 5]
[7 3 6]
插入零和结果和的选择是:
[0 7 3 6] => Maximums: [8 7 4 6] => Sum is: 25
[7 0 3 6] => Maximums: [8 1 4 6] => Sum is: 19
[7 3 0 6] => Maximums: [8 3 4 6] => Sum is: 21
[7 3 6 0] => Maximums: [8 3 6 5] => Sum is: 22
因此,在这种情况下,算法应返回25。
我可以通过用蛮力计算出将零置入较小矢量的所有排列来完成此操作(如上所述),但这在计算上是昂贵的,并且在一个矢量恰好是另一个矢量大小的一半的情况下最糟。
即使矢量的长度不同,是否有一种方法可以在线性时间内计算与较长矢量的长度成正比的答案?如果不是,我们可以做得比选择的阶乘置换更好吗?
3
我正在使用它来计算另一种搜索算法的最大结果,该算法与对两个句子的相似程度进行排名有关。正确,不接受重新排序。
—
WilliamKF
我们是否承诺过向量长度之间的差异?在您的示例中,只有一个缺少零。如果您知道丢失的零的数目很小,那么有更有效的算法(例如,如果丢失的零的数目是常数,则可以使动态编程算法在线性时间中运行)。
—
DW