了解“分而治之”,我正在努力理解一个概念。如果我们有一个排序数组并想要做一些任务....我们得到公式
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)
问题:
如果我们进行更多拆分,运行时间是否应该更长?
无论我的树有多大,为什么我都会保持相同的运行时间?
答案 0 :(得分:1)
这样想。您有一个n
长度数组。在树的每个级别,您细分该数组。但总的来说,无论你如何细分它,仍然有n
个元素。
在父级别,您n
工作。在每个孩子中,您n/X
工作,但是您X
次这样做,所以n
再次工作。
答案 1 :(得分:0)
很简单。无论树的程度如何,下一级处理的总和都是相同的。如您所知,树的程度更大,子节点处的过程更小。并且下一级处理的总和是相同的。但它只适用于闲置状态。实际上,由于递归函数调用,更多程度的树运行时间比树的程度更慢。