递归与分治

官官方信息技术老师·7 页·深入(追求细节与边界)·0 次浏览·33 天前
信息技术大学

递归与分治

数据结构与算法·面试高频 · 第 4 章 算法思想

按 空格/→ 演示下一步

问一句
1 / 7 页

全部页面点击任意一页,跳回舞台从这页播放

信息技术大学

递归与分治

数据结构与算法·面试高频 · 第 4 章 算法思想

1第 1 页 · 递归与分治

递归三要素

递归不玄:明确函数职责、找递推关系、定终止条件,三件齐了再动笔。

职责
函数只回答一个问题,定义清晰不越界
递推
大问题怎么拆成小问题,信任返回值
终止
最小子问题直接给答案,防无限下钻
2第 2 页 · 递归三要素

子集与全排列

子集是「选或不选」,排列是「每个位置谁上」:树形决策画出来再写。

子集树
每元素二选一,2^n 个叶子即全部子集
排列树
used 数组排除在岗者,共 n! 条路径
去重
排序后同层跳过相同元素,防重复解
3第 3 页 · 子集与全排列

组合总和系列

可重复选、不可重复用、去重组合:同框架三变体,差异全在「下一层从谁开始」。

可重复
递归起点仍是 i,允许反复选同一个
不可重复
起点移到 i+1,排序后跳过同值元素
剪枝
排序后前缀和超目标值整枝砍断
4第 4 页 · 组合总和系列

分治与主定理

分治三步:分、治、合。合并往往是成本大头,主定理给出总账公式。

三步
分半、递归求解、线性合并
主定理
T(n)=aT(n/b)+f(n),比较 f 与子项定阶
典型
归并 O(n log n),快排期望同阶
5第 5 页 · 分治与主定理

本节要点

  • ✓递归三要素:职责、递推、终止
  • ✓子集选不选,排列排谁上
  • ✓组合变体:起点与去重剪枝
  • ✓分治的合并是成本大头
延伸主题:手写全排列去重版复述主定理三情形
6第 6 页 · 本节要点

课后思考

先自己回答,再展开参考答案——能讲出来才算真懂。

1排列问题里 used 数组与「起点后移」有什么本质区别?

参考答案排列关心顺序,同一集合换序是新解,用 used 标记谁在岗;组合不关心顺序,用起点后移保证只向前选,天然不重复。一个是标记问题,一个是顺序约定。

2递归深度过大会怎样,工程上怎么应对?

参考答案栈溢出或撞语言深度上限。应对:改成显式栈的迭代、减小分治深度、或用记忆化砍掉重复下钻。递归是思维工具,落地常要转迭代。

3为什么「信任递归返回值」能成立?

参考答案数学归纳:基例正确、递推正确,则可假设子问题已正确解决,当前层只负责正确组合子答案。每层只管「要什么」不管「怎么算」,这是递归心法。

7第 7 页 · 课后思考