2009-09-27 16 views

Respuesta

12

El algoritmo euclidiano (calcula gcd) es muy rápido. Cuando dos números se dibujan uniformemente al azar desde [1, n], el número promedio de pasos para calcular su gcd es O(log n). El tiempo promedio de cálculo requerido para cada paso es cuadrático en el número de dígitos.

Existen alternativas que funcionan un poco mejor (es decir, cada paso es subcuadratico en la cantidad de dígitos), pero solo son efectivas en enteros muy grandes. Ver, por ejemplo, On Schönhage's algorithm and subquadratic integer gcd computation.

+0

Me gustaría comentar que es un poco basto para medir la complejidad de los algoritmos aritméticos sin tener en cuenta los costos de las operaciones aritméticas. –

+0

El peor número de pasos es O (log n) también, cuando dos números son entradas sucesivas en la secuencia de Fibonacci. –

+0

@Pavel Shved: Tomé el costo en consideración. cf. la oración "El tiempo promedio de cálculo requerido para cada paso es cuadrático en el número de dígitos". – jason

7

si está ejecutando en una máquina para la cual la división/el resto es significativamente más caro que los turnos, considere binary GCD.

+0

Gracias, interesante lea –

+0

sí, un muy buen artículo allí. – Lazer

+0

Simplemente implementado esto en f # y es más de 2 veces más rápido que el GCD de Euclid tradicional, no puedo dar números exactos ya que hay otro código que contamina mis mediciones, sin embargo es> 2 veces más rápido. Buen hallazgo Jason. – gatapia

Cuestiones relacionadas