Algorithm 排序问题-n/k个大小为k的间隔

Algorithm 排序问题-n/k个大小为k的间隔,algorithm,sorting,data-structures,Algorithm,Sorting,Data Structures,给定的是一个大小为n的数组,该数组被划分为大小为k的n/k个间隔。每个间隔中的值大于其左侧间隔中的值,小于其右侧间隔中的值。我想在尽可能短的时间内对这些值进行排序 我想到的一个简单的解决方案就是对每个区间中的所有值进行排序,这些值将“cost”O(k logk),以获得所有n/k区间O(n logk)的总成本。我想知道是否有更有效的方法 现在我知道,在每个间隔中,我的不同值不超过logk,我需要想出一个更快的算法。我希望你能帮我 谢谢 下面是一个极其丑陋的答案: 1. Take the firs

给定的是一个大小为n的数组,该数组被划分为大小为k的n/k个间隔。每个间隔中的值大于其左侧间隔中的值,小于其右侧间隔中的值。我想在尽可能短的时间内对这些值进行排序

我想到的一个简单的解决方案就是对每个区间中的所有值进行排序,这些值将“cost”O(k logk),以获得所有n/k区间O(n logk)的总成本。我想知道是否有更有效的方法

现在我知道,在每个间隔中,我的不同值不超过logk,我需要想出一个更快的算法。我希望你能帮我


谢谢

下面是一个极其丑陋的答案:

1. Take the first interval;
2. Since logK should be small, we allocate logK binary tree nodes, and we place the first element in the middle;
3. For the rest of the elements, we use method similar to binary search to search if it is already included, or we add this element;
4. Produce a sorted list with all the values in the interval;
5. Use Counting Sort with this list on the interval;
6. Do this for all the intervals.
用于2,3的时间是O(K*logk),因为搜索最多需要logk(登录logk元素)并重复K次。4最多使用O(logk)时间遍历所有具有值的节点。5需要O(K)时间,与计数排序类似。所以总时间应该是O(nlogk)

欢迎提出任何问题,因为我实在太困了,不能保证我的思路是直截了当的。

您可以使用或在每个间隔成本计算
O(k)
对于每一项,总成本为O(n/k*k)=O(n)

然后将每个间隔合并在一起,总共成本
O(n)
。然后,您的算法将是一个
O(n)+O(n)=O(n)
算法


注意:如果您可以利用并行性,您可以对所有间隔进行并行排序,总成本为
O(k)
。虽然您的算法仍然是
O(n)
(因为合并),但它的常数因子会更小。

如果使用平衡二叉树,您当前的方法需要O(n loglog(k)),因为排序时,二叉搜索树的深度最多为O(log(log log k)),所以对于其中一个间隔,它需要O(k log k)我认为这种方法足够快,在你的时间间隔中也没有任何特定的关系,可以把n*X提高到g(n)*X,所以我认为你不能减少
n
。用
n\k
,你的意思是
n/k
,即“n除以k”@Svante:是的,这就是我的意思