确定性选择算法的时间复杂度

时间:2015-10-05 00:39:24

标签: algorithm sorting big-o

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

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

然而,要找到每个组的中位数,我们必须先对组进行排序。视频说使用插入排序或合并排序,但不是那些算法O(nlogn)?那么,如果排序已经采用O(nlogn)?

,整体运行时间怎么可能是O(n)

以下视频供参考:https://www.youtube.com/watch?v=YU1HfMiJzwg

2 个答案:

答案 0 :(得分:2)

  

将数字或数组设置为5个元素的n / 5组和....然后我们找到每个组的中位数...但是要找到每个组的中位数,我们必须先对组进行排序。视频说使用插入排序或合并排序,但不是那些算法O(nlogn)?那么,如果排序已经采用O(nlogn)?

,整体运行时间怎么可能是O(n)

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

答案 1 :(得分:1)

编辑前我错了。

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

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