排序算法的上界和下界

时间:2013-02-03 09:44:19

标签: algorithm complexity-theory big-o time-complexity

这是一个非常简单的问题,但我很难完全理解这个概念。

我试图理解以下陈述之间的区别:

  1. 在最好的情况下,存在一种对O(n)中的n个数组进行排序的算法。
  2. 在最好的情况下,每个算法都会在O(n)中对n个数字的数组进行排序。
  3. 在最佳情况下,存在一种对Omega(n)中n个数字的数组进行排序的算法。
  4. 在最佳情况下,每个算法都会在Omega(n)中对n个数字进行排序。
  5. 我将首先解释是什么让我发疯。我不确定1和3 - 但我知道其中一个答案是正确的,只需指定一个案例,而另一个案例答案是正确的,通过检查所有可能的输入。因此,我知道其中一个必须是真的,只需指定数组已经排序但我无法分辨哪个。 我的老师总是让我思考这个问题就像我们正在研究谁是班上最高级的人,再次选择其中一个选项(1,3)就足以说明他是,并且没有理由去检查所有班级。

    我知道如果我们要检查最坏的情况,那么这些陈述都不可能是真的,因为没有任何假设或额外记忆的最佳排序算法是Omega(nlogn)

    重要提示:我不是在寻找一种解决方案(一种能够进行匹配排序的算法) - 只是试图更好地理解这个概念。

    谢谢!

2 个答案:

答案 0 :(得分:2)

对于1 + 3 问自己 - 你知道一种算法可以在Theta(n)中以最佳情况对数组进行排序 - 如果答案为真,则1 + 3都为真 - 因为Theta(n)是O(n) [intersection] Omega(n),因此如果你有这样的算法(以Theta(n)最佳情况运行) - 1 + 3都是正确的。
提示:优化bubble sort

For 2 :问问自己 - 每个算法是否在O(n)最佳情况下对一组数字进行排序?您是否知道具有最差情况和最佳情况相同时间复杂度的算法?如果你取消所有优化,上述冒泡排序会发生什么?

For 4 :问问自己 - 您是否需要读取所有元素以确保数组已排序?如果你这样做 - Omega(n)是明确的下限,你就不能比它更好。

祝你好运!

答案 1 :(得分:1)

显然,差异在于“O”和“Omega”。一个说“上升不快”,第二个说“上升不慢”。

确保您了解这些术语之间的区别,并且您将看到句子中的差异。

1和3都表示完全不同的东西,就像2和4一样。

看那些(那些不一样!):

  

1~存在一种算法,对于10个项目,在最佳情况下不超过30个   3~存在一种算法,在最佳情况下10项不小于30。

     

2~在最好的情况下,每10个项目的算法不超过30个   4~最好的情况下10个项目的每个算法不少于30个。

你现在感觉到差异吗?与O / Omega的区别相似,但调查的主题不同。上面的例子说明了某些点/情况下的不同性能,而O / Omega表示法告诉你与数据大小相关的性能,但只有当数据“足够大”时,无论是三项还是数百万,它会降低常数因素:

function 1000000*n is O(n)
function 0.00000*n*n is O(n^2)

对于少量数据,第二个显然非常好于第一个。但随着数据量的增加,第一次开始变得更好!

将上述示例重写为“更合适”的术语,与原始句子更相似:

  

1~存在一种算法,对于N个以上的项目,在最佳情况下不超过X * N.
  3~存在一种算法,对于多于N个项目,在最佳情况下不小于X * n。

     

2~每种算法,对于N个以上的项目,在最佳情况下不超过X * N.   4~每个算法,对于N个以上的项目,在最佳情况下不小于X * N.

我希望这能帮助你“看到”/“感受”差异!