考虑一个由正整数组成的列表A.是否有以下算法
for i in range(sum(A)-min(A)):
print 'Hello world!'
有O(sum(A)-min(A))
时间复杂度? Table of common time complexities对sum(), min() or max()
等函数没有任何说明。
以下算法的空间复杂度可由O(sum(A)-min(A))
表示:
output = [True for i in range(sum(A)-min(A))]
答案 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
是数字实际输入长度的指数。