Skip to content

定义Definition

时间复杂度

Time complexity · Running time

在固定计算模型与输入编码后,算法运行步骤数随输入规模增长的量级。

形式陈述 ​

时间界必须连同三项约定给出:输入怎样编码、规模怎样取、计算模型把哪些操作计作一步。复杂度理论通常固定有限字母表 Σ,以编码长度 n=|x| 为规模;若研究图算法时另写 n=|V|,m=|E|,就必须说明图的编码以及两个参数如何进入上界。

对算法或机器 A,令

timeA(x)∈N∪{+∞}

表示它从读入 x 到停机所执行的步数,不停机时取 +∞。逐长度的最坏运行时间为

tA(n)=maxx∈ΣntimeA(x).

因为 Σn 有限,只要 A 对所有输入停机,这个最大值就存在。若只把一部分字串视为合法实例,算法仍应规定如何处理非法编码;否则“只对合法输入取最大值”必须作为承诺问题的一部分明说。

逐长度最坏时间

当 tA∈O(T) 时,称 A 的最坏时间为 O(T(n))。这里的渐近记号只比较已经定义好的成本函数;它既不选择单步操作,也不保证上界紧确。若要声称 tA∈Θ(T),还需证明匹配的 Ω(T) 下界。

“运行时间”还有几种量词不同的版本:

保证 先固定什么,再聚合什么
最坏时间 固定长度 n,对该长度的全部输入取最大值
平均时间 先给定输入分布,再对输入取期望
期望时间 固定输入,对算法内部随机币取期望
摊还时间 对一串操作的总成本作上界,再除以操作数

平均时间与期望时间可以同时出现,此时有两个概率空间。例如随机算法在最坏输入上的期望时间是 max|x|=nEr[T(x,r)];要求每次运行都快则是 max|x|=n,rT(x,r),后者强得多。摊还界又允许某一次操作远慢于平均值:动态数组扩容时要复制全部已有元素,但容量每次翻倍使前 m 次插入的复制总量为 1+2+4+⋯<2m,于是总成本为 O(m)。这里没有对输入或随机币取平均,不能把“摊还”写成一种概率保证。

直觉

时间复杂度是一份计费契约,不是墙钟秒数的预测。编码决定“输入有多长”,模型决定“走一步要付多少”,最坏情况量词决定“要为哪些输入负责”。三者固定后,增长率才可跨实现比较。渐近分析可以忽略固定倍率,却不能把任意精度乘法当作常数操作,也不能用数值 N 冒充写下 N 所需的位数。

时间与空间复杂度衡量的资源不同:运行一步会永久增加时间计数,工作格却能擦除并复用。因此一个算法可能运行指数多步而只保留多项式数量的信息,也可能用额外存储换取更少步骤。

例子与边界

可复算的二分搜索界 ​

设有序数组可随机访问,一次索引和一次关键字比较都按常数计费。比较中点后,尚待搜索的元素至多为原来的一半,因此最坏比较次数满足

C(0)=0,C(n)≤1+C(⌊n/2⌋).

展开递推得到 C(n)≤⌈log2⁡(n+1)⌉;例如 n=8 时,剩余候选数可依次为 8,4,2,1,0,对应四次比较;只有把含中点的已检查位置移出下一轮,递推才成立。若输入只能顺序读取,定位中点本身就不再是常数操作,这个界不能原样搬过去。

编码长度与伪多项式时间 ​

若正整数 N 用二进制编码,其长度为 m=⌊log2⁡N⌋+1。执行 N 次循环是 O(N),但用输入长度表示就是 O(2m)。因此“关于 N 是多项式”并不等于“关于输入编码长度是多项式”;背包动态规划的 O(nW) 界在容量 W 以二进制给出时也是同一种风险。

模型边界 ​

单位代价 RAM 若允许对任意长整数一次完成乘法,会把位运算成本藏进一个步骤。位复杂度则让加法、乘法随操作数长度收费,并累加中间数增长后的实际成本。一次 benchmark、最好情况或“典型输入很快”也都不能推出最坏渐近界;随机算法的高概率界还须给出失败概率如何随 n 变化。

推论与应用

具体任务会换用更贴近瓶颈的模型。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.
关系图谱91 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

被这些条目使用

并列辨析