我最近观看了一个关于如何在O(n)时间内运行选择算法的视频,我对制作算法过程中的一个步骤感到困惑。
视频说我们应该将数字或数组集划分为5个元素的n / 5组和另一组中的其余元素。然后我们找到每组的中位数。然后我们找到中位数的中位数并将其用作支点等等。
然而,要找到每个组的中位数,我们必须先对组进行排序。视频说使用插入排序或合并排序,但不是那些算法O(nlogn)?那么,如果排序已经采用O(nlogn)?
,整体运行时间怎么可能是O(n)答案 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))
,这在复杂时间是线性的。