【问题标题】:Algorithm for finding the largest sum of squares求最大平方和的算法
【发布时间】:2018-03-02 01:22:34
【问题描述】:

假设我有一堆数字对,除了计算所有平方和并将其与当前最大值进行比较之外,是否有一个好的算法可以找到平方和最大的对?

例如 输入:

[3, 3]
[0, 3]
[4, 0]
[2, 4]

输出: [2, 4](平方和:20)

【问题讨论】:

  • 您至少需要解析所有对,不是吗?所以这不能比“蛮力”测试每一对更短。排序是个坏主意,因为它的成本不仅仅是解析列表。
  • 如前所述,您需要解析整个列表一次。但是,如果您的列表很大,则不需要创建一个新的“SumSquare”值列表[这也会消耗内存]。您可以使用生成器懒惰地评估最大值。这是你要找的吗?
  • 我的重点不是解析。我想知道我是否必须粗暴地计算所有平方和并将其与当前最大值进行比较?或者是否有可能避免计算所有这些平方?
  • 遍历一个长列表的成本可能与计算成本一样高。您需要执行 一些 计算来找到最大值。如果你说,能不能把 3 次计算(x*xy*ysum)减少到小于 3,我看不出有什么办法。
  • 不过,这也取决于数据的分布方式。如果重复值和对的可能性很高,则其他策略看起来很有希望,而不是具有均匀分布值的大值基。

标签: algorithm sorting


【解决方案1】:

要使用二分搜索,您需要对列表进行排序。这引发了两个问题(上面提到或暗示过):

  • 您没有有序的收藏
  • 最佳排序是 O(n log n)

两个平方和很简单:两次数据访问,两次乘法和一次加法。在线性 CPU 上,这流水线到 3 个廉价(即单周期)操作。在现代 AI 处理器上,这是一个单周期点积。

简而言之,不仅线性的蛮力方法只有 O(n),而且快速 O(n) .拿了钱就跑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 2011-01-19
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多