【单选】某分治算法满足 T(n) = T(n/3) + T(2n/3) + Θ(n),T(1) = O(1),则 T(n) 是( )。
这是主定理的"非整数分割"情形:T(n) = T(n/3) + T(2n/3) + Θ(n),两棵子树规模之和恰为 n,属于平衡划分,结果与归并排序同阶——Θ(n log n)。
看到 2n/3 就以为"分得不均所以更慢",误选 Θ(n²) 或 θ(n^1.5);也可能套标准主定理(要求子问题等规模)而卡住。
本题考查分治算法的时间复杂度分析(递归树法)。
标准主定理形如 T(n) = aT(n/b) + f(n),要求所有子问题规模相同。本题两个子问题规模分别是 n/3 和 2n/3,是不均匀划分,需要改用递归树法。
第 0 层:1 个规模 n 的结点,本层代价 Θ(n)。
第 1 层:分成 n/3 和 2n/3 两个子问题,本层代价 = Θ(n/3) + Θ(2n/3) = Θ(n)。
第 2 层:n/3 分成 n/9、2n/9;2n/3 分成 2n/9、4n/9。本层代价 = n/9 + 2n/9 + 2n/9 + 4n/9 = Θ(n)。
一般地,每一层的结点规模之和恒为 n → 每层代价都是 Θ(n)。
递归树最深的路径是不断走 2n/3 的那一支:
n → 2n/3 → (2n/3)² → … → 1
需要满足 (2/3)^h · n = 1,即 h = log_{3/2} n = log n / log(3/2) ≈ 1.7095 · log₂n → 树高 Θ(log n)。
T(n) = Θ(n) × Θ(log n) = Θ(n log n)
答案 A。