【问题标题】:Time complexity of a Deterministic Selection algorithm确定性选择算法的时间复杂度
【发布时间】:2016-01-01 14:13:53
【问题描述】:

我最近观看了一段视频,介绍了如何让选择算法在 O(n) 时间内运行,但我对制作算法过程中的一个步骤感到困惑。

视频说我们应该将一组数字或数组划分为 n/5 组,每组 5 个元素,其余元素在另一组中。然后我们找到每组的中位数。然后我们找到中位数的中位数并将其用作枢轴等等。

但是,要找到每个组的中位数,我们必须先对组进行排序。视频说使用插入排序或合并排序,但那些算法不是 O(nlogn) 吗?那么,如果排序已经花费了 O(nlogn),那么整体运行时间怎么可能是 O(n)?

这是供参考的视频:https://www.youtube.com/watch?v=YU1HfMiJzwg

【问题讨论】:

    标签: algorithm sorting big-o


    【解决方案1】:

    编辑前我错了。

    我已经阅读了 n/5 个元素的集合,而不是 n/5 个 5 个元素的集合。

    对 N/5 组 5 个或更少的元素进行排序是 O(N/5 * 5*log(5)),它在复杂度时间上是线性的。

    【讨论】:

    • 我想我在这里遗漏了一些东西,在我的演讲幻灯片中它说运行时间也是 O(n)..
    • 我误解了你所说的,并编辑了答案,但invisal是对的。
    【解决方案2】:

    将一组数字或数组分成 n/5 组,每组 5 个元素和 ...。然后我们找到每个组的中位数...但是要找到每个组的中位数,我们必须先对组进行排序。视频说使用插入排序或合并排序,但那些算法不是 O(nlogn) 吗?那么,如果排序已经花费了 O(nlogn),那么整体运行时间怎么可能是 O(n)?

    不完全正确。由于对一组 5 进行排序只是5log(5),我们在n\5 时间完成了它。那将是n*5/5 log(5) = nlog(5)。这仍然是线性的。

    【讨论】:

      猜你喜欢
      • 2018-01-11
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多