Algorítmica y Complejidad. Tema 5 Divide y Vencerás.

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

Curso de Programación 1

Multiplicación de enteros Algoritmo clásico 1234*5678 = 1234* (5* *100+7*10+8) = 1234*5* *6* *7* *8 Operaciones bási

Tema 5.- Recursividad

Un número natural distinto de 1 es un número primo si sólo tiene dos divisores, él mismo y la unidad.

Estrategias de Diseño de Algoritmos

Programación Dinámica 1

Tema 05: Números Decimales, Fracciones y Porcentajes Primero de Educación Secundaria Obligatoria. I.e.s Fuentesaúco.

DIVISIBILIDAD NÚMEROS NATURALES

TEMA 1.- POLINOMIOS Y FRACCIONES ALGEBRAICAS

1. dejar a una lado de la igualdad la expresión que contenga una raíz.

Colegio Decroly Americano Matemática 7th Core, Contenidos I Período

4.1. Polinomios y teoría de ecuaciones

Matemática I. Descomposición en factores. Tercera Parte. Ing. Santiago Figueroa Lorenzo Correo electrónico:

UNIDAD 1: NÚMEROS NATURALES OBJETIVOS

Escuela Politécnica Superior de Ingeniería Departamento de Ingeniería Informática

TEMA 1. Números Reales. Teoría. Matemáticas

Algoritmos glotones. mat-151

CONJUNTOS NUMÉRICOS. La noción de número es tan antigua como el hombre mismo ya que son necesarios para resolver situaciones de la vida diaria.

Estándares de Contenido y Desempeño, Estándares de Ejecución y Niveles de Logro Marcado* MATEMÁTICA

5. Subprogramas Fundamentos de Informática

CONCRECIÓN DE LOS CRITERIOS DE EVALUACIÓN Curso: PRIMERO de BACHILLERATO CIENCIAS Asignatura: MATEMÁTICAS I Profesor: ALFONSO BdV

Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013

Algoritmos y solución de problemas. Fundamentos de Programación Otoño 2008 Mtro. Luis Eduardo Pérez Bernal

Seminario 1: Resolución de recurrencias

DIVISIBILIDAD. 2º E.S.O. Un número es múltiplo de otro si se puede obtener multiplicando el segundo por otro número entero.

Para las ecuaciones diferenciales ordinarias no lineales no existen métodos generales.

Analisis de algoritmos

= RETURN =3 7-. ELSE K

5. Decodificadores. Salida _1= A A A A = m = M ... Electrónica Digital. Tema

Algoritmos de Ordenación

Guía práctica de estudio 06: Lenguaje binario

INSTITUCIÓN EDUCATIVA INSTITUTO AGRICOLA JORNADA DIURNA GUÍA DE TRABAJO # 6 AREA: MATEMÁTICAS AGISNATURA: ARITMÉTICA GRADO: SEXTO

Los números naturales

PROBLEMAS RESUELTOS DE PREPARACIÓN PARA OPOSICIONES. Problemas 02

Algoritmos y Programación Clase 8

ECUACIONES.

Objetivos formativos de Álgebra

Clase 8 Matrices Álgebra Lineal

UNIDAD 1: NÚMEROS RACIONALES OBJETIVOS

NÚMEROS ENTEROS. En la recta numérica se pueden representar los números naturales, el cero y los números negativos.

Algoritmos sobre secuencias y conjuntos de datos

TEMA 2. Números racionales. Teoría. Matemáticas

Tema 4. Operadores y Expresiones

Conjunto de Números Racionales.

Curso º ESO. UNIDADES 6 Y 7: EXPRESIONES ALGEBRAICAS Y ECUACIONES Departamento de Matemáticas IES Fray Bartolomé de las Casas de Morón

001. Interpreta correctamente códigos (teléfonos, matrículas, NIF ).

Tema 3. Polinomios y fracciones algebraicas

Conectados con el pasado, proyectados hacia el futuro Plan Anual de Matemática II Año PAI VII Grado

