时间复杂度
1、定义
算法复杂度是衡量代码执行时,所消耗资源的多少,包括时间资源和内存资源,分别对应于时间复杂度和空间复杂度。
针对时间复杂度,假设问题规模n,记时间频度T(n),引入辅助函数f(n),如果存在正常数c,使得c*f(n) >= T(n)恒成立,则称O(f(n))为渐进时间复杂度,记作T(n)=O(f(n))。其本质是,利用极限工具,将问题进一步抽象简化,用问题中主要矛盾f(n)来更方便地评估算法的复杂程度。
2、作用
定性评估算法复杂程度,可作为算法比较或者算法改进的依据。
根据时间复杂度的阶次,可分为常数阶、对数阶、线性对数阶、平方阶、立方阶等。
3、举例
for (int i=0; i<n; i++) // L1 for(int j=0; j<n; j++) // L2 cout << a[i][j] << endl; // L3
代码执行次数:
1)L1:1+n+n = 2n+1
2)L2:n(1+n+n)=2n2+n
3)L3:n*n=n2
因此,T(n) = 3n2+3n+1
故,f(n) = n2
即时间复杂度为O(n2)