for(i=l;i<=n;i++)
{
k++;
for(j=l;j<=m;j++)
m+=k;
}
上述程序中,时间复杂度还是n平方吗?还是nm?语句的运行次数和时间复杂度的区别在哪?
很多时候,运行次数就等于时间复杂度
你想知道它俩区别在哪,就先要搞清楚到底什么叫时间复杂度
时间复杂度指一个过程的运行时间与n的关系
循环次数可以写作n的多项式形式
比如一个循环执行次数是3n次,那么它是与n成正比的,所以是O(n),而不是O(3n),系数可以忽略
同样的,如果执行次数是n+500,随着n不断增大,500这个确定的值是可以忽略不计的,所以复杂度还是O(n)而不是O(n+500)
如果循环次数是n^2+n,那么很显然n^2占据绝对主导地位,一次项将被忽略,所以复杂度是O(n^2)
复杂度只取n的多项式中最高次项
该程序的时间复杂度为 $O(nm)$,其中 $n$ 和 $m$ 分别代表两个循环的迭代次数。
语句的运行次数和时间复杂度的区别在于,语句的运行次数是指程序中某一条语句被执行的次数,而时间复杂度是对整个程序运行时间的估计,它不仅考虑了每条语句的运行次数,还考虑了算法在输入规模增大时的表现。因此,时间复杂度是对算法效率的综合评价,更能反映算法的优劣。