Actividades de Cognitiva Matemáticas que recogen las diversas estrategias de cálculo metal / reflexivo

INSTITUTO DE FORMACIÓN DOCENTE DE CANELONES DIVISIBILIDAD

Representación de decimales.

TEMA II: SISTEMAS DE NUMERACIÓN

Conjunto de los Números Racionales

Sistemas de ecuaciones lineales

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

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

Algoritmo para Calcular Logaritmos

Análisis de Algoritmos

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

Uniboyacá GUÍA DE APRENDIZAJE NO 7. Psicología e Ingeniería Ambiental

TEMA 1: NÚMEROS REALES

PROGRAMACIÓN DE AULA MATEMÁTICAS 4º EP CENTRO EDUCATIVO LA AMISTAD. PLAN DE TRABAJO TRIMESTRAL MATEMÁTICAS 4º EP TRIMESTRE 1º REG0801 Pág.

Los números naturales están ordenados, lo que nos permite comparar dos números naturales:

Algoritmos. Diseño de algoritmos por inducción. Alberto Valderruten. Dept. de Computación, Universidade da Coruña

Complejidad de Algoritmos

Eje temático: Álgebra y funciones Contenidos: Raíces cuadradas y cúbicas - Racionalización Ecuaciones irracionales. Nivel: 3 Medio

MATEMÁTICAS 1º DE ESO

DEPARTAMENTO DE MATEMÁTICAS MATEMÁTICAS 1º DE ESO PRIMER TRIMESTRE

MATEMÁTICAS 5. º CURSO UNIDAD 1: SISTEMAS DE NUMERACIÓN

APUNTES DE FUNDAMENTOS DE MATEMATICA. CASO I: Cuando todos los términos de un polinomio tienen un factor común.

2. Ecuaciones de primer grado: (sencillas, con paréntesis, con denominadores).

FICHAS REPASO 3º ESO. Para restar números enteros, se suma al minuendo el opuesto del sustraendo y después se aplican las reglas de la suma.

Capítulo 3 DIVIDE Y VENCERÁS

ÁREA: MATEMÁTICAS UNIDAD : 1 TEMPORALIZACIÓN: OCTUBRE 1ª QUINCENA OBJETIVOS CONTENIDOS CRITERIOS DE EVALUACIÓN

Programación. Tema 8: Tablas Hash. Apuntes elaborados por: Eduardo Quevedo, Aaron Asencio y Raquel López Revisado por: Javier Miranda el????

Productos notables. Se les llama productos notables (también productos especiales) precisamente porque son muy utilizados en los ejercicios.

Antes de iniciar el tema se deben de tener los siguientes conocimientos básicos:

I Parte. Selección única. (4 puntos) Leo y marco con una equis (X) la respuesta correcta.

INSTITUTO TECNOLOGICO DE LAS AMERICAS CARRERA DE TECNOLOGO EN DESARROLLO DE SOFTWARE PRECALCULO

TEMA 1. Números Reales. Teoría. Matemáticas

Introducción a la Programación Ingenieria en Informática Junio 2008

CRITERIOS EVALUACIÓN MATEMÁTICAS

PRECALCULO INSTITUTO TECNOLÒGICO DE LAS AMÈRICAS CARRERA DE TECNÓLOGO EN MECATRONICA. Precálculo. Nombre de la asignatura: MAT-001

SCUACAC030MT22-A16V1. SOLUCIONARIO Ejercitación Operatoria de Logaritmos

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

UNIDAD 1: DIVISIBILIDAD Y NÚMEROS ENTEROS

Convertir unidades de longitud Determinar el perímetro de triángulo y cuadrilátero Determinar el volumen de prismas rectos.

FUNDAMENTOS DE INFORMÁTICA

LA FORMA TRIGONOMETRICA DE LOS NUMEROS COMPLEJOS Y EL TEOREMA DE MOIVRE. Capítulo 7 Sec. 7.5 y 7.6

