Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python for循环运行时间内的if语句_Python_Big O_Asymptotic Complexity - Fatal编程技术网

Python for循环运行时间内的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循环,循环遍历一个包含n个元素的列表,在该列表中,我有一个if语句,如下所示:

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
    不能参与ϴ。不知道你在哪里看到了糟糕的逻辑。