这些循环可以执行多少次?

时间:2013-04-24 13:05:49

标签: algorithm big-o

嘿我正在试图找出嵌套循环的增长率,我知道第一个循环将会出现100次左右,因为它只能运行100次,但第二次循环我不太确定。 任何人都可以帮助我吗?

29  for (int i = 0; i < MAX; ++i)
30  {
31     for (int j = 0; m[i] < m[j] && m[j] != 0; ++j)
32     {
33        product = product + (m[i] * n[j]);
34     }
35  }

完整的代码在这里

01  const int MAX = 100;
02  int lowerCount;
03  int higherCount;
04  int equalCount;
05  int product;
06
07  lowerCount = higherCount = equalCount = 0;
08  product = 0;
09
10  for (int i = 0; i < MAX; i++)
11  {
12     if (m[i]  < n[i])
13     {
14         ++higherCount;
15     }
16     else
17     {
18        if (m[i] == n[i])
19        {
20           ++lowerCount;
21        }
22        else
23        {
24           ++equalCount;
25        }
26     }
27  }
28
29  for (int i = 0; i < MAX; i++)
30  {
31     for (int j = 0; m[i] < m[j] && m[j] != 0; j++)
32     {
33        product = product + (m[i] * n[j]);
34     }
35  }
36
37  cout << "lowerCount " << lowerCount << "\n";
38  cout << "equalCount " << equalCount << "\n";`
39  cout << "higherCount " << higherCount << "\n";
40  cout << "product " << product << "\n"";

2 个答案:

答案 0 :(得分:2)

我认为您正在寻找的答案是O(N ^ 2 + 2N /(1 / 2N)+ 3n ^ 3)如果您使用Ballmers算法来计算复杂性,这是很清楚的。

答案 1 :(得分:1)

据我所知,在计算算法复杂度时,您可以为最佳,最差和平均情况提供大O.

在两个嵌套循环的情况下,最好的情况是O(n) - 如果内循环只执行一次(我忽略了两个循环只能处理一次迭代的事实)。 最糟糕的是O(n * k) - 第一个循环迭代n次,内部循环迭代k次。

Asier很难过,我们不知道m [i]中有什么,所以不知道平均复杂性会是什么。