Lección 2 Introducción al lenguaje C

Problemas de Recursividad

UNIDAD DE APRENDIZAJE II

Se desea estudiar el comportamiento de una función a medida independiente x se aproxima a un valor específico.

CONTENIDOS Y CRITERIOS DE EVALUACIÓN MATEMÁTICAS 5º ED. PRIMARIA

UNIDAD 5: LA DIVISIÓN.

Semana 6. Factorización. Parte I. Semana Productos 7 notables. Parte II. Empecemos! Qué sabes de...? El reto es...

DIVISIBILIDAD: Resultados

Tema 2 Introducción a la Programación en C.

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

Transcripción:

Algorítmica y Complejidad Tema Divide y Vencerás.

. Método.. Un ejemplo sencillo.. Complejidad del método.. Ejemplo: El máximo subarray.. Ejemplo: Multiplicación de enteros.

. Método.. Un ejemplo sencillo.. Complejidad del método.. Ejemplo: El máximo subarray.. Ejemplo: Multiplicación de enteros.

Método. Esquema de tres etapas! Dividir. El problema se divide en varios problemas similares de menor tamaño. Resolver. Si los subproblemas son asumibles se resuelven. En caso contrario se vuelve a aplicar el método. Combinar. Se combinan las soluciones de los subproblemas para obtener la solución total.

Método. Características que deben cumplir los problemas para que se pueda aplicar esta técnica: El problema se debe poder descomponer en otros similares pero más pequeños. Los nuevos problemas deben ser disjuntos. Debe ser posible combinar las soluciones individuales para obtener la global.

Método. procedure Divide_y_Vencerás (P : problema) is begin if P es simple then Solucionar P; else Descomponer P en {P, P,..., Pn}; Divide_y_Vencerás (P); Divide_y_Vencerás (P);................... Divide_y_Vencerás (Pn); Combinar las soluciones de {P, P,..., Pn}; end if; end Divide_y_Vencerás;

Método. Hasta donde conviene subdividir el problema? T (n) Algoritmo Inmediato Existirá un umbral n 0 por debajo del cuál será más rápido aplicar el algoritmo inmediato. Algoritmo Div. y Venc. n 0 n El cálculo de n 0 no es trivial y depende de la implementación. Es habitual utilizar métodos empíricos para su determinación.

. Método.. Un ejemplo sencillo.. Complejidad del método.. Ejemplo: El máximo subarray.. Ejemplo: Multiplicación de enteros.

Un ejemplo sencillo. Problema: Encontrar el valor máximo en un array de números enteros." A : - -.... n- n - La solución inmediata sería: function Maximo (i, j : integer) return integer is max : integer := integer'first; begin for k in i.. j loop if A(k) > max then max := A(k); end if; end loop; return max; end Maximo; _ put ("Valor maximo:"); put (Maximo(A'first, A'last));

Un ejemplo sencillo. Enfoque "divide y vencerás":. Dividir el array en dos partes.. Hallar el máximo de cada parte.. Seleccionar el mayor de los dos. Se sigue aplicando de forma recursiva. 0

Un ejemplo sencillo. function Maximo (i, j : integer) return integer is med, max_i, max_d : integer; begin end Maximo; _ put ("Valor maximo:"); put (Maximo(A'first, A'last));

Un ejemplo sencillo. function Maximo (i, j : integer) return integer is med, max_i, max_d : integer; begin if i=j then return A(i); else end if; end Maximo; _ put ("Valor maximo:"); put (Maximo(A'first, A'last));

Un ejemplo sencillo. function Maximo (i, j : integer) return integer is med, max_i, max_d : integer; begin if i=j then return A(i); else med := (i + j) / ; max_i := Maximo (i, med); max_d := Maximo (med+, j); end if; end Maximo; _ put ("Valor maximo:"); put (Maximo(A'first, A'last));

