为什么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
((1)如果range(n)实际上是在计算整数列表,那么您将执行该操作的次数是一次的三倍。(2)在第一个循环中,循环变量遍历n个事物的列表,但是在第二个循环中,循环变量遍历n个事物的列表,三次。
我想第二个永远不会比第一个快,并且在没有优化编译器的情况下,我希望第二个绝对比第一个慢。
您可以考虑尝试此实验:
start = time.time()
for i in range(1000000):
for j in range(n):
break
end = time.time()
return c,end-start
通过花费那个时间除以一百万,您应该对调用范围(n)的原始成本有一个很好的了解。如果这是您所看到的额外时间中的绝大部分,那么我不会感到惊讶(与重复遍历列表两次相比)。
如果是这种情况,您还可以通过先计算x = range(n),然后在x中使用i三次,来改进第二个示例。