Práctica 2 - Ejercicio 2.8

Documentos relacionados
Algoritmo de Euclides

El Algoritmo de Euclides

Programación dinámica

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

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

Tema 01: Fundamentos del Análisis Asintótico de Algoritmos

Multiplicación de matrices simétricas

Un tercer ejemplo: verificación de primalidad

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

Aritmética en Haskell

Algoritmo de Euclides

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

Complejidad de algoritmos recursivos

Programación Dinámica 1

Introducción al Análisis del Coste de Algoritmos

EI MT1008 Programación II

Tema 9. Recursividad

Tema 3. Análisis de costes

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda

Programación II Recursividad Dr. Mario Rossainz López

6. Estructuras básicas de control 1. Pseudocódigo

Análisis de algoritmos. Recursividad

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

Búsqueda Informada. Algoritmos primero el mejor Algoritmos de búsqueda local

Clase 2: Algoritmo de Euclídes

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

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

Estructura de Datos. Complejidad de Algoritmos. Algoritmo. Algoritmo. Mauricio Solar Lorna Figueroa

Análisis y Diseño de Algoritmos

Introducción a la Matemática Discreta

Recursividad Definición

DIVISIBILIDAD NÚMEROS NATURALES

<tipo> Tipo de dato de los elementos del vector

Algorítmica y Lenguajes de Programación. Búsqueda

Análisis de Algoritmos

1.2.4 Listas enlazadas

Gu ıa Departamento. Matem aticas U.V.

Ejercicios de sucesiones.

Complejidad de Algoritmos

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero

Estructuras de Datos y Algoritmos

#include <stdio.h> float cubica(float numero) { float cubica; cubica = numero * numero * numero; return cubica; }

1. Recuerdo del algoritmo de KRUSKAL

Introducción. Algoritmos y Complejidad. Algoritmos y Algoritmia. Introducción. Problemas e instancias. Pablo R. Fillottrani

Algoritmos y Estructuras de Datos II

COMPLEJIDAD Y EFICIENCIA DE ALGORITMOS

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

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

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

Tema 06: Recursividad

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

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero

Programación Dinámica

TEORIA DE NUMEROS DIVISIBILIDAD Y NUMEROS PRIMOS. PRUEBAS DE PRIMALIDAD. LA CRIBA DE ERATOSTENES. ALGORITMOS. TEOREMA: EXISTENCIA DE INFINITOS PRIMOS.

Algorítmica y Lenguajes de Programación. Eficiencia y notación asintótica (i)

Algoritmos glotones. mat-151

Geometría. Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires. Training Camp 2012

Algoritmo de Euclides y ecuaciones de congruencia

La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados.

Álgebra y Matemática Discreta

RECURSIVIDAD. Prof. Ing. M.Sc. Fulbia Torres

Tema 5- Diseño Recursivo y. Objetivos Principales. Bibliografía Básica

Tema 3. Estructuras de Datos

1) Indique los primeros elementos de los siguientes conjuntos numéricos: Números Naturales: IN = {

Práctica 2. Algoritmos de enfriamiento simulado (simulated annealing)

Descomposicion en Polígonos Monótonos. comp-420

Analizadores sintácticos LR(0) y SLR

Euclides Extendido y Teorema Chino del Resto

Estructura de datos y de la información Boletín de problemas - Tema 9

Estructuras de control

Generación de variables aleatorias discretas Método de la Transformada Inversa

4.- Raíces cuadradas.

Análisis y Diseño de Algoritmos. Complejidad Computacional

Introducción al análisis de algoritmos

Recuperación Primer Trimestre Matemáticas 1ºESO

La eficiencia de los programas

Muchas de las ecuaciones de recurrencia que vamos a usar en este curso tienen la siguiente forma: ( c n =0 T (n) = a T (b n b.

Taller de Programación Dinámica. Definiciones. Caso base. Laboratorio de Algoritmos y Estructuras de Datos III. 10 de Septiembre de 2010

Cubiertas convexas II

Notación Asintótica 2

Tema 10: Árbol binario de búsqueda

CI2612: Algoritmos y Estructuras de Datos II. Nociones básicas. Objetivos. Algoritmos. Blai Bonet

Programación II. Mario Aldea Rivas Programación II 04/04/11 1. Mario Aldea Rivas Programación II 04/04/11 2

UNIDAD 7 Recursividad Concepto. Algoritmos recursivos. Seguimiento de la recursión. Algunos métodos recursivos de búsqueda y ordenación: M-Sort y

Transcripción:

Algoritmos y Estructura de Datos III Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires 27 de Marzo de 2013

2.8 - Euclides 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?

Euclides - Repaso Regla de euclides Si b,c enteros positivos y b c luego mcd(b, c) = mcd(c, b mod c).

Euclides - Repaso Regla de euclides Si b,c enteros positivos y b c luego mcd(b, c) = mcd(c, b mod c). Prueba Basta mostrar que mcd(b, c) = mcd(c, b c).

Euclides - Repaso Regla de euclides Si b,c enteros positivos y b c luego mcd(b, c) = mcd(c, b mod c). Prueba Basta mostrar que mcd(b, c) = mcd(c, b c). Si g b y g c g b c: mcd(b, c) mcd(c, b c).

Euclides - Repaso Regla de euclides Si b,c enteros positivos y b c luego mcd(b, c) = mcd(c, b mod c). Prueba Basta mostrar que mcd(b, c) = mcd(c, b c). Si g b y g c g b c: mcd(b, c) mcd(c, b c). b = g k 1, c = g k 2, b c = g k 1 g k 2 = g (k 1 k 2 )

Euclides - Repaso Regla de euclides Si b,c enteros positivos y b c luego mcd(b, c) = mcd(c, b mod c). Prueba Basta mostrar que mcd(b, c) = mcd(c, b c). Si g b y g c g b c: mcd(b, c) mcd(c, b c). b = g k 1, c = g k 2, b c = g k 1 g k 2 = g (k 1 k 2 ) : Busco el mayor g posible. Sirve para (b, c) sirve para (c, b c), pero talvez haya g > g que divida (c, b c).

Euclides - Repaso Regla de euclides Si b,c enteros positivos y b c luego mcd(b, c) = mcd(c, b mod c). Prueba Basta mostrar que mcd(b, c) = mcd(c, b c). Si g b y g c g b c: mcd(b, c) mcd(c, b c). b = g k 1, c = g k 2, b c = g k 1 g k 2 = g (k 1 k 2 ) : Busco el mayor g posible. Sirve para (b, c) sirve para (c, b c), pero talvez haya g > g que divida (c, b c). Si g b c y g c g b : mcd(b, c) mcd(b c, c).

2.8. a. Algoritmo recursivo Algorithm 1: Euclides-Recursivo Data: b, c Result: mcd(b, c) if c = 0 then return b else return Euclides-Recursivo(c, b mod c)

2.8. a. Algoritmo no recursivo Algorithm 2: Euclides-Iterativo Data: b, c Result: mcd(b, c) while c 0 do t := c c := b mod t b := t return b

2.8. a. Complejidad Mostrar que la complejidad temporal está acotada por: O(min{b, c}).

2.8. a. Complejidad Mostrar que la complejidad temporal está acotada por: O(min{b, c}). Qué número es menor luego de la primer iteración?

2.8. a. Complejidad Mostrar que la complejidad temporal está acotada por: O(min{b, c}). Qué número es menor luego de la primer iteración? (b, c) (c, b mod c)

2.8. a. Complejidad Mostrar que la complejidad temporal está acotada por: O(min{b, c}). Qué número es menor luego de la primer iteración? (b, c) (c, b mod c) Comparar c vs b mod c:

2.8. a. Complejidad Mostrar que la complejidad temporal está acotada por: O(min{b, c}). Qué número es menor luego de la primer iteración? (b, c) (c, b mod c) Comparar c vs b mod c: b < c c c b > c b b b mod c c c b mod c

2.8. a. Complejidad Mostrar que la complejidad temporal está acotada por: O(min{b, c}). Qué número es menor luego de la primer iteración? (b, c) (c, b mod c) Comparar c vs b mod c: b < c c c b > c b b b mod c c c b mod c si b = c?

2.8. a. Complejidad Luego de la primer iteración: c := b mod c min{b, c}

2.8. a. Complejidad Luego de la primer iteración: c := b mod c min{b, c} En cada iteración c disminuye en al menos una unidad

2.8. a. Complejidad Luego de la primer iteración: c := b mod c min{b, c} En cada iteración c disminuye en al menos una unidad El algoritmo termina cuando c = 0

2.8. a. Complejidad Luego de la primer iteración: c := b mod c min{b, c} En cada iteración c disminuye en al menos una unidad El algoritmo termina cuando c = 0 Luego de k + 1 iteraciones, el algoritmo termina, donde k = min{b, c}

2.8. a. Complejidad Luego de la primer iteración: c := b mod c min{b, c} En cada iteración c disminuye en al menos una unidad El algoritmo termina cuando c = 0 Luego de k + 1 iteraciones, el algoritmo termina, donde k = min{b, c} Ejemplo de un peor caso? Familia de peores casos? Ideas?

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}). 1. Poner g = min { b,c } 2. mientras g > 1 3. si b/g y c/g son enteros, informar mcd = g y parar. 4. poner g = g - 1 5. informar mcd = 1 y parar

2.8.b - Euclides Es correcto?

2.8.b - Euclides Es correcto? Busca ordenadamente el primer g que cumpla la propiedad de ser mcd.

2.8.b - Euclides Es correcto? Busca ordenadamente el primer g que cumpla la propiedad de ser mcd. La iteracion recorre: g = min {b,c}.. 1

2.8.b - Euclides Es correcto? Busca ordenadamente el primer g que cumpla la propiedad de ser mcd. La iteracion recorre: g = min {b,c}.. 1 Dudas?

2.8. c. Las complejidades calculadas para los algoritmos de las partes a. y b. son iguales. Cuál de los dos algoritmos elegiría? Justificar y comentar.

2.8.c - Elección de algoritmo Cual prefieren? Por qué?

2.8.c - Elección de algoritmo Cual prefieren? Por qué? Factores a tomar en cuenta para decidir qué algoritmo utilizar:

2.8.c - Elección de algoritmo Cual prefieren? Por qué? Factores a tomar en cuenta para decidir qué algoritmo utilizar: 1. Teoría: Correctitud, Complejidad temporal, complejidad espacial, etc.

2.8.c - Elección de algoritmo Cual prefieren? Por qué? Factores a tomar en cuenta para decidir qué algoritmo utilizar: 1. Teoría: Correctitud, Complejidad temporal, complejidad espacial, etc. 2. Practica: Resultados experimentales, dificultad de la implementación, propenso a errores, etc.

2.8.c - Elección de algoritmo Cual prefieren? Por qué? Factores a tomar en cuenta para decidir qué algoritmo utilizar: 1. Teoría: Correctitud, Complejidad temporal, complejidad espacial, etc. 2. Practica: Resultados experimentales, dificultad de la implementación, propenso a errores, etc. Cuando usamos O() para la complejidad temporal damos una garantía de peor caso, pero es una cota superior. Esa cota no es necesariamente ajustada.

2.8.c - Elección de algoritmo Cual prefieren? Por qué? Factores a tomar en cuenta para decidir qué algoritmo utilizar: 1. Teoría: Correctitud, Complejidad temporal, complejidad espacial, etc. 2. Practica: Resultados experimentales, dificultad de la implementación, propenso a errores, etc. Cuando usamos O() para la complejidad temporal damos una garantía de peor caso, pero es una cota superior. Esa cota no es necesariamente ajustada. En la vida real, lo ideal es mezclar resultados teoricos y practicos para sacar conclusiones.

2.8.c - Elección de algoritmo Cual prefieren? Por qué? Factores a tomar en cuenta para decidir qué algoritmo utilizar: 1. Teoría: Correctitud, Complejidad temporal, complejidad espacial, etc. 2. Practica: Resultados experimentales, dificultad de la implementación, propenso a errores, etc. Cuando usamos O() para la complejidad temporal damos una garantía de peor caso, pero es una cota superior. Esa cota no es necesariamente ajustada. En la vida real, lo ideal es mezclar resultados teoricos y practicos para sacar conclusiones. En este caso, es importante notar la diferencia entre las cotas superiores encontradas para medir la complejidad temporal, una es ajustada y la otra no.

2.8. d. 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})).

2.8.d - Mejorando la complejidad temporal Qué tan rápido decrecen (b, c)?

2.8.d - Mejorando la complejidad temporal Qué tan rápido decrecen (b, c)? En una iteración: (b, c) (c, b mod c)

2.8.d - Mejorando la complejidad temporal Qué tan rápido decrecen (b, c)? En una iteración: (b, c) (c, b mod c) Hacer ejemplos y pensar hasta que se nos ocurra algo...

2.8.d - Mejorando la complejidad temporal Qué tan rápido decrecen (b, c)? En una iteración: (b, c) (c, b mod c) Hacer ejemplos y pensar hasta que se nos ocurra algo...

2.8.d - Mejorando la complejidad temporal Lema Si b c b mod c < b 2.

2.8.d - Mejorando la complejidad temporal Lema Si b c b mod c < b 2, Caso 1: c b/2 c b/2 c b mod c < c b/2 b/2 b b/2 c c b mod c

2.8.d - Mejorando la complejidad temporal Lema Si b c b mod c < b 2 Caso 2: c > b/2 c > b/2 b mod c = b - c < b/2 c b/2 b c b/2 b mod c b

2.8.d - Mejorando la complejidad temporal Cada dos iteraciones, b y c disminuyen a la mitad (o más).

2.8.d - Mejorando la complejidad temporal Cada dos iteraciones, b y c disminuyen a la mitad (o más). Luego de la primer iteración: b 1 c 1 y b 1 min{b 0, c 0 }

2.8.d - Mejorando la complejidad temporal Cada dos iteraciones, b y c disminuyen a la mitad (o más). Luego de la primer iteración: b 1 c 1 y b 1 min{b 0, c 0 } Concluyo que una cota superior de la complejidad temporal es O(log 2 (min{b, c})

2.8.d - Mejorando la complejidad temporal Cada dos iteraciones, b y c disminuyen a la mitad (o más). Luego de la primer iteración: b 1 c 1 y b 1 min{b 0, c 0 } Concluyo que una cota superior de la complejidad temporal es O(log 2 (min{b, c}) Se puede mejorar?

Fin DUDAS