11. Algoritam za stepenovanje brojeva.
Treba da sracunamo y = x^n (n je prirodan broj)
x^n = x * x * x * … * x (n cinilaca / faktora)
————————————-
double Stepen(double x, int n) {
double y;
int k;
y = 1.0;
for (k = 1; k <= n; k++)
y = y * x;
return y;
}
————————————-
Slozenost ovog algoritma je O(n) jer imamo petlju koja se ponavlja n puta.
x^0 = 1
x^1 = x
Ako je n paran broj, tj. n = 2k, onda je x^n = x^(2k) = (x^k)^2\
Ako je n neparan broj, tj. n = 2k + 1, onda je
x^n = x^(2k+1) = x^(2k) * x = (x^k)^2 * x
——————————————
double Stepen1(double x, double n) {
if (n == 0)
return 1;
if (n == 1)
return x;
if (n % 2 == 0) {
y = Stepen1(x, n/2);
return y * y;
} else {
y = Stepen1(x, n/2);
return y * y * x;
}
}
——————————————–
T(n) = T(n/2) + Teta(1)
Po Master teoremi se dobije da je T(n) = Teta)log(n))