Evklidov algoritem
Evklídov algorítem je postopek, s katerim se določi največji skupni delitelj dveh števil oziroma polinomov. Evklid je sicer prvotno zasnoval algoritem za določanje največje skupne mere dveh daljic.
![](http://178.128.105.246/host-http-upload.wikimedia.org/wikipedia/commons/thumb/2/21/Euclidean_algorithm_running_time_X_Y.png/230px-Euclidean_algorithm_running_time_X_Y.png)
Prednost Evklidovega postopka je, da ni treba razcepiti števil. Sam postopek je sicer eden najstarejših znanih algoritmov in je znan od približno leta 300 pr. n. št., verjetno pa je bil poznan že 200 let prej.
Opis algoritma
[uredi | uredi kodo]Če se obravnavata naravni števili a in b, se predpostavi, da je a večji ali enak b. Če je b enak nič, potem je a rezultat postopka. Sicer pa se nadaljuje postopek s številom b in ter celoštevilskim ostankom deljenja a z b (a mod b).
Zapis algoritma z rekurzijo:
function gcd(a, b) if b = 0 return a else return gcd(b, a mod b)
Analiza časa teka algoritma pokaže, da je najslabši možen primer, kadar sta dve zaporedni Fibonaccijevi števili, potreben čas je O(n) deljenj, kjer je n število števk na vhodu. Ker pa praviloma deljenje ni osnovna operacija, je potreben čas reda O(n²).
Zapis algoritma v jezikih C in C++
[uredi | uredi kodo]int gcd(int a, int b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
Ali iterativna različica:
int gcd(int a, int b) {
int t;
while (b != 0) {
t = b;
b = a % b;
a = t;
}
return a;
}
if (b > a)
{
int tmp = a;
a = b;
b = tmp;
}
while (b != 0)
{
int tmp = b;
b = a % b;
a = tmp;
}