分而治之

时间:2013-10-30 06:48:54

标签: math optimization computer-science mathematical-optimization divide-and-conquer

了解“分而治之”,我正在努力理解一个概念。如果我们有一个排序数组并想要做一些任务....我们得到公式

T(n) = a (n/b) * O(n)

如果我们使用b = 2(二叉树),意味着每个子阵列被制成两个子阵列......我们得到

T(n) = 2 (n/2) * O(n) - >并通过主规则running time = O(n * logn)

现在,如果我们使用b = 3(三元树),意味着每个子阵列被制成三个子阵列,我们得到

T(n) = 3 (n/3) * O(n) - >这意味着running time = O(n * logn)

问题:

如果我们进行更多拆分,运行时间是否应该更长?

无论我的树有多大,为什么我都会保持相同的运行时间?

2 个答案:

答案 0 :(得分:1)

这样想。您有一个n长度数组。在树的每个级别,您细分该数组。但总的来说,无论你如何细分它,仍然有n个元素。

在父级别,您n工作。在每个孩子中,您n/X工作,但是您X次这样做,所以n再次工作。

答案 1 :(得分:0)

很简单。无论树的程度如何,下一级处理的总和都是相同的。如您所知,树的程度更大,子节点处的过程更小。并且下一级处理的总和是相同的。但它只适用于闲置状态。实际上,由于递归函数调用,更多程度的树运行时间比树的程度更慢。