我需要帮助计算时间复杂度
for(int i=0;i<N;i++)
{
for(int j=0;i+j<N;j++)
{
//some operation here
}
}
答案 0 :(得分:0)
参考:How to Calculate Time complexity algorithm
我发现了一篇与如何计算任何算法或程序的时间复杂度相关的好文章
计算时间复杂度的最常用指标是Big O表示法。这消除了所有常数因子,因此当N接近无穷大时,可以相对于N估计运行时间。一般来说,你可以这样想:
statement;
不变。语句的运行时间不会因 N 而改变。
for ( i = 0; i < N; i++ )
statement;
是线性的。循环的运行时间与N成正比。当N加倍时,运行时间也会增加。
for ( i = 0; i < N; i++ ) {
for ( j = 0; j < N; j++ )
statement;
}
是二次的。两个循环的运行时间与N的平方成正比。当N加倍时,运行时间增加 N * N.
while ( low <= high ) {
mid = ( low + high ) / 2;
if ( target < list[mid] )
high = mid - 1;
else if ( target > list[mid] )
low = mid + 1;
else break;
}
是对数。算法的运行时间与N除以2的次数成正比。这是因为算法将工作区域与每次迭代分成两半。
void quicksort ( int list[], int left, int right )
{
int pivot = partition ( list, left, right );
quicksort ( list, left, pivot - 1 );
quicksort ( list, pivot + 1, right );
}
N * log(N)。运行时间由N个循环(迭代或递归)组成,这些循环是对数的,因此算法是线性和对数的组合。
一般来说,对一个维度中的每个项目执行某些操作是线性的,对二维中的每个项目执行某些操作是二次的,将工作区域分成两半是对数的。还有其他Big O指标,如立方,指数和平方根,但它们并不常见。 Big O表示法被描述为O(),其中是度量。快速排序算法将被描述为 O(N * log(N))。