Python 使用多个函数的时间复杂性?

Python 使用多个函数的时间复杂性?,python,function,time-complexity,Python,Function,Time Complexity,假设我们一次使用两个函数: sorted(list(str_variable))-Python使用复杂度为NlogN的Timsort-因此其总体复杂度变为:N^2*logN 它将被视为函数内部的函数,因此复杂性将成倍增加(O(N)对于list()和O(NlogN)对于sort()) 但我也可以写: s = list(str_variable) res = sorted(s) 在这种情况下,它只是使用O(N+NlogN) 在这两种情况下,字符串变量被拆分为单个字符,然后进行排序-因此所用的时间应

假设我们一次使用两个函数:

sorted(list(str_variable))
-Python使用复杂度为NlogN的Timsort-因此其总体复杂度变为:
N^2*logN

它将被视为函数内部的函数,因此复杂性将成倍增加(
O(N)
对于
list()
O(NlogN)
对于
sort()

但我也可以写:

s = list(str_variable)
res = sorted(s)
在这种情况下,它只是使用
O(N+NlogN)


在这两种情况下,字符串变量被拆分为单个字符,然后进行排序-因此所用的时间应该是相同的。

它不是这样工作的,首先执行
列表(stru变量)
,然后执行
排序(应答)
,本质上,上述两个函数所用的时间应该相同

在内部,它正在执行,正如您在第二个代码段中所示,因此您可以使用相同的符号

您也可以尝试这样检查:

import time
now = time.time()
sorted(list(str_variable))
print(time.time() - now )


now = time.time()
s = list(str_variable)
res = sorted(s)
print(time.time() -now)

我敢打赌,如果有嵌套函数调用,第一个运行得更快,那么它们的复杂性不会成倍增加

假设你的电话是

f(g(N))
在大小为
N
的输入上,
f
g
的时间复杂度分别为
f(N)
g(N)
,总时间复杂度为

G(N) + F(size(g(N))
  G(N) + F(size(g(N))
∈ O(N) + O(N log N)
= O(N log N)    since O(N) ⊂ O(N log N)
在您的示例中,
f
排序的
g
列表
,因此我们有以下内容:

F(N) ∈ O(N log N)
G(N) ∈ O(N)
size(g(str_variable)) = N
所以总的复杂性是

G(N) + F(size(g(N))
  G(N) + F(size(g(N))
∈ O(N) + O(N log N)
= O(N log N)    since O(N) ⊂ O(N log N)

这不是它的工作方式。首先,执行
list(str_变量)
,然后执行
sorted(answer)
,本质上,上面两个函数都需要相同的时间。您可以尝试:
import time;start_time=time.time();print(time.time()-start_time)
要想看出区别,我敢打赌第一个会更快。:)我知道它们都需要大约相同的时间,因为从逻辑上讲,我知道它们都会被执行。你能解释一下使用大o的复杂性吗?这是我试图理解的部分。在内部,他们正在被执行,正如你在第二次执行中所显示的那样。所以你的第二个大O符号是正确的。你的第一个假设是错误的。。两者之间没有区别。。。