一、算法复杂度
算法复杂度旨在计算在输入数据量N的情况下,算法的「时间使用」和「空间使用」情况;体现算法运行使用的时间和空间随「数据大小 N」而增大的速度。
算法复杂度主要可从 时间 、空间 两个角度评价:
时间: 假设各操作的运行时间为固定常数,统计算法运行的「计算操作的数量」 ,以代表算法运行所需时间;
空间: 统计在最差情况下,算法运行所需使用的「最大空间」;
「输入数据大小 N 」指算法处理的输入数据量;根据不同算法,具有不同定义,例如:
排序算法: N 代表需要排序的元素数量;
搜索算法: N 代表搜索范围的元素总数,例如数组大小、矩阵大小、二叉树节点数、图节点和边数等;
1.时间复杂度
根据定义,时间复杂度指输入数据大小为 N N N 时,算法运行所需花费的时间。需要注意:
- 统计的是算法的「计算操作数量」,而不是「运行的绝对时间」。计算操作数量和运行绝对时间呈正相关关系,并不相等。算法运行时间受到「编程语言 、计算机处理器速度、运行环境」等多种因素影响。例如,同样的算法使用 Python 或 C++ 实现、使用 CPU 或 GPU 、使用本地 IDE 或力扣平台提交,运行时间都不同。
- 体现的是计算操作随数据大小 N N N 变化时的变化情况。假设算法运行总共需要「 1 1 1 次操作」、「 100 100 100 次操作」,此两情况的时间复杂度都为常数级 O