试图在 Python 的这一点中找到 T(n) 函数和复杂度
Trying to find the T(n) function and complexity in this bit of Python
def wum(aList):
a = 7
b = 5
n = len(aList)
for i in range(n):
for j in range(n):
a = i * a
b = j * j
w = i * j
v = i + w
x = v * v
for k in range(n):
w = a * k + 23
v = b * b
a = w + v
我有 T(n) = 2n + 6n^2
复杂度 O(n^2)
,这样对吗?求助!
我总是觉得给 T(n)
一个准确的值有点困难,因为很难定义 1
在那里意味着什么。但是假设每个分配都是 1
(不管发生什么样的计算),那么总的 T(n)
将如下所示:n * (6n + 2) + 3
.
但在大 O 表示法中,即 O(n²)
,是的。您可以很容易地看到,因为您有两个嵌套循环级别,都在 n
.
顺便说一句。你的功能可能是你的导师或其他人的例子,但它确实是一个糟糕的例子。您可以轻松地将逻辑修改为线性并产生相同的结果:
a = 7
b = 5
n = len(aList)
for i in range(n):
a *= i ** n # `a` is multiplicated `n` times by (constant) `i`
b = (n - 1) ** 2 # at the end of the loop, `j` is `(n - 1)`
v = i + (i * b) # at the end of the loop, `w` is `i * b`
x = v * v
w = a * (n - 1) + 23 # at the end of the loop, `k` is `(n - 1)`
v = b ** 2 # `b` (and as such `v`) is never changed in the loop
a = w + v
而且由于没有任何东西使用列表的任何值,您实际上也可以在恒定时间内进行这些计算(我将把它留给您练习;))。
最后,您可能会争辩说,由于该函数没有 return 任何东西,也没有改变输入列表,因此该函数是一个很大的 NO-OP,因此可以用一个什么都不做的函数:
def wum(aList):
pass
def wum(aList):
a = 7
b = 5
n = len(aList)
for i in range(n):
for j in range(n):
a = i * a
b = j * j
w = i * j
v = i + w
x = v * v
for k in range(n):
w = a * k + 23
v = b * b
a = w + v
我有 T(n) = 2n + 6n^2
复杂度 O(n^2)
,这样对吗?求助!
我总是觉得给 T(n)
一个准确的值有点困难,因为很难定义 1
在那里意味着什么。但是假设每个分配都是 1
(不管发生什么样的计算),那么总的 T(n)
将如下所示:n * (6n + 2) + 3
.
但在大 O 表示法中,即 O(n²)
,是的。您可以很容易地看到,因为您有两个嵌套循环级别,都在 n
.
顺便说一句。你的功能可能是你的导师或其他人的例子,但它确实是一个糟糕的例子。您可以轻松地将逻辑修改为线性并产生相同的结果:
a = 7
b = 5
n = len(aList)
for i in range(n):
a *= i ** n # `a` is multiplicated `n` times by (constant) `i`
b = (n - 1) ** 2 # at the end of the loop, `j` is `(n - 1)`
v = i + (i * b) # at the end of the loop, `w` is `i * b`
x = v * v
w = a * (n - 1) + 23 # at the end of the loop, `k` is `(n - 1)`
v = b ** 2 # `b` (and as such `v`) is never changed in the loop
a = w + v
而且由于没有任何东西使用列表的任何值,您实际上也可以在恒定时间内进行这些计算(我将把它留给您练习;))。
最后,您可能会争辩说,由于该函数没有 return 任何东西,也没有改变输入列表,因此该函数是一个很大的 NO-OP,因此可以用一个什么都不做的函数:
def wum(aList):
pass