【发布时间】:2016-02-02 03:08:52
【问题描述】:
我有 n 个不同的数字,我想将它们分类到 k 个组中,这样第 1 组中的任何数字都小于第 2 组中的任何数字,并且任何人在第 2 组中小于第 3 组中的任何人,依此类推,直到第 k 组(每个组内的数字不必排序)。我被要求设计一个在 O(n log k) 中运行的算法,但我只能想出 O(n^2) 个。
我该怎么做?
【问题讨论】:
-
您是否查看过有关排序的 Wiki 页面,尤其是桶排序算法?见en.wikipedia.org/wiki/Sorting_algorithm
-
还有其他限制吗?如前所述,您可以将所有数字放在第 1 组中,而将所有其他数字留空。
-
那么限制是每个桶需要有相同数量的元素(在本例中为 n/k),并且需要在 O(n log k) 时间内运行。
-
这似乎类似于快速排序,寻找 k-1 个枢轴将数组分成 k 个组。问题是找到时间复杂度较低的 k-1 个枢轴点。我在想类似于median of medians 的东西,但这变得很复杂。可能有一种方法可以使用堆排序之类的方法来做到这一点。
-
@Jaco - 桶排序的问题是桶的大小不同。在这种情况下,目标是将 n 个数组分成大小相等的 k 个组(最后一组除外)。
标签: algorithm sorting complexity-theory