1.复杂度的定义:
复杂度:复杂度 是程序运行时间 随 数据规模 增长而产生的变化趋势;
常见的复杂度(x轴为数据规模,y轴为程序运行时间):
常见复杂度大小关系:
O(1)<O(log2n)<O(sqrt(n))<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)
2.如何从推出程序的复杂度
比如:
for(i=0;i*i<n;i++)
{
....
}
设for语句执行次数为k,for每次执行时间为t,然后从程序可以看出数据规模为n;
i*i<n即i<根号n,也就是说for语句执行次数大概为根号n,即k约等于根号n,那么程序运行时间约为sqrt(n)*t,也就是这段程序的复杂度为O(sqrt(n))
3.常见复杂度
常数阶:O(1)(程序中不包含循环及递归)
线性阶:O(n)
平方阶:O(n∗n)
对数阶:O(log2n)
根号阶:O(√n)
O(n∗(n+m))
并列语句的执行趋势是相加的
包含语句的执行趋势是相乘的
但如果m改为n那么O(n∗n)