El teorema de Gabriel Lame limita el número de pasos por log (1/sqrt (5) * (a + 1/2)) - 2, donde la base del registro es (1 + sqrt (5))/2 . Esto es para el escenario del peor caso para el algoritmo y ocurre cuando las entradas son números Fibanocci consecutivos.
Un límite ligeramente más liberal es: log a, donde la base del registro es (sqrt (2)) está implícita en Koblitz.
Para fines criptográficos usualmente consideramos la complejidad bit a bit de los algoritmos, teniendo en cuenta que el tamaño del bit está dado aproximadamente por k = loga.
Aquí es un análisis detallado de la complejidad bit a bit de Euclides algorith:
Aunque en la mayoría de las referencias de la complejidad bit a bit de Euclides Algoritmo está dada por O (loga)^3 existe un límite más estricto que es O (loga)^2.
Considerar; r0 = a, r1 = b, r0 = q1.r1 + r2. . . , ri-1 = qi.ri + ri + 1,. . . , rm-2 = qm-1.rm-1 + rm rm-1 = qm.rm
observe que: a = r0> = b = r1> r2> r3 ...> rm-1> rm> 0 .......... (1)
y rm es el mayor divisor común de ay b.
Por un reclamo en el libro de Koblitz (Un curso en teoría de números y criptografía) se puede demostrar que: ri + 1 < (ri-1)/2 .............. ... (2)
De nuevo en Koblitz, el número de operaciones de bits requeridas para dividir un entero positivo de k bits por un entero positivo de 1 bit (suponiendo que k> = l) se da como: (k-l + 1) .l ................... (3)
Por (1) y (2) el número de divisiones es O (loga) y así sucesivamente (3) la complejidad total es O (loga)^3.
Ahora esto se puede reducir a O (loga)^2 por una observación en Koblitz.
consideran ki = logri 1
por (1) y (2) tenemos: ki + 1 < = ki para i = 0,1, ..., m-2, M-1 y ki + 2 < = (ki) -1 para i = 0,1, ..., m-2
y por (3) el costo total de las m divisiones está limitado por: SUM [(ki-1) - ((ki) -1))] * ki para i = 0,1,2, .., m
reorganizando esto: SUM [(ki-1) - ((ki) -1))] * ki < = 4 * k0^2
Entonces la complejidad bit a bit del algoritmo de Euclid m es O (loga)^2.
Ver Knuth TAOCP, Volumen 2: ofrece la cobertura * extensa *. Solo FWIW, un par de cositas: no es proporcional a 'a% b'. El peor caso es cuando 'a' y' b' son números consecutivos de Fibonacci. –
@JerryCoffin Nota: Si quiere probar que el peor de los casos es de hecho el número de Fibonacci de una manera más formal, considere probar que el n-ésimo paso antes de la terminación debe ser al menos tan grande como gcd multiplicado por el n-ésimo número de Fibonacci con inducción matemática . – Mygod