抽象可视化
代码太长,无法逐行记在脑中时,抽象可以帮助我们分析程序。本组课程从函数调用和返回值开始,再用成本模型比较算法,最后介绍协议、解析器和界面流程中的状态与事件。
抽象要选择能解释行为的细节。调用栈帧隐藏了解释器的内部机制;Big-O 忽略精确耗时,保留增长趋势;有限状态机用当前状态和下一个事件描述系统。保留哪些细节,取决于要回答的问题。
如何阅读抽象课程
观察变化中保持成立的规则:
- 调用栈结构:递归调用压入栈帧,返回按后进先出的顺序弹出栈帧。
- 局部状态:每个栈帧都有自己的变量,即使它们调用同一个函数。
- 增长趋势:比较算法时,操作次数比受环境影响的计时更能说明增长规律。
- 转移规则:同一个事件在不同状态下可能触发不同的行为。
抽象应帮助你回答具体问题:现在执行哪个栈帧?返回值交给谁?n 翻倍后,工作量如何变化?这个事件在当前状态下意味着什么?
抽象课程
| 课程 | 核心概念 | 观察重点 |
|---|---|---|
| 递归与调用栈 | 递归也是函数调用,每次调用都有独立栈帧 | 栈帧的压入、暂停、返回和弹出 |
| 数步骤理解 Big-O | 根据操作次数分析复杂度 | n 翻倍时,O(1)、O(log n)、O(n)、O(n²) 的区别 |
| 状态机 | 根据 (state, event) 查找行为 | 状态不同,同一事件匹配的转移规则也可能不同 |
先学递归与调用栈,沿着栈帧和返回值的路径理解递归。
再学数步骤理解 Big-O。理解执行过程后,就能统计工作量。输入翻倍的实验说明:两个程序都能完成任务,却可能在输入增长时表现不同。
最后学状态机,为系统课程做准备。分析 TCP、调度器、解析器和界面流程时,除了事件本身,还要看事件发生时系统所处的状态。
全部抽象可视化课程
选择下面的课程,逐步执行,在信息较多的画面暂停。试着指出:这幅图展示了哪条原本看不见的规则?