Optimization 优化算法的时空复杂度

Optimization 优化算法的时空复杂度,optimization,time-complexity,space-complexity,Optimization,Time Complexity,Space Complexity,如何对其进行优化,使其在时间和空间复杂度方面都更高效,同时产生相同的输出 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)) 最好不要从代码开始,而是从代码的功能开始。此代码返回数组中彼此相等的任意两个元素之间的最大

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

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))

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

你可以用几种不同的方式来交换时间和空间。这里有一个简单的选项:创建一个哈希表,将每个元素映射到它出现的最后一个索引。这需要预期的时间O(n)。然后,对数组进行第二次迭代,对于每个元素,查看该元素最后一个副本的索引,并计算到该元素的距离,跟踪到目前为止看到的最大的一个。第二步需要时间O(n),因此整个算法需要预期的时间O(n)并使用空间O(n)。这是对上面的O(n2)时间,O(1)-空间算法的时间改进

由于该算法使用的是空间O(1),因此无法渐进地提高该算法的空间复杂度。充其量你会从空间使用中剔除一个常数,但你的算法是如此节省空间,以至于我无法想象这真的会有什么关系


希望这有帮助

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