【问题标题】:Optimizing time and space complexity of algorithm优化算法的时间和空间复杂度
【发布时间】:2015-01-21 22:53:41
【问题描述】:

如何对其进行优化,使其在时间和空间复杂性方面更有效,同时产生相同的输出?

def not-optimal(A):
   N = len(A)
   result = 0
   for i in xrange(N):
      for j in xrange(N):
        if A[i] == A[j]:
            result = max(result, abs(i - j))

【问题讨论】:

  • 你的目标是什么?这是一个纯粹的理论问题吗?如果是这样,您应该在the CS stackexchange 提问。
  • 这不是理论上的,我们应该编写优化上述功能的新代码。 :)

标签: optimization time-complexity space-complexity


【解决方案1】:

最好不要从代码开始,而是从代码的作用开始。此代码返回数组中任意两个彼此相等的元素之间的最大距离。现在的问题是,您是否可以找到一种不同的算法来实现同样的目标,而且时间或空间更少。

您可以通过几种不同的方式在这里以时间换取空间。这是一个简单的选项:创建一个哈希表,将每个元素映射到它出现的 last 索引。这需要预期的时间 ​​O(n)。然后,第二次遍历数组,对于每个元素,查看该元素的最后一个副本的索引并计算到该元素的距离,跟踪您迄今为止看到的最大的那个。第二步需要时间 O(n),因此整个算法需要预期时间 O(n) 并使用空间 O(n)。这是对上述 O(n2) 时间、O(1) 空间算法的时间改进。

您不能渐近地改进该算法的空间复杂度,因为它使用空间 O(1)。充其量你会从空间使用中减少一个常数因素,但你的算法是如此节省空间,我无法想象这真的很重要。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2020-10-31
    • 2012-08-14
    • 2020-04-02
    • 1970-01-01
    相关资源
    最近更新 更多