En este artículo, discutiremos la complejidad temporal del Algoritmo Euclidiano que es O(log(min(a, b)) y se logra.
Algoritmo de Euclides : es un método eficiente para encontrar el MCD (máximo común divisor) de dos números enteros. La complejidad temporal de este algoritmo es O(log(min(a, b)) . Recursivamente se puede expresar como:
gcd(a, b) = gcd(b, a%b) ,
donde a y b son dos números enteros.
Prueba: supongamos que a y b son dos números enteros tales que a > b , entonces de acuerdo con el algoritmo de Euclides:
mcd(a, b) = mcd(b, a%b)
Utilice la fórmula anterior de forma repetitiva hasta llegar a un paso donde b es 0 . En este paso, el resultado será el MCD de los dos enteros , que será igual a a . Entonces, después de observar detenidamente, se puede decir que la complejidad temporal de este algoritmo sería proporcional al número de pasos necesarios para reducir b a 0 .
Supongamos que el número de pasos necesarios para reducir b a 0 usando este algoritmo es N .
gcd(a, b) ------> N steps
Ahora, si el Algoritmo Euclidiano para dos números a y b se reduce en N pasos entonces, a debe ser al menos f (N + 2) y b debe ser al menos f (N + 1) .
mcd(a, b) ——> N pasos
Entonces, a >= f (N + 2) y b >= f (N + 1)
donde, f N es el N -ésimo término en la serie de Fibonacci (0, 1, 1, 2, 3, …) y N >= 0.
Para probar la declaración anterior usando el Principio de Inducción Matemática (PMI) :
- Caso base:
- Supongamos a = 2 y b = 1 . Entonces, mcd(2, 1) se reducirá a mcd(1, 0) en 1 paso, es decir, N = 1 .
- Esto significa que 2 debe ser al menos f 3 y 1 debe ser al menos f 2 y f 3 = 2 y f 2 = 1 .
- Esto implica que a es al menos f (N + 2) yb es al menos f ( N + 1) .
- Se puede concluir que la afirmación es cierta para el Caso Base.
- Paso inductivo: Suponga que la afirmación es válida para el (N – 1) Paso . Entonces, a continuación se muestran los pasos para probarlo para el Paso N :
mcd(b, a%b) ——> (N – 1) pasos
Entonces,
b >= f (N – 1 + 2) es decir, b >= f (N + 1)
a%b >= f (N – 1 + 1) es decir, a%b >= f N
- También se puede escribir como:
a = piso(a/b)*b + a%b
floor(a/b)*b significa el múltiplo más alto que está más cerca de b.
ex – piso (5/2) * 2 = 4. Si luego agregamos 5% 2 = 1, obtendremos a (= 5) de regreso.
- Ahora bien, (a/b) siempre sería mayor que 1 (como a >= b). Entonces, del resultado anterior, se concluye que:
a >= b + (a%b)
Esto implica, a >= f (N + 1) + f N
- Se sabe que cada número es la suma de los dos términos anteriores en una serie de Fibonacci . Esto implica f (N + 2) = f (N + 1) + f N .
a >= f (N + 2) y b >= f (N + 1)
- Dado que la declaración anterior también es válida para el paso inductivo. Esto prueba que la afirmación es correcta.
- Antes de continuar, mire la fórmula de Binet :
Fórmula Binet:
f norte = {((1 + √5)/2) norte – ((1 – √5)/2) norte }/√5
o
f norte ≈ ∅ norte
- donde, ∅ se conoce como la proporción áurea (∅≈1.618) , y f N es el número N de Fibonacci .
- Ahora bien, ya se ha dicho que la complejidad temporal será proporcional a N, es decir, el número de pasos necesarios para reducir b a 0 .
- Entonces, para probar la complejidad del tiempo, se sabe que:
F norte ≈ ∅ norte
norte ≈ Iniciar sesión ∅ (f norte )
Ahora, a partir de la declaración anterior, se demuestra que usando el Principio de Inducción Matemática , se puede decir que si el algoritmo euclidiano para dos números a y b se reduce en N pasos , entonces a debería ser al menos f (N + 2) y b debe ser al menos f (N + 1) .
De los dos resultados anteriores se puede concluir que:
=> f N+1 ≈ min(a, b)
=> N+1 ≈ log ∅ min(a, b)=> O(N) = O(N+1) = log(mín(a, b))
Publicación traducida automáticamente
Artículo escrito por ajaysharma132 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA