こんにちは皆、私は、この関数の時間計算量を計算しようとしましたが、私は本当に「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」私は私がわき "を残せば、彼らはwhileループの場合(1)複雑
Oを持つ必要がありますので、ライン02,03,04は大きな問題であるとは思いません時間複雑度が2^k<n --> k= log_2(n)
であるはずであるたびに、「i」に2を掛けているため
forループはどうですか? 「i」回実行する必要がありますが、「n」に関してこれをどのように表現できますか?
P.S:?どのように私は数学記号を書くのですか私はそれが実際には難しい質問ですねエディタ
感謝:) –