我有一个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)中的代码如此?老师这可能是一个错误吗?
答案 0 :(得分:1)
这里有几种可能性。
您的老师正在使用经典的,极其泥泞的“我们知道列表的大小”的技巧。我见过一些自鸣得意的人,这是一种技巧,他们声称因为n
是已知的,n
是一个常数,因此,ergo n
基本上是~ 1
。这是愚蠢的,糟糕的逻辑,但有时会被某些人依赖。
您的老师完全是错误的。
您的老师说的是“最佳案例”运行时间,在这种情况下,如果我正确记住希腊语,则更准确的说法是Ω(1)
。但这甚至是错误的,因为缺少满足条件的各种break语句来退出循环。