算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。
一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。
计算机的资源,最重要的是时间和空间(即存储器)资源。
因而,算法的复杂性有时间复杂性和空间复杂性之分。
不言而喻,对于任意给定的问题,设计出复杂性尽可能低的算法是我们在设计算法时追求的一个重要目标;
另一方面,当给定的问题已有多种算法时,选择其中复杂性最低者,是我们在选用算法适应遵循的一个重要准则。
因此,算法的复杂性分析对算法的设计或选用有着重要的指导意义和实用价值。
1.时间复杂性:
如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数 T(n)称为这一算法的“时间复杂性”
例1:设一程序段如下
for (int i = 0; i < n; i++) // (i = 0) 1次 (i < n) n次 (i++) n次 { for (int j = 0; j < n; j++) // (j = 0) n次 (j < n) n*n次 (j++) n*n次 { x++; //(i++) n*n次 } }
可见,这段程序总的执行次数是:T(n)=1+3n+3n*n。
因为时间复杂度是不考虑系数的
所以 T(n)=O(n^2)
2.空间复杂性:
包括程序代码所占用的空间,输入数据所占用的空间和辅助变量所占用的空间这三个方面。
一个算法的空间复杂度只考虑在运行过程中为局部变量分配的存储空间的大小
只要不超过内存,尽可能用空间换时间。