【发布时间】:2016-06-21 22:55:49
【问题描述】:
大家好,我试图计算这个函数的时间复杂度,但我真的不明白如何计算那个“for循环”的复杂度
01 int* f(int a[], int n) {
02 int i = 1;
03 int *s;
04 s = calloc(n, sizeof(int));
05 while (i < n) {
06 for (j=0; j < i; j++)
07 s[i] = s[i] + a[j];
08 i = i*2;
09 }
10 return s;
11 }
练习要求与数组的维度“n”相关的时间复杂度
我不认为第 02,03,04 行是个大问题,因为它们的复杂度应该是 O(1)
对于while循环,如果我暂时将“for循环”放在一边,因为“i”每次乘以2,时间复杂度应该是2^k<n --> k= log_2(n)
但是 for 循环呢?它应该被执行“i”次,但是我该如何表达与“n”相关的呢?
P.S : 我如何写数学符号?我在编辑器中找不到任何东西
【问题讨论】:
标签: c time-complexity