for语句在for循环运行时间内

时间:2018-06-21 05:39:25

标签: python big-o asymptotic-complexity

我有一个for循环遍历具有n个元素的列表,并且在列表中,我有一个if语句,如下所示:

count_all = 0
count_4 = 0
for df in pd.read_csv( open("%s/tianchi_fresh_comp_train_user.csv" % root_path,'r'), 
chunksize=10000):
    try:
        count_user = df['behavior_type'].value_counts()
        for i in range(5):
            if i not in count_user.index: count_user[i] = 0
            else:
               count_all += count_user[i]
        count_4 += count_user[4]
    except StopIteration:
          print("Iteration is stopped.")

我的老师说这段代码在ϴ(1)中。 ϴ(n)怎么不?循环被迫遍历n个元素,为什么why(1)中的代码如此?老师这可能是一个错误吗?

1 个答案:

答案 0 :(得分:1)

这里有几种可能性。

  1. 您的老师正在使用经典的,极其泥泞的“我们知道列表的大小”的技巧。我见过一些自鸣得意的人,这是一种技巧,他们声称因为n是已知的,n是一个常数,因此,ergo n基本上是~ 1。这是愚蠢的,糟糕的逻辑,但有时会被某些人依赖。

  2. 您的老师完全是错误的。

  3. 您的老师说的是“最佳案例”运行时间,在这种情况下,如果我正确记住希腊语,则更准确的说法是Ω(1)。但这甚至是错误的,因为缺少满足条件的各种break语句来退出循环。