繁体   English   中英

关于插入排序时间的复杂度

[英]About insertion sort time complexity

在我的教科书中,它说插入排序的时间复杂度为Θ(n 2 )。 我不明白,因为插入排序的最佳情况是O(n)。 我知道大theta上下限。 那么插入排序的时间复杂度是O(n 2 )而不是Θ(n 2 )是否正确? 对不起,我英语不好。

OΘ并非在所有情况下都是最坏情况。 这是<==之间的区别。

例如,算法Merge sort为O(n ^ 2),但不是Θ(n ^ 2),因为它比那快。

在谈论一段代码的“时间”复杂性时,您必须要小心,因为您不能指出一个单一的时间复杂性。 一段代码可以具有最佳情况下的时间复杂度, 最坏情况下的时间复杂度, 平均情况下的时间复杂度等,并且它们不必全部相同。

说“插入排序为Θ(n 2 )”有点草率,因为它不是Θ(n 2本身插入排序 ,而是最坏的运行时。 通常,如果您说一段代码是O(f(n)),则表示它的运行时是O(f(n)),这通常意味着您在谈论最坏情况的运行时。

的确,插入排序的最佳情况运行时是Θ(n),这在输入已被排序时发生。 最坏情况的运行时间是Θ(n 2 ),它发生在反向排序的列表上。 假设输入是n个元素的随机排列,则平均情况下的运行时间也是Θ(n 2 )。 这些更精确的语句可能比“插入排序为O(n)”或“插入排序为Θ(n 2 )”更好,因为它们捕获了有关插入排序的运行时间的更多信息。

请注意,仅使用O,Θ或Ω并不会自动意味着您在谈论最佳/最差/平均情况下的复杂度。 例如,您可以使用Θ表示法来讨论最佳情况,最坏情况或平均情况。

一般而言,当谈到“ 算法的时间复杂性时,通常会提到所有类型的输入 ,而不仅限于例如最坏情况最佳情况。

在这种一般情况下,对于所有类型的输入,一个情况(最坏的情况)就足以确定复杂性级别为最差的级别

因此,当我们谈到所有输入的时间复杂度时,最好的情况不会产生Θ(n)

但是,您也可以针对特定场景显式分析算法,例如仅针对最佳情况或最坏情况等等。 然后,您限制算法 ,仅允许此类输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM