Algoritmo de Euclides

Documentos relacionados
Práctica 2 - Ejercicio 2.8

Euclides Extendido y Teorema Chino del Resto

El Algoritmo de Euclides

Aritmética en Haskell

Propiedades de números enteros (lista de problemas para examen)

Clase 2: Algoritmo de Euclídes

Sucesiones. Una sucesión de números reales es una tira, o una lista, de nḿeros reales que generalmente denotamos como

Complejidad computacional. Algoritmos y Estructuras de Datos I. Complejidad computacional. Notación O grande

Un tercer ejemplo: verificación de primalidad

RSA: Implementación. Ya resolvimos (3), ahora vamos a resolver (2). IIC3242 Complejidad Probabiĺıstica 28 / 77

Los números naturales. Definición y propiedades

Divisibilidad (en N = N {0})

Tema 2: Teorema de estructura de los grupos abelianos finitamente generados.

PROPAGACIÓN DE INCERTEZAS

1. Traducción al lenguaje algebráico

Introducción a la Matemática Discreta

Aritmética modular. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Aritmética modular 1 / 16

Complejidad de algoritmos recursivos

Arreglos. Algoritmos y Estructuras de Datos I. Arreglos en C++ Arreglos y listas

Ecuaciones Diofánticas

Método de Gradientes Conjugados.

Aritmética entera. AMD Grado en Ingeniería Informática. AMD Grado en Ingeniería Informática (UM) Aritmética entera 1 / 15

Estructuras algebraicas

Relaciones de orden. Definición 1. Llamamos conjunto ordenado a un par (E, ) donde E es un conjunto y es un orden definido en E

Divisibilidad y congruencia

El algoritmo de Euclides con residuos de menor valor absoluto

Semana 14 [1/19] Polinomios. 8 de junio de Polinomios

58 7. ESPACIOS COCIENTE

ALGEBRA 1- GRUPO CIENCIAS- TURNO TARDE- Enteros

Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos

COMPLEMENTO DEL TEÓRICO

Teoría de Números. Divisibilidad. Olimpiada de Matemáticas en Tamaulipas

Manos a la obra: Recursión, división y listas

Semana 07[1/21] Sumatorias. 12 de abril de Sumatorias

Enunciados de los problemas (1)

Programación imperativa. Algoritmos y Estructuras de Datos I. Ciclos

Inducción Matemática Conjuntos Funciones. Matemática Discreta. Agustín G. Bonifacio UNSL. Repaso de Inducción, Conjuntos y Funciones

AMPLIACIÓN DE MATEMÁTICAS. a = qm + r

AMPLIACIÓN DE MATEMÁTICAS

Proceso Selectivo para la XXII IMC, Bulgaria

Cuatro Problemas de Algebra en la IMO.

Apuntes de Matemática Discreta 8. Relaciones de Equivalencia

Índice La División Entera El Máximo Común Divisor Algoritmo de Euclides Ecuaciones Diofánticas Factorización. Aritmética I.

Programación dinámica

Números naturales y números enteros

Definición 1.2. Sea (K, +, ) un dominio de integridad. Un polinomio de grado n sobre K es una expresión de la forma

Semana05[1/14] Relaciones. 28 de marzo de Relaciones

Principio de inducción y Sumatorias

Algoritmos para determinar Caminos Mínimos en Grafos

Ejercicios del tema 7

1. NÚMEROS PRIMOS Y COMPUESTOS.

Álgebra básica Soluciones del examen de segunda convocatoria Curso 2016/ de septiembre de 2017

Cálculo diferencial e integral I. Eleonora Catsigeras

Introducción a la Teoría de Números

UNIDAD 1 NUMEROS COMPLEJOS

TEORIA DE NUMEROS. Temas: MAXIMO COMUN DIVISOR ALGORITMO MCD(A,B) IDENTIDAD DE BEZOUT ALGORITMO ST(A,B) EL TEOREMA FUNDAMENTAL DE LA ARITMETICA.

Capítulo IV. Divisibilidad y Primalidad. Algoritmo de la División

Números complejos y Polinomios

Recursividad Definición

ÁLGEBRA LINEAL I Algunas soluciones a la Práctica 3

Formas canónicas de Jordan

DIVISIBILIDAD 2 3 = 8. Es decir, el resultado de multiplicar 2 por cualquier número natural.

Semana04[1/17] Funciones. 21 de marzo de Funciones

Departamento de Ingeniería Matemática - Universidad de Chile

Capítulo II. Pruebas en Matemáticas

DIVISIBILIDAD: Resultados

11 Secuencias, Series y Probabilidad

Anillo de polinomios con coeficientes en un cuerpo

Univ. Nacional de Colombia, Medellín Escuela de Matemáticas Matemáticas Discretas Marzo 8, Soluciones Taller 5

Criptografía de clave pública Sistemas basados en el problema de la mochila

EJERCICIOS. 7.3 Valor de un polinomio para x = a. Por lo tanto: para determinar expresiones

TEMA 6: DIVISIÓN DE POLINOMIOS RAÍCES MATEMÁTICAS 3º ESO

Aritmética de los números enteros

EJERCICIOS Y PROBLEMAS RESUELTOS

ÁLGEBRA Algunas soluciones a la Práctica 1

DE LOS NÚMEROS NATURALES Y ENTEROS

ALGEBRA 1- GRUPO CIENCIAS- TURNO TARDE- Polinomios

Enteros Segunda parte.

Clase 4: Congruencias

Consistencia, Estabilidad y Convergencia

Gu ıa Departamento. Matem aticas U.V.

2 4 0 x 1 ± o ( 11) p

Ejercicios de sucesiones.

Es claro que es una relación de equivalencia. Para ver que tener la misma cardinalidad y la cardinalidad están bien definidas queremos ver que

Multiplicación de matrices simétricas

Entrenamiento ONMAPS Guanajuato. Primaria (Teoría de Números)

Tema 1: Los números naturales

Números naturales y recursividad

Transcripción:

Algoritmo de Euclides Melanie Sclar Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires AED III Melanie Sclar (UBA) Algoritmo de Euclides AED III 1 / 21

Ejercicio 2.8 de la práctica Ejercicio 2.8 a. Escribir el algoritmo de Euclides para calcular el máximo común divisor entre 2 números b y c en forma recursiva y no recursiva. Mostrar que su complejidad es O(min{b, c}). Puede construir un ejemplo (un peor caso) donde esta complejidad efectivamente se alcance? Puede hacerlo para b y c tan grandes como se desee? Melanie Sclar (UBA) Algoritmo de Euclides AED III 2 / 21

Máximo Común Divisor Definición del máximo común divisor o mcd El máximo común divisor entre a y b o mcd(a, b) (a, b N 0 ) es el mayor número natural que los divide a ambos sin dejar resto. Por ejemplo, mcd(2, 5) = 1, mcd(10, 30) = 10, mcd(55, 77) = 11, mcd(15, 1) = 1, mcd(17, 0) = 17. Notar que si mcd(a, b) = k entonces mcd( a k, b k ) = 1 pues quitamos todos los factores primos que eran comunes a ambos números. Melanie Sclar (UBA) Algoritmo de Euclides AED III 3 / 21

Algoritmos recursivos Definición Un algoritmo se dice recursivo si calcula instancias de un problema en función de otras instancias del mismo problema hasta llegar a un caso base, que suele ser una instancia pequeña del problema, cuya respuesta generalmente está dada en el algoritmo y no es necesario calcularla. Para calcular el mcd de forma recursiva, necesitamos una propiedad del problema que cumpla esto: es decir, que escriba mcd(a, b) en función de instancias menores que ella hasta llegar a un caso base. Melanie Sclar (UBA) Algoritmo de Euclides AED III 4 / 21

Algoritmos recursivos Definición Un algoritmo se dice recursivo si calcula instancias de un problema en función de otras instancias del mismo problema hasta llegar a un caso base, que suele ser una instancia pequeña del problema, cuya respuesta generalmente está dada en el algoritmo y no es necesario calcularla. Para calcular el mcd de forma recursiva, necesitamos una propiedad del problema que cumpla esto: es decir, que escriba mcd(a, b) en función de instancias menores que ella hasta llegar a un caso base. Melanie Sclar (UBA) Algoritmo de Euclides AED III 5 / 21

Algoritmos recursivos Lema Sea a b (a, b N 0 ), entonces mcd(a, b) = k, mcd(a, b a) = k. Melanie Sclar (UBA) Algoritmo de Euclides AED III 6 / 21

Algoritmos recursivos Lema Sea a b (a, b N 0 ), entonces mcd(a, b) = k, mcd(a, b a) = k. Demostración: mcd(a, b) = k, luego a = ka, b = kb con mcd(a, b ) = 1. Veamos que mcd(a, b a) = k: mcd(a, b a) = mcd(ka, kb ka ) = mcd(ka, k(b a )) = k mcd(a, b a ) mcd(a, b a) k 1 = k. Entonces seguro que mcd(a, b a) k, pero puede suceder que mcd(a, b a) > k? Supongamos que mcd(a, b a) = q > k. Entonces tenemos que: { a 0 (m«od q) b a 0 (m«od q) Luego concluimos que a b 0 (m«od q). Melanie Sclar (UBA) Algoritmo de Euclides AED III 6 / 21

Como a b 0 (m«od q), deducimos que a y b son los dos múltiplos de q (y recordemos que por hipótesis q > k). Pero luego mcd(a, b) q > k. Absurdo pues mcd(a, b) = k por hipótesis del ejercicio! Provino de suponer que mcd(a, b a) > k. Luego, como mcd(a, b a) k y mcd(a, b a) k deducimos que mcd(a, b a) = k. Melanie Sclar (UBA) Algoritmo de Euclides AED III 7 / 21

Lema 1 Sea a b (a, b N 0 ), entonces mcd(a, b) = k, mcd(a, b a) = k. Este lema es válido como función recursiva pero puede ser mejorado. Notemos que si b a a, entonces al aplicar de nuevo el Lema obtendremos mcd(a, b 2a) = k, y así sucesivamente hasta que b xa < a. Es decir que podemos mejorar el lema 1 aplicándolo varias veces para obtener el lema 2. Melanie Sclar (UBA) Algoritmo de Euclides AED III 8 / 21

Lema 1 Sea a b (a, b N 0 ), entonces mcd(a, b) = k, mcd(a, b a) = k. Este lema es válido como función recursiva pero puede ser mejorado. Notemos que si b a a, entonces al aplicar de nuevo el Lema obtendremos mcd(a, b 2a) = k, y así sucesivamente hasta que b xa < a. Es decir que podemos mejorar el lema 1 aplicándolo varias veces para obtener el lema 2. Lema 2 Sea 0 < a b (a, b N 0 ), entonces mcd(a, b) = k, mcd(a, b (m«od a)) = k. Melanie Sclar (UBA) Algoritmo de Euclides AED III 8 / 21

Lema 2 Sea 0 < a b (a, b N 0 ), entonces mcd(a, b) = k, mcd(a, b m«od a) = k. Melanie Sclar (UBA) Algoritmo de Euclides AED III 9 / 21

Lema 2 Sea 0 < a b (a, b N 0 ), entonces mcd(a, b) = k, mcd(a, b m«od a) = k. Demostración: Como a b, b se puede escribir como b = ra + s con r, s N 0 y 0 s < a. Aplicando sucesivamente el Lema 1, por inducción podemos ver que mcd(a, b ra) = k, pues b (r 1)a a y por ende vale aplicar el lema por r-ésima vez. Ahora bien, b ra = s, y s es justamente el resto de b módulo a. Es decir, s = b m«od a. En conclusión, queda que mcd(a, s) = k, o en otras palabras mcd(a, b m«od a) = k. Melanie Sclar (UBA) Algoritmo de Euclides AED III 9 / 21

Entonces ya tenemos una propiedad recursiva que nos permitirá hallar mcd(a, b). Pero nos falta saber cuándo parar, es decir, los casos base. Melanie Sclar (UBA) Algoritmo de Euclides AED III 10 / 21

Entonces ya tenemos una propiedad recursiva que nos permitirá hallar mcd(a, b). Pero nos falta saber cuándo parar, es decir, los casos base. mcd(a, 0) = a mcd(0, a) = a Notemos además que si no fueran casos base incurriríamos en un error, pues a m«od 0 no se puede efectuar. Melanie Sclar (UBA) Algoritmo de Euclides AED III 10 / 21

Pseudocódigo de solución recursiva function mcd (natural a, natural b) { if (a == 0) devolver b if (b == 0) devolver a if (a <= b) devolver mcd(a, b mod a) devolver mcd(a mod b, b) } Melanie Sclar (UBA) Algoritmo de Euclides AED III 11 / 21

Pseudocódigo de solución iterativa function mcd (natural a, natural b) { if (a > b) intercambiar a y b // siempre mantendremos el invariante a <= b } while (a > 0) { tmp = b mod a b = a a = tmp // notar que b mod a <= a, // por eso los pusimos en ese orden } devolver b Melanie Sclar (UBA) Algoritmo de Euclides AED III 12 / 21

Complejidad (esbozo) Es fácil ver que nuestras implementaciones son O(min(b, c)) pues en cada paso el número más chico entre los dos involucrados decrece en al menos 1. Como cada ejecución es O(1) y paramos cuando el mínimo llega a 0, la ejecución completa sera O(min(b, c)). Después veremos que esta cota se puede mejorar mucho más. Melanie Sclar (UBA) Algoritmo de Euclides AED III 13 / 21

Peores casos - Fibonacci Los peores casos del algoritmo ocurren cuando a y b son Fibonacci s consecutivos. Esto es así pues sabemos que en cada paso se efectúa al menos una resta (hacer b m«od a implica restarle al menos a a b) y el peor caso ocurre cuando en cada paso se efectúa exactamente una resta. mcd(f k, F k+1 ) = mcd(f k 1, F k ) = = mcd(f 0, F 1 ) = mcd(0, 1) = 1 Más adelante retomaremos esta observación para demostrar la complejidad real de nuestros algoritmos. Melanie Sclar (UBA) Algoritmo de Euclides AED III 14 / 21

Ejercicio 2.8 de la práctica Ejercicio 2.8 b. Analizar el siguiente algoritmo para determinar el máximo común divisor entre dos números b y c, y mostrar que su complejidad también es O(min(b, c)). g min(b, c) mientras g > 1 hacer si b g y c g son enteros, informar mcd = g y parar. poner g = g 1 informar mcd = 1 y parar Melanie Sclar (UBA) Algoritmo de Euclides AED III 15 / 21

Notemos que el algoritmo es correcto pues recorre todos los posibles divisores de b y c y se queda con el mayor de ellos (que por como recorremos, es el primero que cumple la propiedad). mcd(b, c) min(b, c), y recorremos a lo sumo una vez el cuerpo por cada uno de los g. Dicho cuerpo es O(1), y se ejecuta O(min(b, c)) veces, por lo tanto el algoritmo completo es O(min(b, c)). Melanie Sclar (UBA) Algoritmo de Euclides AED III 16 / 21

Ejercicio 2.8 de la práctica Ejercicio 2.8 c. Las complejidades calculadas para los algoritmos de las partes a. y b. son iguales. Cuál de los dos algoritmos elegirá? Justificar y comentar. c. Probar que se puede mejorar la complejidad calculada en a. demostrando que el algoritmo de Euclides es en realidad O(log 2 (min{b, c})). Melanie Sclar (UBA) Algoritmo de Euclides AED III 17 / 21

Demostración de complejidad de las implementaciones del ítem a Recordemos que en cada paso tomamos módulo del número más grande sobre el más chico. Así, en cada paso obtenemos un par de números. Como el mcd es conmutativo, ponemos primero el menor número y luego el mayor. Como a b, en dos pasos de aplicación del lema 2 se tiene que: mcd(a, b) = mcd(b m«od a, a) = mcd(a m«od (b m«od a), b m«od a) Queremos probar que el algoritmo es O(lg a), pues a = min(a, b), y para ello demostraremos que cada 2 pasos del algoritmo, a se reduce a la mitad. Melanie Sclar (UBA) Algoritmo de Euclides AED III 18 / 21

Demostración de complejidad de las implementaciones del ítem a (cont.) mcd(a, b) = mcd(b m«od a, a) = mcd(a m«od (b m«od a), b m«od a) Queremos probar que el algoritmo es O(lg a) (pues a = min(a, b)) y para ello demostraremos que cada 2 pasos del algoritmo, el mínimo del par actual se reduce a la mitad. Si probamos eso, como cada paso es O(1) y habrá O(2 lg a) = O(lg a) pasos, el algoritmo será O(lg a). Melanie Sclar (UBA) Algoritmo de Euclides AED III 19 / 21

mcd(a, b) = mcd(b m«od a, a) = mcd(a m«od (b m«od a), b m«od a) 1. Si b m«od a a 2 entonces el mínimo número del par se redujo a la mitad en tan solo un paso. Como en cada paso se reduce cada número o queda igual, luego de 2 pasos el mínimo número del par original se habrá reducido a la mitad. 2. Si b m«od a > a 2, veamos que a m «od (b m«od a) será pequeño: a = (b m«od a)r + s, pues b m«od a < a (por definición de módulo). Ahora bien, como b m«od a > a 2 deducimos que r = 1. En otras palabras, a = (b m«od a) + s a (b m«od a) = s < a a 2, por lo que s < a 2. Como s es por definición a m «od (b m«od a), acabamos de ver que el menor número del par se redujo a la mitad de su valor original en dos pasos. Melanie Sclar (UBA) Algoritmo de Euclides AED III 20 / 21

Tarea http://acm.timus.ru/problem.aspx?space=1&num=1139 - Un lindo problema que sale con MCD. Melanie Sclar (UBA) Algoritmo de Euclides AED III 21 / 21