Eğer func2 = O (n) ve func3 = O (n^2) ise func1 karmaşıklığı nedir?Bu algoritmanın karmaşıklığı?
void func1 (int n) {
int i, j, k;
for (k=0;k<n;k++) // O(n)
printf("%d",k);
i=0;
while (i<2*n) { // O(n)
for (j=i;j>1;j--) // Not executed
for (k=15;k>0;k--)
func2(n);
for (j=n;j>1;j--) // O(n)
func3(n); // O(n^2)
i++;
}
}
Böylece (n^2) O (n) O (n) + O (n) = maks (nO (n^4), O()) = O (n^4) O var ?
Teşekkürler!
Ne düşünüyorsun ve neden? –
Func2'nin yürütüldüğü ve func3'ün iki döngü altında olduğu için O (n^4) aldım: en çok 2'den n'ye ve diğeri 0'dan 2n-1'e kadar. –
'printf ("% d ", k)' O (log (k)) değil, O (1) değil, ilk döngüyü O (log (n!)) = O (n log n) yapar. Bu kez func1'in genel karmaşıklığı için herhangi bir fark yaratmaz, çünkü bu ilk döngü ikinci baskındır. –