数据结构_时间复杂度
数据结构基础_时间复杂度
俗话说:程序 = 数据结构 + 算法 ;由此可见数据结构的重要性,本篇就是笔者学习数据结构的过程中的总结,可能带给您的就是从入门到脱坑...
定义
时间复杂度又称为计算复杂度,是算法有效性的度量之一。算法的时间复杂度是一个算法运行时间的相对度量。而一个算法的运行时间是指计算机上从开始运行到结束整个算法所使用的时间,大致等于计算机执行的一种操作(比如赋值,比较,计算,转向,返回,输入,输出等)所需要的时间与算法中进行基本操作次数的乘积。因为执行一种基本操作所需要的时间因机器而异,它是由机器本身的软硬件环境决定的,与算法无关,所以基本上只讨论一个问题-算法中进行基本操作的次数。
应用
如:
求1到n的整数和。
int sum = 0;
for(int i =1;i<=n;i++)
{
sum += i;
}
上述小程序中,定义赋值执行了1次,for循环中,定义赋值执行1次,判断语句执行n+1次 ,基本操作语句执行n次,循环体内执行n次;加起来整个执行次数为3n+2。
如:
两个n*n维矩阵相加。
void MatrixAdd(int[,] arr1,int[,] arr2,int[,] sum)
{
int i , j;
for(i =0;i<n;i++)
{
for(j=0;j<n;j++)
{
sum[i,j] =arr1[i,j]+arr2[i,j];
}
}
}
运行此算法色基本操作次数等于双重for循环语句所包含的基本操作sum[i][j]=arr1[i,j]+arr2[i,j]
的次数。最后得出基本操作次数为3n^2+3n+3;
其实到这我们可以看出,算一个算法的运行时间的计算是相当烦琐的,对于比较复杂的算法更是如此,所以我们用一个大概的方式(数量级Order)表示。
一般情况下,算法的运行时间T是问题规模n的函数f(n),算法的时间度量记作
T(n)=O(f(n))
表示当问题规模n增大时,算法的执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度,用数学符号"o"来表示,也称大o表示法。
如果一个算法只存在顺序和选择结构,没有循环结构,那么算法中基本操作的执行频度与问题规模n无关,算法的时间复杂度记作O(1),也称为常数阶。如果一个算法只有一重循环,则算法的基本操作的执行频度与问题规模n呈线性增大关系,算法复杂度记作O(n),也叫线性阶。算法的时间复杂度通常还有多种形式。例如,对数组进行排序的各种简单时间复杂度为平方阶O(n2);两个n维矩阵的乘法运算其时间复杂度为立方阶O(n3)等等。
本作品由繁星陨辰采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。