算法与算法复杂度
- 算法:对解题方案的准确而完整的描述。
- 算法的特点:
(1).可行性——步骤是可执行的,且执行结果能够达到预期目的。
(2).确定性——每个步骤都是明确、无歧义的。
(3).有穷性——整个过程可以在有限的时间内完成。
(4).拥有足够的情报——算法要拥有足够的输入或初始化信息,否则算法可能是无效的。
- 算法复杂度:
-
时间复杂度:算法的时间复杂度用来度量算法的运行时间,记作: T(n) = O(f(n))。它表示随着输入大小n的增大算法执行需要的时间的增长速度,可以用 f(n) 来描述。
简单来说,算法的时间复杂度指的是执行算法所需要的计算工作量。
注意:在同一个问题规模下,算法的基本运算次数可能与输入有关。
-
空间复杂度:指执行这个算法所需的内存空间。具体包括
(1). 输入数据所占的存储空间。
(2).程序本身所占的存储空间。
(3).算法执行过程中所需的额外空间(包括执行算法所需的工作单元以及某种数据结构所需的额外存储空间)。
注意:
(1). 如果额外空间量不随问题规模(即输入数据的存储空间)变化而变化,则我们称这个算法是原地工作的(in place)。
(2). 主要通过降低输入数据所占存储空间以及额外空间来降低算法的空间复杂度,具体技术如压缩存储技术等。