拿下技术面上传简历

归并排序的递归式为:T(1) = 1;当 n > 1 时 T(n) = 2T(n/2) + n(最后的 n 是合并两个有序子数组的代价)。请回答:(1) 画出递归树,每一层所有子问题上的代价加起来是多少,树有多少层?(2) 时间复杂度是多少?(3) 这个递归排序过程的额外空间复杂度是多少,由哪几部分组成?

数据结构与算法复杂度分析校招知识点 1 个

面试官在考什么

能否用递归树把“每层代价 × 层数”算清楚,而不是凭印象报一个 O(n log n);以及能否把递归栈深度也算进空间复杂度。

递归复杂度

回答框架 · 前两步

  1. 第 k 层有 2^k 个子问题,每个规模 n/2^k,各层合并代价之和恒为 n:因为每一层只是把 n 个元素分到不同子问题里,合并时每个元素被扫描一次。
  2. 当 n/2^k = 1 时 k = log2 n,所以树有 log2 n + 1 层。

还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

延伸阅读

想看这个方向的整体准备路线? 进入「数据结构与算法」方向页

同一能力域的其他题