【发布时间】:2018-03-02 01:22:34
【问题描述】:
假设我有一堆数字对,除了计算所有平方和并将其与当前最大值进行比较之外,是否有一个好的算法可以找到平方和最大的对?
例如 输入:
[3, 3]
[0, 3]
[4, 0]
[2, 4]
输出:
[2, 4](平方和:20)
【问题讨论】:
-
您至少需要解析所有对,不是吗?所以这不能比“蛮力”测试每一对更短。排序是个坏主意,因为它的成本不仅仅是解析列表。
-
如前所述,您需要解析整个列表一次。但是,如果您的列表很大,则不需要创建一个新的“SumSquare”值列表[这也会消耗内存]。您可以使用生成器懒惰地评估最大值。这是你要找的吗?
-
我的重点不是解析。我想知道我是否必须粗暴地计算所有平方和并将其与当前最大值进行比较?或者是否有可能避免计算所有这些平方?
-
遍历一个长列表的成本可能与计算成本一样高。您需要执行 一些 计算来找到最大值。如果你说,能不能把 3 次计算(
x*x、y*y、sum)减少到小于 3,我看不出有什么办法。 -
不过,这也取决于数据的分布方式。如果重复值和对的可能性很高,则其他策略看起来很有希望,而不是具有均匀分布值的大值基。