繁体   English   中英

排序算法的上界和下界

[英]Upper bound and lower bound of sorting algorithm

这是一个非常简单的问题,但我正在努力完全理解这个概念。

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

  1. 存在一种算法,其在最佳情况下对O(n)中的n个数组进行排序。
  2. 在最佳情况下,每个算法都在O(n)中对n个数字的数组进行排序。
  3. 存在一种算法,其在最佳情况下对Omega(n)中的n个数组进行排序。
  4. 在最佳情况下,每个算法都在Omega(n)中对n个数字的数组进行排序。

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

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

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

谢谢!

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

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

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

祝好运!

显然,差异在于“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.

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

暂无
暂无

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

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