将组排序到列表中的决策树

时间:2015-04-08 01:24:25

标签: algorithm sorting decision-tree lower-bound

给出时间的下限,以生成k个组中n个数字的单个排序列表。这样最小的n / k是第一个,依此类推。

所以我一直坚持这个问题一段时间,我真的不确定如何去做。我知道如何制作决策树,但我不明白我应该如何在这个问题的背景下做到这一点。我不一定能理解这个问题,但似乎很明显可以为人们解决。任何指向正确的方向或澄清都将非常感激。

2 个答案:

答案 0 :(得分:1)

您的问题很难,因为它假设n个数字已被分为k个组,并且这些组本身已被订购。我将在此假设每组中的数字有序。如果这些数字已经在每个组中排序,那么这将使问题变得微不足道。

解决问题的决策树可以使用k子树构建,每个子组一个,每个子树连接到下一个子树。原因是组本身已经排序,我们只需要对每个组进行排序。如果我们只需沿一个路径遍历此树以查找正确的叶节点(和排序列表),则会发生下限运行时间。这意味着下限是树的高度,即:

O(k * lg n/k)

打破这个表达:

lg n/k是每个k子树的高度

k * lg n/k是完整决策树的高度(有k个子树)

请阅读此excellent PDF from the CS 401 class at the University of Illinois at Chicago,它将完整解释您的原始问题,并向您展示我如何达到我上面给出的Big Omega表达式的证明。

答案 1 :(得分:0)

我不确定什么是"下限"在问题中。

如果

  

(...)k组中的数字。这样最小的n / k是第一个,依此类推。

表示组已经排序(按正确顺序给出),然后

  

生成单个排序列表的时间

如果组内的数字已经排序,则

是最小的。然后,生成排序列表的最短时间为k*(n/k-1) + k*(n/k) + (k-1) = O(n+k),用于测试每个' k'已经排序的组,通过按顺序附加每个项目,然后将组连接成单个结果列表或数组,将每个组转换为链接列表。

另一方面,如果我们想要建立结果所需的最短时间尽管组中输入数字的初始(缺少)顺序,那么对于一般算法排序O(k*(n/k)*ln(n/k)) + n = O(n*ln(n/k))的答案是k n/k }每个组n项,然后将所有{{1}}项放在结果列表或数组中。