Un ejemplo sencillo. function Maximo (i, j : integer) return integer is med, max_i, max_d : integer; begin if i=j then return A(i); else med := (i + j) / ; max_i := Maximo (i, med); max_d := Maximo (med+, j); if max_i > max_d then return max_i; else return max_d; end if; end if; end Maximo; _ put ("Valor maximo:"); put (Maximo(A'first, A'last));

. Método.. Un ejemplo sencillo.. Complejidad del método.. Ejemplo: El máximo subarray.. Ejemplo: Multiplicación de enteros.

Complejidad del método. Problema Problema a- Problema Problema Problema... Problema a T(n) T(n/b) + T(n/b ) + T(n/b) +... + T(n/b) + T(n/b) a T ( n / b ) Descomposición del problema y combinación de las soluciones O ( n k )

Complejidad del método. En general responderá a esta ecuación: T ( n ) = a T ( n / b ) + O ( n k ) a, b, k 0 a : Número de subproblemas en que se descompone. n/b : Tamaño de cada nuevo subproblema. Cuya solución es: O ( n k ), a < b k T ( n ) = O ( n k log n ), a = b k O ( n log b a ), a > b k Teorema maestro!

Complejidad del método. Complejidad del ejemplo sencillo: (Enfoque Divide y Vencerás) function Maximo (i, j : integer) return integer is med, max_i, max_d : integer; begin if i=j then return A(i); else med := (i + j) / ; max_i := Maximo (i, med); max_d := Maximo (med+, j); if max_i > max_d then return max_i; else return max_d; end if; end if; end Maximo; O ( ) O ( )

Complejidad del método. Complejidad del ejemplo sencillo: (Enfoque Divide y Vencerás) function Maximo (i, j : integer) return integer is med, max_i, max_d : integer; begin if i=j then return A(i); else med := (i + j) / ; max_i := Maximo (i, med); max_d := Maximo (med+, j); if max_i > max_d then return max_i; else return max_d; end if; end if; end Maximo; T ( n / ) T ( n / )

Complejidad del método. Complejidad del ejemplo sencillo: (Enfoque Divide y Vencerás) T ( n ) = a T ( n / b ) + O ( n k ) a = b = k = 0 T ( n ) = T ( n / ) + O ( ) a > b k > 0 > O ( n log b a ) = O ( n log ) = O ( n ) 0

Complejidad del método. Complejidad del ejemplo sencillo: (Enfoque Inmediato) function Maximo (i, j : integer) return integer is max : integer := integer'first; begin for k in i.. j loop if A(k) > max then max := A(k); end if; end loop; return max; end Maximo; O ( n ) Ambos métodos tienen la misma complejidad. Divide y Vencerás es más lento por la recursividad. En este caso es mejor el Enfoque Inmediato.

. Método.. Un ejemplo sencillo.. Complejidad del método.. Ejemplo: El máximo subarray.. Ejemplo: Multiplicación de enteros.

Ejemplo: El máximo subarray. Problema: "Dados varios números que supondremos almacenados en un array, se trata de encontrar la secuencia de números contiguos cuya suma sea máxima." Por ejemplo, dado: 0 A : - - - - La solución sería: cuya suma es. Si existe más de una solución, nos conformaremos con hallar una de ellas.

Ejemplo: El máximo subarray. - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - 0 Una solución inmediata:

Ejemplo: El máximo subarray. procedure Maximo_Subarray is.............. begin max := integer'first; for i in A'range loop suma := 0; for j in i.. A'last loop suma := suma + A(j); if suma > max then O ( n ) max := suma; inf := i; sup := j; end if; end loop; end loop; put ("Indice inferior: "); put (inf); new_line; put ("Indice superior: "); put (sup); new_line; put ("Valor de la suma : "); put (max); new_line; end Maximo_Subarray;

Ejemplo: El máximo subarray. Enfoque "divide y vencerás": Se divide el array en dos partes. 0 Pueden darse tres casos: 0 0 El subarray está totalmente en la parte izquierda. 0 El subarray está totalmente en la parte derecha. El subarray atraviesa la división.

