第02章 入门 — 章节汇总

章节概览

第2章”入门”是《算法导论》正式进入算法设计与分析的第一章,由三节组成。2.1 插入排序以扑克牌整理为类比,完整展示了 INSERTION-SORT 伪代码,并通过循环不变式方法严格证明了算法正确性,同时系统阐述了全书使用的伪代码约定;2.2 算法分析引入 RAM 计算模型,以插入排序为例演示了逐行成本分析方法,推导出最好情况 、最坏情况 和平均情况 的运行时间,并介绍了增长量级与 记号的非形式化定义;2.3 分治法系统介绍了分治算法设计范式,以归并排序为完整案例,展示了 MERGE 过程、递归关系式的建立与求解,以及递归树方法推导 时间复杂度的全过程。全章建立了”算法设计—正确性证明—效率分析”三位一体的基本方法论,为后续深入学习奠定坚实基础。


2.1 插入排序 — 要点汇总

INSERTION-SORT 伪代码

  • 核心思想:增量方法(incremental method),维护已排序子数组,每次将新元素插入正确位置
  • 扑克牌类比:左手持已排序牌,右手逐一取牌插入正确位置
  • 排序问题定义:输入 个数的序列,输出满足非递减顺序的排列
  • 关键字与卫星数据:被排序的数称为关键字(key),关联的其他数据称为卫星数据(satellite data),排序时记录随关键字一起移动
INSERTION-SORT(A, n)
1  for i = 2 to n
2      key = A[i]
3      // 将 A[i] 插入到已排序子数组 A[1 : i-1] 中
4      j = i - 1
5      while j > 0 and A[j] > key
6          A[j + 1] = A[j]
7          j = j - 1
8      A[j + 1] = key

循环不变式证明

循环不变式:在每次外层 for 循环迭代开始时,子数组 由原来在 中的元素组成,且已排好序。

性质内容
初始化 时, 只含单个元素,天然有序
保持循环体将 key 插入正确位置, 变为有序,下次迭代 递增后不变式成立
终止 时, 即整个数组已排序,算法正确

循环不变式与数学归纳法高度相似:初始化对应基础步,保持对应归纳步,终止利用终止条件得出最终结论。

伪代码约定

  • 缩进表示块结构(无花括号)
  • 循环计数器退出后保留值(for i = 2 to n 退出后
  • 1 起始下标(1-origin indexing), 表示子数组
  • 对象属性用点号访问(如 x.f),支持级联
  • 标量按值传参,数组和对象传递指针
  • and/or 为短路运算符
  • NIL 表示空指针,error 表示立即终止

2.2 算法分析 — 要点汇总

RAM 模型

  • 随机访问机(Random-Access Machine):单处理器、串行执行
  • 每条指令和数据访问均花费常数时间
  • 数据类型:整数、浮点数、字符;布尔值用 0/非 0 表示
  • 字长限制:整数通常为
  • 不包含内存层次结构(缓存、虚拟内存等)
  • 灰色区域:指数运算 一般不是常数时间操作

运行时间分析

  • 输入规模:排序问题用元素数量 ;图问题用顶点数和边数
  • 运行时间 :所有语句的”成本 次数”之和
  • 以插入排序为例,设 为 while 循环对每个 的测试次数:

最坏情况、最好情况与平均情况

情况条件运行时间
最好情况数组已排序
最坏情况数组逆序
平均情况随机排列

通常关注最坏情况的三个原因:(1) 保证运行时间上界;(2) 最坏情况经常发生;(3) 平均情况通常与最坏情况同量级。

增长量级与 记号

  • 增长量级:只保留最高阶项,忽略常数系数(如
  • 记号 意味着”当 较大时,大致正比于 “(严格定义见第 3 章)
  • 增长量级层次:

2.3 分治法 — 要点汇总

分治法范式

分治法是一种递归式算法设计范式,每步执行三个操作:

步骤英文含义
分解Divide将问题划分为更小的子问题
解决Conquer递归求解子问题(规模足够小时直接求解 = 基准情况)
合并Combine将子问题的解合并为原问题的解

MERGE-SORT 与 MERGE 过程

  • MERGE-SORT:计算中点 ,递归排序左右两半,调用 MERGE 合并
  • 基准情况 时(至多一个元素),直接返回
  • MERGE:将两个有序子数组 合并为有序的 ,时间
  • MERGE 使用临时数组 ,通过三路 while 循环实现线性时间合并

递归关系式

归并排序的递归关系式:

其中 是递归求解两个规模为 的子问题的代价, 是分解和合并的代价。

递归树方法

  • 树的每一层代价均为 (节点数翻倍但每节点代价减半,恰好抵消)
  • 总层数:
  • 总代价:
  • 归并排序用 因子替换了插入排序的 因子,对大规模输入优势显著

跨章关联

关联章节关联内容关联说明
第1章插入排序与循环不变式的首次引入第1章以插入排序为范例介绍算法概念,第2章深入展开其伪代码、正确性证明与复杂度分析
3.1 渐近记号 记号的严格定义2.2 节非形式化引入 记号,第3章将给出 的严格数学定义

笔记索引

笔记核心主题
2.12.1 插入排序INSERTION-SORT 伪代码、循环不变式、正确性证明、伪代码约定
2.22.2 算法分析RAM 模型、最坏/最好/平均情况分析、增长量级、 记号
2.32.3 分治法分治范式、归并排序、MERGE 过程、递归关系式、递归树

第02章_入门