“时间复杂度按上述原语步数计算,空间按可达记录数及每条记录的常数字段计算。比较是否单位成本、是否允许随机分支、输入键是否为不可分原子,都必须随结论声明;“pointer machine”并不是…”
形式陈述 ​
时间界必须连同三项约定给出:输入怎样编码、规模怎样取、计算模型把哪些操作计作一步。复杂度理论通常固定有限字母表
对算法或机器
表示它从读入
因为
当
“运行时间”还有几种量词不同的版本:
| 保证 | 先固定什么,再聚合什么 |
|---|---|
| 最坏时间 | 固定长度 |
| 平均时间 | 先给定输入分布,再对输入取期望 |
| 期望时间 | 固定输入,对算法内部随机币取期望 |
| 摊还时间 | 对一串操作的总成本作上界,再除以操作数 |
平均时间与期望时间可以同时出现,此时有两个概率空间;摊还界则允许某一次操作远慢于平均值。没有写出量词和分布,就不能把这些保证互相替换。
直觉
时间复杂度是一份计费契约,不是墙钟秒数的预测。编码决定“输入有多长”,模型决定“走一步要付多少”,最坏情况量词决定“要为哪些输入负责”。三者固定后,增长率才可跨实现比较。渐近分析可以忽略固定倍率,却不能把任意精度乘法当作常数操作,也不能用数值
时间与空间复杂度衡量的资源不同:运行一步会永久增加时间计数,工作格却能擦除并复用。因此一个算法可能运行指数多步而只保留多项式数量的信息,也可能用额外存储换取更少步骤。
例子与边界
可复算的二分搜索界 ​
设有序数组可随机访问,一次索引和一次关键字比较都按常数计费。比较中点后,尚待搜索的元素至多为原来的一半,因此最坏比较次数满足
展开递推得到
编码长度与伪多项式时间 ​
若正整数
模型边界 ​
单位代价 RAM 若允许对任意长整数一次完成乘法,会把位运算成本藏进一个步骤。位复杂度模型则让加法、乘法随操作数长度收费。一次 benchmark、最好情况或“典型输入很快”也都不能推出最坏渐近界;随机算法的高概率界还须给出失败概率如何随
推论与应用
具体任务会换用更贴近瓶颈的模型。Word-RAM按机器字操作计费,外存模型统计块传输,数据流模型同时约束遍数与存储,Work–Depth 模型把总工作和关键路径分开。相同算法在这些模型中的数字不可脱离模型名称解释。
粗粒度复杂度理论常以图灵机统一编码与步数,再由预算函数定义确定性时间类。合理模型之间通常存在多项式开销的模拟,所以 P、EXP 等多项式或指数尺度的类别较稳定;线性、近线性和常数因子结论则仍然依赖具体模型。
参考资料
- Sanjeev Arora and Boaz Barak, Computational Complexity: A Modern Approach, Cambridge University Press, 2009, §1.2.
- Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, 2013, §7.1.
- Thomas H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, Chapters 2–3.