不寻常的时空复杂性

时间:2017-06-14 17:20:40

标签: python time-complexity big-o space-complexity

考虑一个由正整数组成的列表A.是否有以下算法

for i in range(sum(A)-min(A)):
    print 'Hello world!'

O(sum(A)-min(A))时间复杂度? Table of common time complexitiessum(), min() or max()等函数没有任何说明。

以下算法的空间复杂度可由O(sum(A)-min(A))表示:

output = [True for i in range(sum(A)-min(A))]

2 个答案:

答案 0 :(得分:0)

复杂性函数的形式为 f(N),其中 N 是问题的大小。您提出的复杂功能不是这种形式,因此是不正确的。

答案 1 :(得分:0)

  

在计算机科学中,算法的时间复杂度量化   算法作为函数运行所花费的时间量   表示输入的字符串的长度

严格地说,我们的时间复杂度函数应为T(N),其中N - 是输入的长度。但有时使用普通输入大小并不容易。我们可以定义一些其他参数来衡量输入的大小(例如,我们经常使用|V||E|中的图形问题。)

在您的情况下,输入是一个正整数序列。让我们定义新参数:n - 整数,以及b - 可以表示输入中任何数字的最大位数。 N = O(n*b)。用(n, b)术语表达此代码的复杂性更为方便。

sum(A) = O(n * 2^b)
min(A) = O(2^b)
sum(A) - min(A) = O(n * 2^b) 
reading input is O(n*b)
T(n, b) = O(n * 2^b)

如果您想将b解释为常量

T(n) = O(n)

我们可以进一步定义maxn - 输入中的最大数字。 maxn = O(2^b)

sum(A) = O(n * maxn)
min(A) = O(maxn)
sum(A) - min(A) = O(n * maxn) 
reading input is O(n * log(maxn))
T(n, maxn) = O(n * maxn)

这更自然,但不要忘记maxn是数字实际输入长度的指数。