【算法分析与设计】第2篇:计算模型与渐进复杂性分析

上一篇我们确立了算法评价的三个维度:正确性、效率与最优性。但当我们声称"算法A比算法B快"时,这句话究竟是什么意思?同一个算法在笔记本电脑和超级计算机上运行的秒数不同,用秒表衡量算法效率显然毫无意义。我们需要一个独立于硬件性能的尺度,这便是计算模型的任务。

计算模型的核心功能,是将"执行一个操作"抽象为可计量的基本单位。本文介绍两种最主流的模型。

第一种是图灵机模型。它的结构极为朴素:一条无限长的纸带被划分为一个个格子,一个读写头在纸带上左右移动,根据当前状态和读取到的符号决定写入什么、如何移动以及跳到什么状态。听起来笨拙,但Church-Turing论题断言:任何在物理世界中可计算的问题,图灵机都可计算。它的价值在于界定"可计算性"的理论边界,但在日常的算法分析中,用图灵机去描述一个排序过程显然是杀鸡用牛刀。

因此实际分析中更常用的是第二种------RAM模型,即随机存取机器模型。它假设我们有一台理想化计算机:每个简单操作(算术运算、比较、赋值、内存存取等)都花费一个单位时间,每条简单指令顺序执行,没有缓存未命中,没有流水线停顿。虽然真实机器远比这复杂,但RAM模型抓住了计算量的核心趋势,使得跨语言、跨平台的算法效率比较成为可能。

建立在计算模型之上,我们就获得了刻画渐进复杂度的数学语言。下面给出五种渐进记号的严格定义。设n为输入规模,f(n)和g(n)均为非负函数。

O记号(大O,上界):f(n)=O(g(n)),当且仅当存在正常数c和n₀,使得对所有n≥n₀,有f(n)≤c·g(n)。它描述的是"算法最慢不会慢过多少",是最常用的上界标记。比如遍历数组耗时2n+3步,我们说它是O(n)的。

Ω记号(大Ω,下界):f(n)=Ω(g(n)),当且仅当存在正常数c和n₀,使得对所有n≥n₀,有f(n)≥c·g(n)。它回答"算法至少要做多少工作",比如基于比较的排序算法下界是Ω(n log n)。

Θ记号(大Θ,紧确界):f(n)=Θ(g(n)),当且仅当同时存在正常数c₁、c₂和n₀,使得对所有n≥n₀,有c₁·g(n)≤f(n)≤c₂·g(n)。它锁定了一个函数的精确增长阶,是我们最希望给出的结论------既不太松也不太紧。

o记号(小o,非紧上界):f(n)=o(g(n)),当且仅当对任意正常数c,总存在n₀,使得n≥n₀时f(n)<c·g(n)。它比大O更强,表示f(n)的增长严格慢于g(n),比如n log n=o(n²)。

ω记号(小ω,非紧下界):f(n)=ω(g(n)),当且仅当对任意正常数c,总存在n₀,使得n≥n₀时f(n)>c·g(n)。与大Ω的界限可以相等不同,小ω要求f(n)的增长严格快于g(n)。

在这套记号的帮助下,我们可以在三个层面描述算法的复杂度。

最好情况复杂度 ,是算法在最优输入下的表现。它往往很漂亮,但没什么实用价值------极少有人会指望输入数据恰好排好序。最坏情况复杂度 ,是算法在最劣输入下的表现,它提供了一个铁定的上限保证:无论输入多么刁钻,算法的运行时间都不会超过这个量级。这是工程中最受重视的指标。而平均情况复杂度,是对所有可能输入按其概率分布加权求期望。它更贴近日常表现,但需要假设输入服从某种分布,分析过程也往往需要复杂的数学技巧。

接下来的学习中你会反复看到:我们讨论复杂度时,绝大多数时候说的都是最坏情况下的渐进上界,也就是最坏情况的大O。这并非因为其他指标不重要,而是因为它给出了最可靠的安全承诺。

从下一篇开始,我们将带着这套分析工具,进入第一个具体的算法设计主题------递归,以及它背后的数学语言:递归方程。

相关推荐
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼3 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark3 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her13 天前
并查集-听课笔记
笔记·算法·并查集
码流子3 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven3 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark3 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法