算法复杂度分析:从基础到应用
1 算法复杂度概述
在评估一个算法的优劣时,我们需要先明确评判的标准。因为在不同的场景下,适用的评判标准可能不同。不过,最基本的是算法必须正确,若算法不正确,其他特性也就失去了意义。虽然确定算法的正确性并非易事,但这里我们假设算法是正确的,重点关注算法的性能方面。
算法性能的一个重要方面是其对输入的依赖。对于程序,我们可以通过特定输入集运行并观察其行为,但算法无法直接运行和观察。因此,我们通过抽象输入集,将输入集的大小作为参数,使算法行为的描述成为该参数的函数,以此获得对算法行为的通用描述。
例如,我们想知道使用算法 A 对给定输入集进行排序所需的指令数。如果是对 100 个数字的集合 S 排序,我们能准确确定执行的指令数;但对于任意 100 个元素的集合排序所需的指令数,答案就不那么精确了,可能只能给出一个范围。
确定算法的计算复杂度,通常是通过检查算法的语法组件(即语句)来抽象地计算解决问题所需的语句数。语句计数能较为准确地反映执行时间,但这只是算法行为的一个重要方面,还有其他方面值得关注。
2 算法的时间和空间复杂度
2.1 时间复杂度和空间复杂度的定义
对于一个(正确的)程序,人们常关心其执行时间;对于算法,则关注其时间复杂度。程序可通过运行特定数据集来测量执行时间,而算法需采用语句计数的方法。
给定算法 A 和输入集的度量 n(通常是输入集的大小),算法 A 的时间复杂度定义为将 A 应用于任何度量为 n 的输入集时必须执行的原子指令或操作的数量 f(n)(更具体地说,这是最坏情况下的时间复杂度)。算法 A 的空间复杂度是指 A 进行
超级会员免费看
订阅专栏 解锁全文

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



