2013-04-09 70 views
0

好吧,我想了解大O的概念。我有一个功能,我想找到大O,我不是很“得到它”,这是一本书中的例子一个就像我的家庭作业..我知道答案是O(nk),但是有人可以用简单的术语来解释这个问题,所以我可能会更好地理解。BIg O对初学者的帮助

int selectkth(int a[], int k, int n) 
{ 
int i, j, mini, tmp; 
for (i=0; i < k; i++) 
{ 
mini = i; 
for (j = i+1; j < n; j++) 
{ 
if (a[j] < a[mini]) 
mini = k; 
tmp = a[i]; 
a[i] = a[mini]; 
a[mini] = tmp; 
} 
} 
return a[k-1]; 
} 
+0

检查循环次数可能有助于引导您更加接近准确的复杂度度量......但作为一个更好的(也许更准确的)参考,我建议您看看这个其他的[问题/答案](http:///stackoverflow.com/questions/3255/big-o-how-do-you-calculate-approximate-it)(特别是,[这个答案](http://stackoverflow.com/a/4852666/11677 50)。)):) – summea 2013-04-09 23:46:50

回答

1

在计算bigO的时候试着想想最坏的时间复杂度,并且注意循环。这里,我们有两个环:

//下面线运行k倍

为(I = 0;我< K表;我++)

//最坏的情况,环下面将运行n次。

为(J = + 1;Ĵ< N; J ++)

戈将是这两个值相乘togehter = K * N

还检查了此篇:What is a plain English explanation of "Big O" notation?

+0

多数民众赞成在约最简单的解释我已经看到..谢谢你111 – 2013-04-10 14:59:09

+0

这是关于我见过的最简单的解释..谢谢! – 2013-04-10 14:59:32