Python for循环运行时间内的if语句
我有一个for循环,循环遍历一个包含n个元素的列表,在该列表中,我有一个if语句,如下所示:Python for循环运行时间内的if语句,python,big-o,asymptotic-complexity,Python,Big O,Asymptotic Complexity,我有一个for循环,循环遍历一个包含n个元素的列表,在该列表中,我有一个if语句,如下所示: for item in list: if item == match: item = 'found' 我的老师说这个代码在ϴ(1)中。怎么不是ϴ(n)?循环被迫遍历n个元素,为什么代码在ϴ(1)中?这可能是我老师的错误吗 这里有一些可能性 你的老师在耍经典的、极其卑鄙的“我们知道名单的大小”把戏。这是我见过的一些自鸣得意的人玩的把戏,他们声称因为n是已知的,n是一个常数,因此n
for item in list:
if item == match:
item = 'found'
我的老师说这个代码在ϴ(1)中。怎么不是ϴ(n)?循环被迫遍历n个元素,为什么代码在ϴ(1)中?这可能是我老师的错误吗 这里有一些可能性
n
是已知的,n
是一个常数,因此n
基本上是~1
。这是愚蠢的、糟糕的逻辑,但有些人有时会依赖它Ω(1)
。但是,即使这样,由于在满足条件时没有任何形式的break语句退出循环,因此这也是错误的编辑,谢谢您的更正,。。我认为他的意思是最好的情况是O(1),最坏的情况是O(n)三种可能性:a)你和你的老师犯了同样的错误(在这种情况下,循环在第一次迭代中存在,因此ϴ(1));b) 如果
list
是常数(即算法的特征而不是动态输入),那么复杂性不会随着输入而增加,所以ϴ(1)。c) 你的老师错了。对于这个for循环,最好的情况复杂度是θ(1),但最坏的情况复杂度是O(n)。@MohanBabuθ(1)本质上意味着渐近增长总是恒定的。不是最好的情况,总是这样。(也许你在想欧米茄(1)?但一切都是欧米茄(1),所以这不是很有用。)如果老师的意思是最好的情况,老师仍然是错的。这个循环总是在迭代器上调用N\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!因此,我们同意,在所有情况下,老师都是错的。然而,它仍然是Ω(1)
,因为Ω(1)
并不意味着最好的情况o
vs.o
vs.Θ
vs.Ω
是与最佳、平均和最差的区别。无论你说的是哪一个,Ω(1)
都是一个弱下界:只意味着运行时间函数(无论我们说的是哪一个)渐进增长不慢于1阶。这对每一个算法都是正确的,所以说这是一件没用的事。听起来你对算法的掌握比我好-如果你有时间,也许你应该编辑我的答案,或者写你自己的,这样未来的读者就不必为了这些信息去挖掘评论了。正如我在上面的评论中所写的,它与大小是否已知无关,但它是否随输入而改变。ϴ显示了输入大小与执行复杂性之间的关系。如果n
不受输入的影响,则n
不能参与ϴ。不知道你在哪里看到了糟糕的逻辑。