软件设计师 · 高频练习

递归式 T(n)=2T(n/2)+n 的时间复杂度是多少?

中级 单选题 第 948 题 中等 软件设计师Master Theorem递归式分治算法时间复杂度
题目

某分治算法把规模为 n 的问题分成 2 个规模为 n/2 的子问题,分解与合并的总工作量为 Θ(n)。其递归式为 T(n)=2T(n/2)+n,则时间复杂度为()。

A Θ(log n)
B Θ(n)
C Θ(n²)
D Θ(n log n)
题目类型:原创高频练习题 用途:用于帮助理解软件设计师相关考点和答案解析,不等同于官方真题。
正确答案
D
答案解析

递归树每层共有的子问题工作量为 n,问题规模每次减半,树高约为 log₂n,因此总代价为 n×log n,再加叶子层仍为同阶,得到 Θ(n log n)。

选项分析

A

错误。log n 只计算了递归层数,没有乘每层总工作量 n。

B

错误。单层是 n,但算法还有约 log n 层。

C

错误。各层总量没有按 n、2n、4n 增长到平方级。

D

正确。约log n层,每层总工作量Θ(n),因此为Θ(n log n)。

本题为什么容易错

最常见的两个错法是只看“规模减半”选 log n,或只看“有两个子问题”选 n²。复杂度要同时看分支数、子问题规模和每层额外工作。

先看结论

简短答案

递归式 T(n)=2T(n/2)+n 的时间复杂度是多少,正确答案是 D(Θ(n log n))。递归树每层共有的子问题工作量为 n,问题规模每次减半,树高约为 log₂n,因此总代价为 n×log n,再加叶子层仍为同阶,得到 Θ(n log n)。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
Θ(log n) 本题干扰项 错误。log n 只计算了递归层数,没有乘每层总工作量 n。 看到该词不要急着选,先判断是否真正解决题干问题
Θ(n) 本题干扰项 错误。单层是 n,但算法还有约 log n 层。 看到该词不要急着选,先判断是否真正解决题干问题
Θ(n²) 本题干扰项 错误。各层总量没有按 n、2n、4n 增长到平方级。 看到该词不要急着选,先判断是否真正解决题干问题
Θ(n log n) 本题正确答案 正确。约log n层,每层总工作量Θ(n),因此为Θ(n log n)。 看到题干核心场景时优先联想到它
本题易混淆选项怎么区分
  • Θ(log n):错误。log n 只计算了递归层数,没有乘每层总工作量 n。
  • Θ(n):错误。单层是 n,但算法还有约 log n 层。
  • Θ(n²):错误。各层总量没有按 n、2n、4n 增长到平方级。
复习

知识点详解

主定理适用于形如 T(n)=aT(n/b)+f(n) 的常见分治递归。这里 a=2、b=2,所以 n^(log_b a)=n;f(n)=n 与其同阶,结果多一个对数因子。递归树也能直观看到:第 i 层有 2^i 个规模 n/2^i 的子问题,该层非递归工作总和为 n,层数为 Θ(log n)。边界条件 T(1)=Θ(1) 不改变最终阶。

备考速记

两半递归,每层合计 n,共 log n 层,所以 n log n。

Master Theorem 在时间复杂度场景中的作用

Master Theorem在本题中的核心价值,是解决“某分治算法把规模为 n 的问题分成 2 个规模为 n/2 的子问题,分解与合并的总工作量为 Θ(n)。其递归式为 T(n)=2T(n/2)+n,则时间复杂度为()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出分治描述,先写递归式再求复杂度。
  • 比较二分查找、归并排序和二叉递归的复杂度。
Master Theorem 在软件设计师软考中的考法

软考选择题通常不会只考概念定义,还会把Master Theorem放到时间复杂度场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

这题不必死背公式。第一层合并工作是 n;下一层两个子问题,每个做 n/2,总和还是 n;再下一层四个 n/4,加起来仍是 n。规模从 n 不断减半到 1,大约有 log₂n 层,所以是每层 n 乘层数 log n。归并排序就是这类递归式的典型例子。

考点定位

看到 a=2、b=2、f(n)=n 时,n^(log_b a)=n,与 f(n) 同阶,对应 Θ(n log n)。不熟主定理也能画递归树。

易错提醒

  • 把 2T(n/2) 错当成每层工作量翻倍。
  • 漏掉递归树叶子数量和层数。
  • 未说明 n 不是 2 的幂时只影响常数和取整,不改变渐进阶。

备考提示

  • 不会主定理时,固定写前三层的节点数、单节点代价和层总代价。
  • 对比 T(n)=T(n/2)+1、2T(n/2)+1 和 2T(n/2)+n。

你可能还想了解

  • 为什么递归树每一层的工作量都是 n?
  • 主定理中的 a、b、f(n) 分别表示什么?
  • T(n)=2T(n/2)+1 的复杂度是多少?

本文小结

T(n)=2T(n/2)+n的递归树约有log n层,每层非递归工作总量都是n,因此时间复杂度为Θ(n log n)。