当前位置: 首页 > 知识库问答 >
问题:

给定M最大值的基于每次比较的排序算法时间复杂度的下界Ω(nlogns)

郎鹤龄
2023-03-14

给定n个元素[1,…, n]的数组的最大元素M,如何影响每个基于比较的排序算法的时间复杂度的下界Ω(nlogng)?我必须强调数组的最大元素M是给定的。

共有2个答案

路雅懿
2023-03-14

如果M确实是数组元素绝对值的边界,并且元素是整数,您可以在O(n M)时间内对数组进行排序,方法是保持单独的数组int出现[2M1];初始化为0,扫描原始数组并计算每个元素的出现次数,并使用出现写入输出数组。

如果元素是浮点数(形式上是实数),那么对它们的大小有一个界限是没有影响的。

如果元素是整数并且可以是负的(形式上,任意大数量级的整数),那么数量级的上限没有影响。

编辑:在第一段中有O(n),应该是O(n M)。

孟承嗣
2023-03-14

它不受影响。

请注意,有n!可能的排列,并且每个比较OP有2个可能的结果-“左边更高”或“右边更高”。
对于任何基于比较的算法,每个“决定”都是根据一个比较的结果做出的。

因此,为了成功地确定任何排列的正确顺序,您将需要(在最坏的情况下)log2(n!)比较。然而,众所周知,log2(n!)在Theta中-你让自己回到欧米茄的下界,而不管手头的范围如何。

请注意,其他不使用(仅)比较的方法可以更有效地对整数进行排序。

 类似资料:
  • 下面是我写的一些伪代码,给定一个数组A和一个整数值k,如果与k之和中有两个不同的整数,则返回true,否则返回false。我正试图确定这个算法的时间复杂度。 我猜这个算法在最坏的情况下的复杂度是O(n^2)。这是因为第一个for循环运行n次,该循环内的for循环也运行n次。if语句进行一次比较,如果为true,则返回一个值,这两个操作都是常量时间操作。最后的return语句也是一个常数时间操作。

  • 为什么选择排序的最佳案例时间复杂度为O(n^2),而插入排序和冒泡排序为O(n)?他们的平均时间是一样的。我不明白为什么最佳案例时间不同。如果你能帮忙,我将不胜感激。

  • 算法的时间与空间复杂度 看到群里们小伙伴在讨论算法复杂度问题,之前在极客时间看了王争的《数据结构与算法之美》,看的我也晕呼呼的,跟上学时在学校老师的讲的有点不一样了,网上搜了下各种各样的,结合参考作一篇简单易懂的总结。 什么是算法 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 如何评价一个算法的好坏 一般我们会从以下维度来评估算法的优劣 正确性

  • 以下代码的时间复杂度是多少?我用图和优先级队列的邻接矩阵表示来实现prim的算法。在我看来,时间复杂度是:当源连接到每个其他节点时,堆最多可以增长到(n-1)的大小,而在内部循环中,邻接矩阵的成本是O(n),因此,总的来说:它的O((n-1)*n)-

  • 问题内容: 如果将一个值加到一个排序的集合(redis)上的每个值都是得分最高的值,那么时间复杂度是否适用于每个值? 或者,对于这种边缘情况,redis会执行优化(例如,例外情况是,该值高于集合中的最高值,只需将值添加到最高点)? 实际上,我之所以这样问,是因为我在应用中保留了一个全局排序集,其中值以自时代开始的时间作为分数。我想知道这是否仍然会还是会更快? 问题答案: 一旦排序集超过了配置指令设

  • 做O(h)算法的时间复杂度是多少?当h是节点的高度,以BST n倍为单位(树中的元素数),我相信是O(n),而不是O(n*h),但我不知道如何证明它。 在O(h)中工作的特定算法是在BST中查找元素的顺序前体。