数据结构中的时间和空间复杂度


算法分析

算法效率的分析可以在两个不同的阶段进行,即实现之前和实现之后,如下所示:

先验分析 - 这被定义为算法的理论分析。通过假设所有其他因素(例如处理器的速度)都是恒定且对实现没有影响来衡量算法的效率。

后验分析 - 这被定义为算法的经验分析。所选择的算法使用编程语言实现。接下来,所选择的算法在目标计算机上执行。在此分析中,会收集实际统计数据,例如运行时间和所需空间。

算法分析处理的是各种操作的执行或运行时间。操作的运行时间可以定义为每个操作执行的计算机指令数。

算法复杂度

假设 X 代表一个算法,N 代表输入数据的规模,算法 X 实现的时间和空间是决定 X 效率的两个主要因素。

时间因素 - 通过计算关键操作的数量(例如排序算法中的比较次数)来计算或测量时间。

空间因素 - 通过计算算法所需的最大内存空间来计算或测量空间。

算法的复杂度 f(N) 提供了算法相对于输入数据大小 N 的运行时间和/或存储空间。

空间复杂度

算法的空间复杂度 表示算法在其生命周期中所需的内存空间量。

算法所需的空间等于以下两个部分的总和:

固定部分,这是存储某些数据和变量(即简单变量和常量、程序大小等)所需的空间,这些空间不依赖于问题的规模。

可变部分,这是由变量所需的空间,其大小完全取决于问题的规模。例如,递归堆栈空间、动态内存分配等。

任何算法 p 的空间复杂度 S(p) 为 S(p) = A + Sp(I),其中 A 代表算法的固定部分,S(I) 代表算法的可变部分,它取决于实例特性 I。以下是一个简单的例子,试图解释这个概念:

算法

SUM(P, Q)
Step 1 - START
Step 2 - R ← P + Q + 10
Step 3 - Stop

这里我们有三个变量 P、Q 和 R 以及一个常量。因此 S(p) = 1+3。现在空间取决于给定常量类型和变量的数据类型,并将相应地进行乘法。

时间复杂度

算法的时间复杂度表示算法执行到完成所需的时间量。时间需求可以用数值函数 t(N) 表示或定义,其中 t(N) 可以测量为步骤数,前提是每个步骤都花费恒定时间。

例如,对于两个 n 位整数的加法,需要 N 个步骤。因此,总计算时间为 t(N) = c*n,其中 c 是两个位相加所花费的时间。在这里,我们观察到 t(N) 随着输入大小的增加而线性增长。

更新于:2023年11月1日

49K+ 浏览量

开启你的职业生涯

通过完成课程获得认证

开始学习
广告