【发布时间】:2023-03-25 14:20:01
【问题描述】:
为什么 try1 的速度是 try2 的两倍?这些函数不都是 O(n) 吗?执行时间的差异仅仅是由于开销吗?
我是编程新手,正在通过 Python 自学算法和数据结构。
根据我下面的文字,第一个函数的时间复杂度应该是3n(三个代表三个赋值语句),第二个函数的时间复杂度是n + n + n,即3n。
我错过了什么?
def try1(n):
start = time.time()
for i in range(n):
a = 1
b = 2
c = 3
end = time.time()
return c,end-start
def try2(n):
start = time.time()
for i in range(n):
a = 1
for i in range(n):
b = 2
for i in range(n):
c = 3
end = time.time()
return c,end-start
【问题讨论】:
-
两种方式的时间复杂度都是O(n),但是有不同的因素。 Python 代码不是使用优化编译器编译的,运行循环确实会产生一些开销。
-
还请考虑您正在计算两个循环中的每个变量分配。但循环还包括对
i的变量赋值。第一个例子发生 n 次,第二个例子是 3*n 次。 -
没有 O(3n) 这样的东西,它只是 O(n)。它告诉您给定算法的主导项是什么,因此您可以在这里粗略地考虑,对于较大的 n 值,时间将与 n 成正比 - 如果 n 加倍,则时间加倍。它什么也没说,也没有说明有效速度。对于一些小的 n 值,O(n^3) 算法可能比 O(log(n)) 算法快,我们只知道当 n 增长时,前者会在某个点变得慢得多。
标签: python time big-o complexity-theory