Ejemplo: El máximo subarray. Si el subarray está completamente en uno de los lados, se puede resolver de forma recursiva, finalizando cuando el tamaño sea de un sólo elemento. En el otro caso, el subarray tendrá una parte en el lado izquierdo y otra en el derecho. Las partes se corresponderán con uno de estos casos: 0 0 - - - - - - - - 0 0 - - - - - - - - 0 0 - - - - - - - - 0 0 - - - - - - - - 0 0 - - - - - - - - El máximo subarray estará formado por la unión del de mayor suma en el lado izquierdo y el de mayor suma del lado derecho.

Ejemplo: El máximo subarray. procedure Maximo_Subarray (E_inf, E_sup : in natural; S_inf, S_sup : out natural; S_suma : out integer) is........................................ begin end Maximo_Subarray; _ Maximo_Subarray (A'first, A'last, inf, sup, max);

Ejemplo: El máximo subarray. procedure Maximo_Subarray (E_inf, E_sup : in natural; S_inf, S_sup : out natural; S_suma : out integer) is........................................ begin if E_inf = E_sup then S_suma := A(E_inf); S_inf := E_inf; S_sup := S_inf; else O ( ) end if; end Maximo_Subarray; _ Maximo_Subarray (A'first, A'last, inf, sup, max);

Ejemplo: El máximo subarray. procedure Maximo_Subarray (E_inf, E_sup : in natural; S_inf, S_sup : out natural; S_suma : out integer) is........................................ begin if E_inf = E_sup then S_suma := A(E_inf); S_inf := E_inf; S_sup := S_inf; else med := (E_inf + E_sup) / ; Maximo_Subarray (E_inf, med, inf_i, sup_i, max_i); Maximo_Subarray (med +, E_sup,inf_d, sup_d, max_d); Subarray_Comun (E_inf, med, E_sup, inf_c, sup_c, max_c); O ( ) O ( ) T ( n / ) T ( n / )? end if; end Maximo_Subarray; _ Maximo_Subarray (A'first, A'last, inf, sup, max);

Ejemplo: El máximo subarray. procedure Maximo_Subarray (E_inf, E_sup : in natural; S_inf, S_sup : out natural; S_suma : out integer) is........................................ begin if E_inf = E_sup then S_suma := A(E_inf); S_inf := E_inf; S_sup := S_inf; else med := (E_inf + E_sup) / ; Maximo_Subarray (E_inf, med, inf_i, sup_i, max_i); Maximo_Subarray (med +, E_sup,inf_d, sup_d, max_d); Subarray_Comun (E_inf, med, E_sup, inf_c, sup_c, max_c); if max_i > max_d and max_i > max_c then S_suma := max_i; S_inf := inf_i; S_sup := sup_i; elsif max_d > max_i and max_d > max_c then S_suma := max_d; S_inf := inf_d; S_sup := sup_d; else S_suma := max_c; S_inf := inf_c; S_sup := sup_c; end if; O ( ) O ( ) T ( n / ) T ( n / )? O ( ) end if; end Maximo_Subarray; _ Maximo_Subarray (A'first, A'last, inf, sup, max);

Ejemplo: El máximo subarray. procedure Subarray_Comun (E_inf, med, E_sup : in natural; S_inf, S_sup : out natural; S_suma : out integer) is........................................ begin end Subarray_Comun;

Ejemplo: El máximo subarray. procedure Subarray_Comun (E_inf, med, E_sup : in natural; S_inf, S_sup : out natural; S_suma : out integer) is........................................ begin suma_izq := integer'first; suma_tmp := 0; for i in reverse E_inf.. med loop suma_tmp := suma_tmp + A(i); if suma_tmp > suma_izq then suma_izq := suma_tmp; S_inf := i; end if; end loop; O ( n ) end Subarray_Comun;

