- Python 数据结构与算法教程
- Python - 数据结构主页
- Python - 数据结构介绍
- Python - 数据结构环境
- Python - 数组
- Python - 列表
- Python - 元组
- Python - 字典
- Python - 二维数组
- Python - 矩阵
- Python - 集合
- Python - 映射
- Python - 链表
- Python - 栈
- Python - 队列
- Python - 双端队列
- Python - 高级链表
- Python - 哈希表
- Python - 二叉树
- Python - 搜索树
- Python - 堆
- Python - 图
- Python - 算法设计
- Python - 分治法
- Python - 递归
- Python - 回溯法
- Python - 排序算法
- Python - 搜索算法
- Python - 图算法
- Python - 算法分析
- Python - 大O表示法
- Python - 算法类
- Python - 均摊分析
- Python - 算法论证
- Python 数据结构与算法有用资源
- Python - 快速指南
- Python - 有用资源
- Python - 讨论
Python - 算法分析
算法的效率可以在两个不同的阶段进行分析,即实现之前和实现之后。它们如下所示:
先验分析 - 这是对算法的理论分析。通过假设所有其他因素(例如处理器速度)都是恒定的并且对实现没有影响来衡量算法的效率。
后验分析 - 这是对算法的经验分析。选择的算法使用编程语言实现。然后在目标计算机上执行此操作。在此分析中,收集实际统计数据,例如运行时间和所需空间。
算法复杂度
假设X是一个算法,n是输入数据的大小,算法X使用的 时间和空间是决定X效率的两个主要因素。
时间因素 - 通过计算关键操作的数量(例如排序算法中的比较)来衡量时间。
空间因素 - 通过计算算法所需的最大内存空间来衡量空间。
算法的复杂度f(n)给出算法的运行时间和/或存储空间,以n(作为输入数据的大小)表示。
空间复杂度
算法的空间复杂度表示算法在其生命周期中所需的内存空间量。算法所需的空间等于以下两个组成部分之和:
一个固定部分,即用于存储某些数据和变量的空间,这些数据和变量与问题的规模无关。例如,使用的简单变量和常量、程序大小等。
一个可变部分,即变量所需的空间,其大小取决于问题的规模。例如,动态内存分配、递归堆栈空间等。
任何算法P的空间复杂度S(P)为S(P) = C + SP(I),其中C是固定部分,S(I)是算法的可变部分,它取决于实例特征I。以下是一个简单的例子,试图解释这个概念:
算法:SUM(A, B)
步骤 1 - 开始
步骤 2 - C ← A + B + 10
步骤 3 - 停止
这里我们有三个变量A、B和C以及一个常量。因此S(P) = 1 + 3。现在,空间取决于给定变量和常量类型的数 据类型,并且将相应地进行乘法。
时间复杂度
算法的时间复杂度表示算法运行到完成所需的时间量。时间需求可以定义为一个数值函数T(n),其中T(n)可以衡量为步骤数,前提是每个步骤消耗恒定的时间。
例如,两个n位整数的加法需要n个步骤。因此,总计算时间为T(n) = c * n,其中c是两个位相加所需的时间。在这里,我们观察到T(n)随着输入大小的增加而线性增长。