算法复杂度分析的基础假设
在算法复杂度分析中,存在一些基础假设,这些假设极大地简化了算法性能指标的确定过程。以下将详细介绍这些假设及其影响。
1. 语句计数的基本假设
在开发操作或语句计数理论时,我们默认所有语句的复杂度具有可比性,但这背后隐藏着许多棘手问题。首先要明确哪些操作可被视为原子操作,这与内存访问的随机访问属性密切相关。
原子操作在不同复杂度概念(位复杂度和字复杂度)下有不同定义。在位复杂度中,原子操作涉及操作数的单个位;在字复杂度中,操作则针对整个字。例如,比较两个整数,字复杂度下为 O(1),但在位复杂度下,若整数有 m 位,则为 O(m)。
对于语句,只要包含固定数量的原子操作,操作和语句在复杂度上(常数因子范围内)就是等价的。例如,“X := 2*X + 1” 包含一次乘法、一次加法和一次赋值,这些基本算术操作在时间要求上具有可比性。
内存访问方面,主内存具有随机访问属性(RAP),即任何单元都有唯一索引,访问时间与索引值无关。简单变量在主内存中的访问符合这一范式,可视为原子操作。但并非所有数据结构都能保留 RAP,如线性列表,访问第 50 个元素需依次访问前 49 个元素,访问最后一个元素的时间与列表大小成正比。
多维数组在适当映射到内存空间时能保留 RAP。常见的映射方式有行主序和列主序。以行主序为例,对于 k 维数组 A,其元素的索引计算虽最初复杂度为 O(k²),但优化后可达到 O(k)。由于 k 不影响数组大小,可视为常数,因此行主序和列主序都能保留主内存的随机访问属性,k 维数组也具备 RAP。
对于语句 “C[i,j] := C[i,j] + A[i,k]*B[k,j]
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



