Time Comp:为什么具有三个赋值语句的单个for循环的速度比每个具有一个赋值语句的三个顺序for循环的速度快两倍?

问题描述 投票:1回答:1

为什么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
python time big-o complexity-theory
1个回答
0
投票

((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三次,来改进第二个示例。

© www.soinside.com 2019 - 2024. All rights reserved.