数组大小为n到k个相同大小的组

时间:2017-04-08 06:49:40

标签: arrays algorithm computer-science median-of-medians

我有未排序大小 n 的数组,我需要找到 k-1 除数,因此每个子集都具有相同的大小(比如数组排序后。)

我用 k-1 = 3 看过这个问题。我想我需要中位数的中位数,这将是 o(n)。但我认为我们应该 k 次,所以 o(nk)
我想了解为什么需要 o(n logk)

例如:我有一个带有整数的未排序数组,我想找到 k 第三个​​除数,它是将数组拆分为k(相同大小)子阵列的k-1整数根据他们的价值观 如果我[1, 13, 6, 7, 81, 9, 10, 11],则3 = k个分频符[7 ,11]分割为[1 6, 9 10 13 81],其中每个子集都大到2并且相等。

1 个答案:

答案 0 :(得分:0)

您可以使用分而治之的方法。首先,使用中位数算法算法找到(k-1)/2分频器。接下来,使用selected元素将列表分成两个子列表。在每个子列表上重复该算法以找到剩余的分隔符。

最大递归深度为O(log k),每个级别的所有子列表的总费用为O(n),因此这是O(n log k)算法。