Ejemplo: El máximo subarray. procedure Subarray_Comun (E_inf, med, E_sup : in natural; S_inf, S_sup : out natural; S_suma : out integer) is........................................ begin suma_izq := integer'first; suma_tmp := 0; for i in reverse E_inf.. med loop suma_tmp := suma_tmp + A(i); if suma_tmp > suma_izq then suma_izq := suma_tmp; S_inf := i; end if; end loop; suma_der := integer'first; suma_tmp := 0; for i in med+.. E_sup loop suma_tmp := suma_tmp + A(i); if suma_tmp > suma_der then suma_der := suma_tmp; S_sup := i; end if; end loop; O ( n ) O ( n ) end Subarray_Comun;

Ejemplo: El máximo subarray. procedure Subarray_Comun (E_inf, med, E_sup : in natural; S_inf, S_sup : out natural; S_suma : out integer) is........................................ begin suma_izq := integer'first; suma_tmp := 0; for i in reverse E_inf.. med loop suma_tmp := suma_tmp + A(i); if suma_tmp > suma_izq then suma_izq := suma_tmp; S_inf := i; end if; end loop; suma_der := integer'first; suma_tmp := 0; for i in med+.. E_sup loop suma_tmp := suma_tmp + A(i); if suma_tmp > suma_der then suma_der := suma_tmp; S_sup := i; end if; end loop; S_suma := suma_izq + suma_der; end Subarray_Comun; O ( n ) O ( n ) O ( )

Ejemplo: El máximo subarray. Complejidad del enfoque Divide y Vencerás: T ( n ) = O () + O () + T (n / ) + T (n / ) + O (? ) + O () O (n) + O (n) + O () T ( n ) = T ( n / ) + O ( n ) a = b = k = T ( n ) = a T ( n / b ) + O ( n k ) T (n) n O ( n log n ) = O ( n log n ) n n log n

. Método.. Un ejemplo sencillo.. Complejidad del método.. Ejemplo: El máximo subarray.. Ejemplo: Multiplicación de enteros.

Ejemplo: Multiplicación de enteros. Problema: "Dados dos números enteros X e Y de n bits cada uno, calcular su producto Algoritmo tradicional: Ejemplo en decimal: x 00 x 0 00 0000 00 00 0000 Complejidad: O ( n )

Ejemplo: Multiplicación de enteros. Algoritmo alternativo : X n bits Ejemplo en decimal: X X 0 n / bits n / bits X = X n/ + X 0 = 0 / + 000 +

Ejemplo: Multiplicación de enteros. Los números a multiplicar se pueden representar así: X = X n / + X 0 Y = Y n / + Y 0 el producto sería: X Y = ( X n / + X 0 ) ( Y n / + Y 0 ) operando: X Y = X Y n + ( X Y 0 + X 0 Y ) n / + X 0 Y 0 0

Ejemplo: Multiplicación de enteros. + + + X Y = X Y n + ( X Y 0 + X 0 Y ) n / + X 0 Y 0 x x x x sumas desplazamientos multiplicaciones O ( n) O ( n) T(n) = T(n/) + O ( n) a = b = k = > O ( n l o g ) = O(n )

Ejemplo: Multiplicación de enteros. Algoritmo alternativo : Ecuación obtenida por el método anterior: X Y = X Y n + ( X Y 0 + X 0 Y ) n / + X 0 Y 0 ( X X 0 ) ( Y 0 Y ) + X Y + X 0 Y 0 X Y = X Y n + ((X X 0 )(Y 0 Y ) + X Y + X 0 Y 0 ) n / + X 0 Y 0

Ejemplo: Multiplicación de enteros. + + + + + + X Y = X Y n + ((X X 0 )(Y 0 Y ) + X Y + X 0 Y 0 ) n / + X 0 Y 0 x x x x x Iguales Iguales sumas (restas) desplazamientos multiplicaciones O ( n) O ( n) T(n) = T(n/) + O ( n) a = b = k = > O ( n l o g ) = O(n, )