[ azzpoz @ 21.04.2013. 22:02 ] @
| Code: int n = 100;
int j = 20;
for (int i = 0; i < n; i++)
{
for (int x = 0; x < n; x++)
{
}
n/=2;
}
Interesuje me koja je Big O notacija za ovaj algoritam.
Zbunjuje me n/=2.
Da li je ovo eksponencijalno izvršavanje, tj. x^a
P.S. Mislim da na ovom forumu mogu dobiti pravi odgovor!
|
[ Mihajlo Cvetanović @ 22.04.2013. 10:09 ] @
Da nema ovog n = n / 2 algoritam bi se izvršavao n+n+n+...+n (n puta) = n*n puta. Kad dodamo n = n / 2 i uzmemo da je k broj iteracija spoljne petlje algoritam se izvršava n + n/2 + n/4 + ... + n/(2^(k-1)) puta (ima k sabiraka). U svakoj iteraciji spoljne petlje broj iteracija unutrašnje petlje se prepolovljuje. Pitanje je samo kako doći do k. k je rešenje jednačine n/(2^k)=k (mesto preseka dve linije, jedna linija je eksponencijalna funkcija, a druga je prava linija). To je tačka u kojoj brojač i konačno postaje veći od "stalno prepolovljujućeg" n.
Probaj sam da dođeš do k kad je dato n, a zatim da uvrstiš to u početnu sumu, i pretpostavljajući da n teži beskonačnosti tu sumu svedeš na nešto jednostavnije.
Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.