我被许多声称渐近符号与最好情况、一般情况和最坏情况的时间复杂度无关的说法搞糊涂了。如果是这种情况,那么下面的组合可能都是有效的:
为了尽可能好的输入,该算法执行的基本操作的数量永远不会超过n的某个常数倍。
对于平均输入,该算法执行的基本操作的数量永远不会超过n的某个常数倍。
对于最坏的可能输入,该算法执行的基本操作的数量永远不会超过n的某个常数倍。
为了获得最佳输入,此算法执行的基本操作数永远不会超过或小于 n 的某个常数倍数。
对于平均输入,该算法执行的基本运算的数量永远不会超过或小于n的某个常数倍。
对于最坏的可能输入,该算法执行的基本操作的数量永远不会超过或小于n的某个常数倍。
为了获得最佳输入,此算法执行的基本操作数永远不会小于 n 的常数倍数。
对于一个平均输入,由该算法执行的基本操作的数量绝不会少于n的某个常数倍数。
对于最坏的可能输入,该算法执行的基本操作的数量永远不会小于n的某个常数倍。
以上哪一项有意义?在实践中,根据输入增长执行所花费的时间来评估算法的效率时,通常使用哪些?据我所知,其中一些是多余的和/或矛盾的。
我真的不明白上限、紧边界和下限的概念与最佳、平均和最坏情况的输入无关。这是我越深入研究就越困惑的话题之一。如果有人能帮我澄清这件事,我将不胜感激。
所有陈述都是有道理的。
在实践中,除非另有说明,否则我们应该讨论所有情况下的最坏情况输入。
我们经常担心平均案例输入,尽管“平均案例”的定义有点狡猾。通常最好谈论“预期时间”,因为这是一个更精确的数学定义,对应于人们通常所说的“平均情况”。不幸的是,人们在这里经常草率,你经常会看到复杂性陈述,这些陈述指的是预期时间而不是最坏情况的时间,但没有提到它。
我们很少关心最佳案例输入。
不幸的是,也经常看到人们混淆最佳与最坏情况输入和上限与下限的概念,尤其是在so和其他非正式网站上。
你总是可以回到定义,就像你已经做的那样,来弄清楚陈述的真正含义。
“此算法在 X(n 2) 时间内运行”意味着给定函数 f(n) 表示在任何环境中的最坏情况下执行时间与问题大小的关系,该函数将在集合 X(n2) 中。
"此算法在X(n2)预期时间中运行"意味着给定函数f(n)在任何环境中对执行时间vs问题大小的数学预期,该函数将在集合X(n2)中。
最后,请注意,在任何环境中实际上仅适用于特定的计算模型。我们通常假设一个随机存取机,所以复杂性陈述对图灵机实现是无效的。
null
我必须找到在c程序中输入最佳情况的快速排序的时间复杂度
为什么选择排序的最佳案例时间复杂度为O(n^2),而插入排序和冒泡排序为O(n)?他们的平均时间是一样的。我不明白为什么最佳案例时间不同。如果你能帮忙,我将不胜感激。
此处声明: TreeSet为add()/remove()/contains()提供了日志(n)时间复杂性保证。 但是使用二叉查找树,在最坏的情况下,二叉查找树可以有O(n)高度。log(n)复杂性如何“保证”?
线性搜索所需时间的最坏情况是,该项位于列表/数组的末尾,或者不存在。在这种情况下,算法需要执行比较,以查看每个元素是否为所需值,假设是数组/列表的长度。 根据我对big-O表示法的理解,可以说这个算法的时间复杂度是O(n),因为最坏的情况可能发生,当我们想要保守估计“最坏的情况”时,可以使用big-O。 从堆栈溢出的许多帖子和答案来看,这种想法似乎是有缺陷的,像Big-O符号这样的说法与最坏情况分