2009-09-27 6 views

Répondre

12

L'algorithme Euclidien (calcule gcd) est très rapide. Lorsque deux nombres sont tirés au hasard uniformément de [1, n], le nombre moyen d'étapes pour calculer leur gcd est O(log n). Le temps de calcul moyen requis pour chaque étape est quadratique en nombre de chiffres.

Il existe des alternatives qui fonctionnent un peu mieux (c'est-à-dire que chaque étape est sous-quadratique dans le nombre de chiffres), mais elles ne sont efficaces que sur de très grands entiers. Voir, par exemple, On Schönhage's algorithm and subquadratic integer gcd computation.

+0

Je voudrais commenter que c'est un peu grossier de mesurer la complexité des algorithmes arithmétiques sans prendre en compte les coûts des opérations arithmétiques. –

+0

Le nombre de pas de maléfice est également O (log n), lorsque deux nombres sont des entrées successives dans la séquence de Fibonacci. –

+0

@Pavel Shved: J'ai pris en compte le coût. cf. la phrase "Le temps de calcul moyen requis pour chaque étape est quadratique dans le nombre de chiffres." – jason

7

Si vous utilisez une machine pour laquelle la division/le reste est significativement plus cher que les quarts de travail, considérez binary GCD.

+0

Merci, intéressant lecture –

+0

ouais, un très bon article là. – Lazer

+0

Juste implémenté cela en f # et son plus de 2x plus rapide que le GCD Euclid traditionnel, ne peut pas donner de nombres exacts car il y a d'autres codes qui poluent mes mesures, cependant c'est> 2x plus rapide. Bonne trouvaille Jason. – gatapia

Questions connexes