大 O 复杂性 Python,找出 运行 大小的输入时间 'n'
Big O Complexity Python, find out running time for input of size 'n'
对于这个函数,我要select最合适的Big-O运行输入大小n的时间:
def 2d_list(n):
i = 0
data = []
while i < n:
data.append([i] * n)
i += 1
return data
上述函数将一个整数作为参数并创建一个二维整数列表。例如下面的代码片段:
print(2d_list(3))
produces
[[0, 0, 0], [1, 1, 1], [2, 2, 2]]
Select one:
一个。 O(n^3)
b。 O(n)
c。 O(n log n)
d。 O(n^2)
e。 O(log n)
我觉得答案应该是d. 0(n^2)
。这样对吗?
while 循环运行的次数与 n
的大小线性相关,并且在每次迭代中,[i]*n
创建一个列表并向其中添加 i
n
次,又是一次迭代。一个迭代嵌套在另一个迭代中是 O(n^2)
时间复杂度。
None 的给定选项是正确的。让我们稍微重写一下函数:我们只是将参数从 n
重命名为 x
:
def 2d_list(x):
i = 0
data = []
while i < x:
data.append([i] * x)
i += 1
return data
现在我们有多少操作?还有 O(x^2) 操作:对于 i
的每个 x
值,我们必须创建一个包含 x
个元素的列表。
但是输入大小是多少 n
?这就是您需要表示数字 x
的 位数 。数字 x
的增长速度比 n
快得多:您基本上可以将 x
的大小加倍,而无需向输入添加超过 1 位。
因此,您有 n = log x
,或 x = 2**n
。这意味着你的函数的时间复杂度实际上是 O(4**n)
.
这个问题具有误导性。输入大小为 log n
即表示 n
.
所需的位数
如果我们想根据 n
而不是输入大小来计算复杂度,那么答案是 O(n^2)
如果我们想根据输入大小 s
进行计算,那么答案是 O((2^s)^2) = O(2^(2*s)) = O((2^2)^s)
,正如 chepner 所写。
对于这个函数,我要select最合适的Big-O运行输入大小n的时间:
def 2d_list(n):
i = 0
data = []
while i < n:
data.append([i] * n)
i += 1
return data
上述函数将一个整数作为参数并创建一个二维整数列表。例如下面的代码片段:
print(2d_list(3))
produces
[[0, 0, 0], [1, 1, 1], [2, 2, 2]]
Select one:
一个。 O(n^3)
b。 O(n)
c。 O(n log n)
d。 O(n^2)
e。 O(log n)
我觉得答案应该是d. 0(n^2)
。这样对吗?
while 循环运行的次数与 n
的大小线性相关,并且在每次迭代中,[i]*n
创建一个列表并向其中添加 i
n
次,又是一次迭代。一个迭代嵌套在另一个迭代中是 O(n^2)
时间复杂度。
None 的给定选项是正确的。让我们稍微重写一下函数:我们只是将参数从 n
重命名为 x
:
def 2d_list(x):
i = 0
data = []
while i < x:
data.append([i] * x)
i += 1
return data
现在我们有多少操作?还有 O(x^2) 操作:对于 i
的每个 x
值,我们必须创建一个包含 x
个元素的列表。
但是输入大小是多少 n
?这就是您需要表示数字 x
的 位数 。数字 x
的增长速度比 n
快得多:您基本上可以将 x
的大小加倍,而无需向输入添加超过 1 位。
因此,您有 n = log x
,或 x = 2**n
。这意味着你的函数的时间复杂度实际上是 O(4**n)
.
这个问题具有误导性。输入大小为 log n
即表示 n
.
如果我们想根据 n
而不是输入大小来计算复杂度,那么答案是 O(n^2)
如果我们想根据输入大小 s
进行计算,那么答案是 O((2^s)^2) = O(2^(2*s)) = O((2^2)^s)
,正如 chepner 所写。