Tema 2. Divide y vencerás.
|
|
|
- Claudia Venegas Parra
- hace 9 años
- Vistas:
Transcripción
1 Programa de teoría Parte I. Estructuras de Datos. 1. Abstracciones especificaciones. 2. Conjuntos diccionarios. 3. Representación de conjuntos mediante árboles. 4. Grafos. Parte II. Algorítmica. 1. Análisis de algoritmos. 2. Divide vencerás. 3. Algoritmos voraces. 4. Programación dinámica. 5. Backtracking. 6. Ramificación poda. A.E.D. 1 PARTE II: ALGORÍTMICA 2.1. Método general Análisis de tiempos de ejecución Ejemplos de aplicación Multiplicación rápida de enteros largos Multiplicación rápida de matrices Ordenación por mezcla ordenación rápida El problema de selección. A.E.D. 2
2 2.1. Método general. La técnica divide vencerás consiste en: Descomponer un problema en un conjunto de subproblemas más pequeños. Se resuelven estos subproblemas. Se combinan las soluciones para obtener la solución para el problema original. PROBLEMA SOLUCIÓN PROBLEMA SOLUCIÓN PROBLEMA SOLUCIÓN A.E.D Método general. Esquema general: DivideVencerás (p: problema) Dividir (p, p 1, p 2,..., p k ) para i:= 1, 2,..., k s i := Resolver (p i ) solución:= Combinar (s 1, s 2,..., s k ) Normalmente para resolver los subproblemas se utilizan llamadas recursivas al mismo algoritmo (aunque no necesariamente). Ejemplo. Problema de las Torres de Hanoi. A.E.D. 4
3 2.1. Método general. A B C Ejemplo. Problema de las torres de Hanoi. Mover n discos del poste A al C: Mover n-1 discos de A a B Mover 1 disco de A a C Mover n-1 discos de B a C A.E.D Método general. Hanoi (n, A, B, C: entero) si n==1 entonces mover (A, C) sino Hanoi (n-1, A, C, B) mover (A, C) Hanoi (n-1, B, A, C) finsi Si el problema es pequeño, entonces se puede resolver de forma directa. Otro ejemplo. Cálculo de los números de Fibonacci: F(n) = F(n-1) + F(n-2) F(0) = F(1) = 1 A.E.D. 6
4 2.1. Método general. Ejemplo. Cálculo de los números de Fibonacci. El cálculo del n-ésimo número de Fibonacci se descompone en calcular los números de Fibonacci n-1 n-2. Combinar: sumar los resultados de los subproblemas. La idea de la técnica divide vencerás es aplicada en muchos campos: Estrategias militares. Demostraciones lógicas matemáticas. Diseño modular de programas. Diseño de circuitos. Etc. A.E.D Método general. Esquema recursivo. Con división en 2 subproblemas datos almacenados en una tabla entre las posiciones p q: DivideVencerás (p, q: indice) var m: indice si Pequeño (p, q) entonces solucion:= SoluciónDirecta (p, q) sino m:= Dividir (p, q) solucion:= Combinar (DivideVencerás (p, m), DivideVencerás (m+1, q)) finsi p q A.E.D. 8
5 2.1. Método general. Aplicación de divide vencerás: encontrar la forma de definir las funciones genéricas: Pequeño: Determina cuándo el problema es pequeño para aplicar la resolución directa. SoluciónDirecta: Método alternativo de resolución para tamaños pequeños. Dividir: Función para descomponer un problema grande en subproblemas. Combinar: Método para obtener la solución al problema original, a partir de las soluciones de los subproblemas. Para que pueda aplicarse la técnica divide vencerás debe existir una forma de definirlas Aplicar un razonamiento inductivo... A.E.D Método general. Requisitos para aplicar divide vencerás: Necesitamos un método (más o menos directo) de resolver los problemas de tamaño pequeño. El problema original debe poder dividirse fácilmente en un conjunto de subproblemas, del mismo tipo que el problema original pero con una resolución más sencilla (menos costosa). Los subproblemas deben ser disjuntos: la solución de un subproblema debe obtenerse independientemente de los otros. Es necesario tener un método de combinar los resultados de los subproblemas. A.E.D. 10
6 2.1. Método general. 10 Ejemplo. 1 2 Problema del viajante Método directo de resolver el problema: Trivial con 3 nodos. Descomponer el problema en subproblemas más pequeños: Por dónde? Los subproblemas deben ser disjuntos:...parece que no Combinar los resultados de los subproblemas: Imposible aplicar divide vencerás!! A.E.D Método general. Normalmente los subproblemas deben ser de tamaños parecidos. Como mínimo necesitamos que haan dos subproblemas. Si sólo tenemos un subproblema entonces hablamos de técnicas de reducción (o simplificación). Ejemplo sencillo: Cálculo del factorial. Fact(n):= n*fact(n-1) A.E.D. 12
7 2.2. Análisis de tiempos de ejecución. Para el esquema recursivo, con división en dos subproblemas con la mitad de tamaño: g(n) Si n n 0 (caso base) t(n) = 2*t(n/2) + f(n) En otro caso t(n): tiempo de ejecución del algoritmo DV. g(n): tiempo de calcular la solución para el caso base, algoritmo directo. f(n): tiempo de dividir el problema combinar los resultados. A.E.D Análisis de tiempos de ejecución. Resolver suponiendo que n es potencia de 2 n = 2 k n 0 = n/2 m Aplicando expansión de recurrencias: t( n) = 2 m g( n / 2 ) + m 1 i = 0 i i (2 f ( n / 2 )) Si n 0 =1, entonces m=k, tenemos: t( n) = 2 k g( n / 2 k ) + k 1 i = 0 m i i (2 f ( n / 2 )) = n g(1) + k 1 i = 0 i (2 f (2 k i )) A.E.D. 14
8 2.2. Análisis de tiempos de ejecución. Ejemplo 1. La resolución directa se puede hacer en un tiempo constante la división combinación de resultados también. g(n) = c; f(n) = d t(n) Θ(n) Ejemplo 2. La solución directa se calcula en O(n 2 ) la combinación en O(n). g(n) = c n 2 ; f(n) = d n t(n) Θ(n log n) A.E.D Análisis de tiempos de ejecución. En general, si el realiza a llamadas recursivas de tamaño n/b, la combinación requiere f(n) = d n p O(n p ), entonces: t(n) = a t(n/b) + d n p Suponiendo n = b k k = log b n t(b k ) = a t(b k-1 ) + d b pk Podemos deducir que: O(n log b a ) Si a > b p t(n) O(n p log Fórmula n) Si a = b p maestra O(n p ) Si a < b p A.E.D. 16
9 2.2. Análisis de tiempos de ejecución. Ejemplo 3. Dividimos en 2 trozos de tamaño n/2, con f(n) O(n): a = b = 2 t(n) O(n log n) Ejemplo 4. Realizamos 4 llamadas recursivas con trozos de tamaño n/2, con f(n) O(n): a = 4; b = 2 t(n) O(n log 2 4 ) = O(n 2 ) A.E.D Ejemplos de aplicación Multiplicación rápida de enteros largos. Queremos representar enteros de tamaño arbitrariamente grande: mediante listas de cifras. tipo EnteroLargo = Puntero[Nodo] nodo = registro valor : 0..9 sig : EnteroLargo finregistro u v Implementar operaciones de suma, resta, multiplicación, etc. A.E.D. 18
10 Multiplicación rápida de enteros largos. Algoritmo clásico de multiplicación: Inicialmente r= 0 Para cada cifra de v hacer Multiplicar todas las cifras de u por v Sumar a r con el desplazamiento correspondiente u v Suponiendo que u es de tamaño n, v de tamaño m, cuánto es el tiempo de ejecución? Y si los dos son de tamaño n? A.E.D Multiplicación rápida de enteros largos. Algoritmo de multiplicación con divide vencerás: u v w x z SoluciónDirecta: si el tamaño es 1, usar la multiplicación escalar Dividir: decomponer los enteros de tamaño n en dos trozos de tamaño n/2 Resolver los subproblemas correspondientes Combinar: sumar los resultados de los subproblemas con los desplazamientos correspondientes A.E.D. 20
11 Multiplicación rápida de enteros largos. u v w x z u = w 10 S + x v = 10 S + z n/2 n/2 =S Cálculo de la multiplicación con divide vencerás: r = u v = 10 2S w + 10 S (w z+x ) + x z El problema de tamaño n es descompuesto en 4 problemas de tamaño n/2. La suma se puede realizar en un tiempo lineal O(n). Cuánto es el tiempo de ejecución? t(n) = 4 t(n/2) + d n O(n 2 ) No mejora el método clásico. A.E.D Multiplicación rápida de enteros largos. u w x u = w 10 S + x v n/2 Y si en vez de 4 tuviéramos 3 subproblemas...? Multiplicación rápida de enteros largos (Karatsuba Ofman): r = u v = 10 2S w + 10 S [(w-x) (z-) + w + x z] + x z Subproblemas: m1= w m2= (w-x) (z-) m3= x z z n/2 =S v = 10 S + z A.E.D. 22
12 Multiplicación rápida de enteros largos. operación Mult(u, v: EnteroLargo; n, base: entero) : EnteroLargo si n == base entonces devolver MultBasica(u,v) sino asignar(w, primeros(n/2, u)) asignar(x, ultimos(n/2, u)) asignar(, primeros(n/2, v)) asignar(z, ultimos(n/2, v)) asignar(m1, Mult(w,, n/2, base)) asignar(m2, Mult(x, z,n/2, base)) asignar(m3, Mult(restar(w,x), restar(z,), n/2, base)) devolver sumar(sumar(mult10(m1,n), Mult10(sumar(sumar(m1,m2),m3),n/2)),m2) finsi Cuánto es el tiempo de ejecución? A.E.D Multiplicación rápida de enteros largos. En este caso se requieren 3 multiplicaciones de tamaño n/2: t(n) = 3 t(n/2) + d n O(n log 2 3 ) O(n 1.59 ) El método es asintóticamente mejor que el método clásico. Sin embargo, las constantes los términos de menor orden son mucho maores (la combinación es mu costosa). En la práctica se obtiene beneficio con números de más de 500 bits... Conclusión: Para tamaños pequeños usar el método directo. Para tamaños grandes usar el método de Karatsuba Ofman. El caso base no necesariamente debe ser n = 1... Cuál es el tamaño óptimo del caso base? A.E.D. 24
13 Multiplicación rápida de matrices. Supongamos el problema de multiplicar dos matrices cuadradas A, B de tamaños nxn. C = AxB C(i, j) = A(i, k) B(k, j); Para todo i, j= 1..n k=1..n Método clásico de multiplicación: for i:= 1 to N do for j:= 1 to N do suma:= 0 for k:= 1 to N do suma:= suma + a[i,k]*b[k,j] end c[i, j]:= suma end end El método clásico de multiplicación requiere Θ(n 3 ). A.E.D Multiplicación rápida de matrices. Aplicamos divide vencerás: Cada matriz de nxn es dividida en cuatro submatrices de tamaño (n/2)x(n/2): A ij, B ij C ij. A 11 A 12 A 21 A 22 x B 11 B 12 = B 21 B 22 C 11 C 12 C 21 C 22 C 11 = A 11 B 11 + A 12 B 21 C 12 = A 11 B 12 + A 12 B 22 C 21 = A 21 B 11 + A 22 B 21 C 22 = A 21 B 12 + A 22 B 22 Es necesario resolver 8 problemas de tamaño n/2. La combinación de los resultados requiere un O(n 2 ). t(n) = 8 t(n/2) + a n 2 Resolviéndolo obtenemos que t(n) es O(n 3 ). Podríamos obtener una mejora si hiciéramos 7 multiplicaciones (o menos)... A.E.D. 26
14 Multiplicación rápida de matrices. Multiplicación rápida de matrices (Strassen): P = (A 11 +A 22 )(B 11 +B 22 ) Q = (A 12 +A 22 ) B 11 C 11 = P + S - T + U R = A 11 (B 12 -B 22 ) C 12 = R + T S = A 22 (B 21 -B 11 ) C 21 = Q + S T = (A 11 +A 12 )B 22 C 22 = P + R - Q + U U = (A 21 -A 11 )(B 11 +B 12 ) V = (A 12 -A 22 )(B 21 +B 22 ) Tenemos 7 subproblemas de la mitad de tamaño. Cuánto es el tiempo de ejecución? A.E.D Multiplicación rápida de matrices. El tiempo de ejecución será: t(n) = 7 t(n/2) + a n 2 Resolviéndolo, tenemos que: t(n) O(n log 2 7 ) O(n ). Las constantes que multiplican al polinomio son mucho maores (tenemos muchas sumas restas), por lo que sólo es mejor cuando la entrada es mu grande (empíricamente, para valores en torno a n>120). Cuál es el tamaño óptimo del caso base? A.E.D. 28
15 Multiplicación rápida de matrices. Aunque el algoritmo es más complejo e inadecuado para tamaños pequeños, se demuestra que la cota de complejidad del problema es menor que O(n 3 ). Cota de complejidad de un problema: tiempo del algoritmo más rápido posible que resuelve el problema. Algoritmo clásico O(n 3 ) V. Strassen (1969) O(n ) V. Pan (1984) O(n ) D. Coppersmith S. Winograd (1990) O(n )... A.E.D Ordenación por mezcla ordenación rápida. La ordenación por mezcla (mergesort) es un buen ejemplo de divide vencerás. Para ordenar los elementos de un arra de tamaño n: Dividir: el arra original es dividido en dos trozos de tamaño igual (o lo más parecidos posible), es decir n/2 n/2. Resolver recursivamente los subproblemas de ordenar los dos trozos. Pequeño: si tenemos un solo elemento, a está ordenado. Combinar: combinar dos secuencias ordenadas. Se puede conseguir en O(n). A A.E.D. 30
16 Ordenación por mezcla ordenación rápida. operación MergeSort (i, j: entero) si Pequeño (i, j) entonces OrdenaciónDirecta (i, j) sino s:= (i + j) div 2 MergeSort (i, s) MergeSort (s+1, j) Combinar (i, s, j) finsi Cómo es la operación Combinar? Cuánto es el tiempo de ejecución? Ojo: para tamaños pequeños es mejor un método de ordenación directa Usar un caso base maor que 1... A.E.D Ordenación por mezcla ordenación rápida. La ordenación rápida (quicksort) utiliza también se basa en la técnica divide vencerás. Dividir: el arra (i..j) es dividido usando un procedimiento Pivote, que devuelve un entero l entre (i, j), tal que: A[i a ] A[l] A[j a ], para i a = i..l-1; j a =l+1..j. Ordenar recursivamente los trozos (i..l-1) (l+1..j). Pequeño: si tenemos un solo elemento, entonces a está ordenado. Combinar: no es necesario realizar ninguna operación. A 1 x 2 x 3 x 4 Z i l A.E.D. 32 j
17 Ordenación por mezcla ordenación rápida. operación QuickSort (i, j: entero) si i j entonces { Ya está ordenado, no hacer nada } sino Pivote (i, j, l) QuickSort (i, l-1) QuickSort (l+1, j) finsi Aunque no ha coste de combinar los resultados, la llamada a Pivote tiene un coste O(n). Las particiones no tienen por qué ser de tamaño n/2... A.E.D Ordenación por mezcla ordenación rápida. operación Pivote (i, j: entero; var l: entero) var p: tipo { p es el pivote, del tipo del arra } k: entero p:= A[i] { se toma como pivote el primer elemento } k:= i l:= j+1 repetir k:= k+1 hasta (A[k] > p) or (k j) repetir l:= l-1 hasta (A[l] p) mientras k < l hacer intercambiar (k, l) repetir k:= k+1 hasta (A[k] > p) repetir l:= l-1 hasta (A[l] p) finmientras intercambiar (i, l) A.E.D. 34
18 Ordenación por mezcla ordenación rápida. Tiempo de ejecución de la ordenación rápida: Mejor caso. Todas las particiones son de tamaño similar, n/2. t(n) = 2 t(n/2) + b n + c Ω(n log n) Peor caso. Se da cuando la matriz está a ordenada. En ese caso una partición tiene tamaño 0 la otra n-1. t(n) = t(n-1) + b n + c O(n 2 ) Caso promedio. Se puede comprobar que t(n) O(n log n) A.E.D El problema de selección. Sea T[1..n] un arra (no ordenado) de enteros, sea s un entero entre 1 n. El problema de selección consiste en encontrar el elemento que se encontraría en la posición s si el arra estuviera ordenado. T Si s = n/2, entonces tenemos el problema de encontrar la mediana de T, es decir el valor que es maor que la mitad de los elementos de T menor que la otra mitad. Cómo resolverlo? A.E.D. 36
19 El problema de selección. Forma sencilla de resolver el problema de selección: 1. Ordenar T devolver el valor T[s] 2. Esto requeriría Θ(n log n) Igual de complejo que una ordenación completa! Pero sólo necesitamos ordenar uno... Idea: usar el procedimiento pivote de QuickSort x x x Z L A.E.D El problema de selección. Utilizando el procedimiento Pivote podemos resolverlo en O(n)... Selección (T: arra [1..n] de entero; s: entero) var i, j, l: entero i:= 1 j:= n repetir Pivote (i, j, l) si s < l entonces j:= l- 1 sino si s > l entonces i:= l+1 hasta l==s devolver T[l] A.E.D. 38
20 El problema de selección. Se trata de un algoritmo de reducción: el problema es descompuesto en un solo subproblema de tamaño menor. El procedimiento es no recursivo. En el mejor caso, el subproblema es de tamaño n/2: t(n) = t(n/2) + a n; t(n) O(n) En el peor caso (arra ordenado) el subproblema es de tamaño n-1: t(n) = t(n-1) + a n; t(n) O(n 2 ) En el caso promedio el tiempo del algoritmo es un O(n). A.E.D Conclusiones. Idea básica Divide Vencerás: dado un problema, descomponerlo en partes, resolver las partes juntar las soluciones. Idea mu sencilla e intuitiva, pero... Qué pasa con los problemas reales de interés? Pueden existir muchas formas de descomponer el problema en subproblemas Quedarse con la mejor. Puede que no exista ninguna forma viable, los subproblemas no son independientes Descatar la técnica. Divide vencerás requiere la existencia de un método directo de resolución: Tamaños pequeños: solución directa. Tamaños grandes: descomposición combinación. Dónde establecer el límite pequeño/grande? A.E.D. 40
Programa de teoría. Algoritmos y Estructuras de Datos II. 2. Divide y vencerás. 1. Análisis de algoritmos
Programa de teoría Algoritmos y Estructuras de Datos II 1. Análisis de algoritmos 2. Divide y vencerás 3. Algoritmos voraces 4. Programación dinámica 5. Backtracking 6. Ramificación y poda A.E.D. II 1
Parte de Algoritmos de la asignatura de Programación Master de Bioinformática. Divide y vencerás
Parte de Algoritmos de la asignatura de Programación Master de Bioinformática Divide y vencerás Web asignatura: http://dis.um.es/~domingo/algbio.html E-mail profesor: [email protected] Transparencias preparadas
Algoritmos y Estructuras de Datos Curso 06/07. Ejercicios
6.1.(Clase) Un programa que utiliza la técnica divide y vencerás, divide un problema de tamaño n en a subproblemas de tamaño n/b. El tiempo g(n) de la resolución directa (caso base) se considerará constante.
Divide-y-vencerás, backtracking y programación dinámica
Divide-y-vencerás, backtracking y programación dinámica Diseño y Análisis de Algoritmos Cátedra de Programación Carrera de Ingeniería de Sistemas Prof. Isabel Besembel Carrera Noviembre, 2012 Prof. Isabel
Análisis de algoritmos
Tema 08: Divide y vencerás (DyV) M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom 1 Contenido Introducción Divide y vencerás Observaciones
Análisis y Diseño de Algoritmos (AyDA) Isabel Besembel Carrera
Análisis y Diseño de Algoritmos (AyDA) Isabel Besembel Carrera RECURSIÓN La recursión es una técnica fundamental en el diseño de algoritmos, que está basada en la solución de versiones más pequeñas del
Programa de teoría. Algoritmos y Estructuras de Datos II. 3. Algoritmos voraces. 1. Análisis de algoritmos 2. Divide y vencerás
Programa de teoría Algoritmos y Estructuras de Datos II 1. Análisis de algoritmos 2. Divide y vencerás 3. Algoritmos voraces 4. Programación dinámica 5. Backtracking 6. Ramificación y poda A.E.D. II 1
Algorítmica y Complejidad. Tema 5 Divide y Vencerás.
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..
Algoritmos mas complejos. Algoritmos y Estructuras de Datos II (Programación I) Mgter. Vallejos, Oscar A.
Algoritmos mas complejos Divide y Vencerás Técnica empleada en cosas dispares. También en el diseño de algoritmos. (ordenación: Quicksort; Mergesort). Consiste básicamente en dividir un problema original
Técnicas de diseño de algoritmos Divide y Vencerás
Técnicas de diseño de algoritmos Divide y Vencerás Luis Javier Rodríguez Fuentes Amparo Varona Fernández Departamento de Electricidad y Electrónica Facultad de Ciencia y Tecnología, UPV/EHU [email protected]
Estructuras de Datos y Algoritmos. Curso 2009/2010. Tema 3: Divide y Vencerás
Estructuras de Datos y Algoritmos Facultad de Informática Universidad Politécnica de Valencia Curso 2009/2010 Tema 3: Divide y Vencerás FI UPV: Curso 2009/2010 TEMA 3. Divide y Vencerás Objetivos Estudio
Multiplicación de matrices simétricas
Multiplicación de matrices simétricas La traspuesta de una matriz A n n es definida como una matriz A T n n tal que A T [i, j] =A[j, i] paracadai, j 2{1,...,n} Además, una matriz A es simétrica si A =
Diseño y Análisis de Algoritmos
1. Recursividad 2. "Dividir para Reinar" 3. Recursividad y Tabulación (Programación Dinámica) 4. Métodos Matemáticos Funciones discretas Notación O Ecuaciones de recurrencia 5. Casos de Estudio Breve descripción
Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013
Técnicas de diseño de algoritmos Algoritmos y Estructuras de Datos III Segundo cuatrimestre 2013 Técnicas de diseño de algoritmos Algoritmos golosos Backtracking (búsqueda con retroceso) Divide and conquer
Tema 9. Recursividad
Tema 9. Recursividad http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, [email protected] Estructuras de datos y de la información Universitat
Análisis y Diseño de Algoritmos
Análisis y Diseño de Algoritmos Introducción: El Rol de los Algoritmos en Computación DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Temario 2 1. Introducción 2. Notación Asintótica 3. Recurrencias
Algoritmos Secuenciales y Recursivos
Algoritmos Secuenciales y Recursivos M. Andrea Rodríguez-Tastets Ayudante: Erick Elejalde Universidad de Concepción,Chile www.inf.udec.cl\ andrea [email protected] I Semestre - 2014 1/45 Análisis secuencial
Universidad del Valle EISC
Recurrencias Raúl E Gutiérrez de Piñerez R. [email protected] Ing. Carlos Andres Delgado S. 2 [email protected] Universidad del Valle EISC Septiembre 2017 1
TEMA 1: DIVIDE Y VENCERÁS
TEMA 1: DIVIDE Y VENCERÁS l OBJETIVOS: n Estudio de la estrategia de diseño de algoritmos (recursivos) Divide y Vencerás n Estudio de los algoritmos de Ordenación Rápida: MergeSort y QuickSort n Estudio
PARTE II: ALGORÍTMICA
PARTE II: ALGORÍTMICA 5.. Método general 5.2. Análisis de tiempos de ejecución 5.3. Ejemplos de aplicación 5.3.. Problema de la mochila 0/ 5.3.2. Problema de la asignación 5.3.3. Resolución de juegos A.E.D.
Complejidad de algoritmos recursivos
Tema 3. Complejidad de algoritmos recursivos 1. INTRODUCCIÓN... 1 CLASIFICACIÓN DE FUNCIONES RECURSIVAS... 1 DISEÑO DE FUNCIONES RECURSIVAS... 2 2. VENTAJAS E INCONVENIENTES DE LA RECURSIVIDAD... 4 3.
Técnicas para el Diseño de Algoritmos
Técnicas para el Diseño de Algoritmos Algoritmos Algoritmos voraces Divide y conquista Programación dinámica Backtracking Algoritmos Voraces Algoritmos Voraces Algoritmos que implementan una búsqueda miope
Algorítmica y Lenguajes de Programación. Algoritmos voraces y divide y vencerás
Algorítmica y Lenguajes de Programación Algoritmos voraces y divide y vencerás Algoritmos voraces. Introducción (i) Las personas glotonas (voraces) intentan coger tanto como pueden en cada momento. Los
259. El número de combinaciones de m objetos entre un conjunto de n, denotado por n, para n 1 y 0 m n, se puede definir recursivamente por: m
258. Aplicar el algoritmo de programación dinámica para el problema del cambio de monedas sobre el siguiente ejemplo: n = 3, P = 9, c = (1, 3, 4). Qué ocurre si multiplicamos P y c por un valor constante,
Dividir-conquistar y podar-buscar
Técnicas de diseño de algoritmos Dividir-conquistar y podar-buscar Dra. Elisa Schaeffer [email protected] PISIS / FIME / UANL DC y PB p. 1 Diseño de algoritmos La meta: encontrar una manera eficiente
Tema 15: Preprocesamiento. Algoritmos Numéricos. Evaluación de Polinomios Multiplicación de Matrices Resolución de Ecuaciones Lineales
Tema 15: Preprocesamiento. Algoritmos Numéricos Evaluación de Polinomios Multiplicación de Matrices Resolución de Ecuaciones Lineales Eficiencia de Algoritmos Numericos Los programas numericos suelen hacer
ÍNDICE INTRODUCCIÓN...13
ÍNDICE INTRODUCCIÓN...13 CAPÍTULO 1. LENGUAJE ALGORÍTMICO...15 1.1 DEFINICIÓN DE ALGORITMO...16 1.2 LA ROTACIÓN DE UNA LISTA DE NÚMEROS NATURALES...20 1.3 CUESTIONES...23 1.3.1 Dos comerciales en el restaurante...23
ANÁLISIS Y DISEÑO DE ALGORITMOS. PRACTICAS
ANÁLISIS Y DISEÑO DE ALGORITMOS. PRACTICAS 2004-2005 PRACTICA 1: MEDICIÓN DEL TIEMPO. ALGORITMOS DE ORDENACIÓN Crear un conjunto de funciones que permitan la medición del tiempo de ejecución de los programas,
Análisis de Algoritmos
Análisis de Algoritmos IIC1253 IIC1253 Análisis de Algoritmos 1 / 36 Complejidad de un algoritmo Un algoritmo A puede ser pensado como una función A : {0,1} {0,1} Qué tan general es esta representación?
Ordenamiento (Sorting)
Ordenamiento (Sorting) El problema del ordenamiento Ordenar: arreglo[α] arreglo[α], donde α es un tipo tal que está definida la relación < α Uno de los problemas más clásicos, útiles y estudiados de la
ANÁLISIS Y DISEÑO DE ALGORITMOS
ANÁLISIS Y DISEÑO DE ALGORITMOS CURSO 2005/2006 BOLETÍN DE PROBLEMAS: DIVIDE Y VENCERÁS Ejercicio 1 Dado un vector ordenado y rotado k veces: diseñar un algoritmo O(log n) que encuentre el elemento mayor
Decrementa y vencerás II
Dr. Eduardo A. RODRÍGUEZ TELLO CINVESTAV-Tamaulipas 21 de febrero de 2018 Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Decrementa y vencerás II 21 de febrero de 2018 1 / 22 1 Decrementa y vencerás II Dr. Eduardo
Examen de Estructuras de Datos y Algoritmos. (Modelo 2)
Examen de Estructuras de Datos y Algoritmos (Modelo 2) 17 de junio de 2009 1. Se dispone de una tabla hash de tamaño 12 con direccionamiento abierto y sondeo cuadrático. Utilizando como función hash la
Examen de Estructuras de Datos y Algoritmos. (Modelo 1)
Examen de Estructuras de Datos y Algoritmos (Modelo 1) 17 de junio de 2009 1. Qué rotación se necesita para transformar el árbol de la figura en un árbol AVL? a) Rotación simple izquierda-izquierda b)
IN34A - Optimización
IN34A - Optimización Complejidad Leonardo López H. [email protected] Primavera 2008 1 / 33 Contenidos Problemas y Procedimientos de solución Problemas de optimización v/s problemas de decisión Métodos,
Ecuaciones de recurrencia. Abraham Sánchez López FCC/BUAP Grupo MOVIS
Ecuaciones de recurrencia Abraham Sánchez López FCC/BUAP Grupo MOVIS Introducción, I Cuando se analiza la complejidad de un algoritmo recursivo, es frecuente que aparezcan funciones de costo también recursivas,
Divide & Conquer. Herman Schinca. Clase de Junio de 2011
Divide & Conquer Herman Schinca Clase 20 7 de Junio de 2011 Divide y vencerás Idea aplicable a muchas situaciones de la vida. Origen histórico atribuído a Julio César en relación a sus estrategias militares.
Programa de teoría. Algoritmos y Estructuras de Datos II. 3. Algoritmos voraces. 1. Análisis de algoritmos 2. Divide y vencerás
Programa de teoría Algoritmos y Estructuras de Datos II 1. Análisis de algoritmos 2. Divide y vencerás 3. Algoritmos voraces 4. Programación dinámica 5. Backtracking 6. Ramificación y poda A.E.D. II 1
Búsqueda en espacio de estados
Búsqueda en espacio de estados Departamento de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Inteligencia Artificial CCIA, US Búsqueda en espacio de estados IA 1 / 35 Metodología
Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 4: Ordenación. Prof. Montserrat Serrano Montero
Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 4: Ordenación Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Elección de un método Métodos directos
Esquema de Dividir y Vencer
Esquema de Dividir y Vencer Amalia Duch Barcelona, marzo de 2006 Índice 1. Esquema general 1 2. Búsqueda binaria (binary search) 2 3. Ordenación por fusión (merge sort) 2 4. Ordenación rápida (quick sort)
Tema 2 Fundamentos de Complejidad Algorítmica
Tema 2 Fundamentos de Complejidad Algorítmica Pablo Sánchez Dpto. Matemáticas, Estadística y Computación Universidad de Cantabria Santander (Cantabria, España) [email protected] Pablo Sánchez (MATESCO)
Estrategias de Diseño de Algoritmos
Estrategias de Diseño de Algoritmos Introducción A través de los años, los científicos de la computación han identificado diversas técnicas generales que a menudo producen algorit mos eficientes para la
Algoritmos y Complejidad
Algoritmos y Complejidad Algoritmos dividir y conquistar Pablo R. Fillottrani Depto. Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre 2014 Algoritmos dividir y conquistar
Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos
Estructura de Datos y Algoritmos Algoritmos Iterativos de Búsqueda y Ordenación y sus tiempos 1. Algorimos de ordenación Discutiremos el problema de ordenar un array de elementos. A los efectos de simplificar
cc3001 Métodos Matemáticos
cc3001 Métodos Matemáticos Patricio Poblete Otoño 2012 Patricio Poblete () cc3001 Métodos Matemáticos Otoño 2012 1 / 17 Funciones discretas Para estudiar la eciencia de los algoritmos, generalmente usamos
Paralelización de problemas de recorrido de árboles Trabajadores replicados y esquema maestro esclavo
Metodología de la Programación Paralela 2015-2016 Facultad Informática, Universidad de Murcia Esquemas algorítmicos paralelos: Paralelización de problemas de recorrido de árboles Trabajadores replicados
Recurrencias y cómo resolverlas
Recurrencias y cómo resolverlas Algoritmos y Estructuras de Datos II Departamento de Computación, Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires 8 de septiembre de 2017 Algo2 (DC-FCEyN-UBA)
Tema: Programación Dinámica.
Programación IV. Guía 11 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Tema: Programación Dinámica. Objetivos Específicos Definir el concepto de programación dinámica. Interpretar
Backtracking: Esquema General
Backtracking Idea: Técnica para recorrer sistemáticamente todas las posibles configuraciones de un espacio asociado a soluciones candidatos de un problema computacional. Se puede pensar este espacio tiene
Divide y Vencerás Programación Dinámica
Metodología de la Programación Paralela Facultad Informática, Universidad de Murcia Esquemas algorítmicos paralelos: Divide y Vencerás Programación Dinámica Domingo Giménez (Universidad de Murcia) 1 /
3. DISEÑO DE ALGORITMOS PARALELOS Y DISTRIBUIDOS
3. DISEÑO DE ALGORITMOS PARALELOS Y DISTRIBUIDOS Uno de los ingredientes más importantes para el procesamiento paralelo son sin duda los algoritmos paralelos que tienen un considerable interés en su desarrollo.
Programación II. Mario Aldea Rivas Programación II 04/04/11 1. Mario Aldea Rivas Programación II 04/04/11 2
Programación II Bloque temático 1. Lenguajes de programación Bloque temático 2. Metodología de programación Bloque temático 3. Esquemas algorítmicos Tema 5. Algoritmos voraces, heurísticos y aproximados
4.2. El número de combinaciones de m objetos entre un conjunto de n, denotado por n, para n 1 y 0 m n, se puede definir recursivamente por: m
4.1. Aplicar el algoritmo de programación dinámica para el problema del cambio de monedas sobre el siguiente ejemplo: n = 3, P = 9, c = (1, 3, 4). Qué ocurre si multiplicamos P y c por un valor constante,
Tema: Programación Dinámica.
Programación IV. Guía No. 12 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Tema: Programación Dinámica. Objetivos Específicos Definir el concepto de programación dinámica. Interpretar
PARTE II: ALGORÍTMICA
Programa de teoría Parte I. Estructuras de Datos.. Abstracciones y especificaciones.. Conjuntos y diccionarios. 3. Representación de conjuntos mediante árboles.. Grafos. Parte II. Algorítmica.. Análisis
Paralelismo en la ordenación por mezcla
Paralelismo en la ordenación por mezcla Índice MergeSort secuencial. MergeSort paralelo : descomposición en tareas. Descomposición funcional. Descomposición recursiva. Descomposición de dominio. Grafo
Luis Rodríguez Baena Universidad Pontificia de Salamanca Escuela Superior de Ingeniería y Arquitectura
Fundamentos de Programación II Tema 3. Recursividad Luis Rodríguez Baena ([email protected]) Universidad Pontificia de Salamanca Escuela Superior de Ingeniería y Arquitectura Naturaleza de la recursividad
Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos
Estructura de Datos y Algoritmos Algoritmos Recursivos de Búsqueda y Ordenación y sus tiempos 1. Algoritmos de ordenación recursivos 1.1. Mergesort, Ordenamiento por fusión Mergesort se ejecuta en un tiempo
Ampliación de Algoritmos y Estructura de Datos Curso 02/03. Ejercicios
272. En un problema determinado, una solución está dada por una tupla de n elementos (x, x 2,..., x n ). Para cada elemento existen en total m posibles valores. Comparar el número de nodos generados para
Algoritmos y Estructuras de Datos Curso 04/05. Ejercicios
0. En un problema determinado, una solución está dada por una tupla de n elementos (x, x,..., x n ). Para cada elemento existen en total m posibles valores. Comparar el número de nodos generados para resolver
Para las ecuaciones diferenciales ordinarias no lineales no existen métodos generales.
Unidad IV: Sistemas continuos (continuación) Objetivo específico: Entender ampliamente el fenómeno del comportamiento de los modelos matemáticos para la resolución de problemas enfocados a las ecuaciones
Resolviendo Recurrencias
Resolviendo Recurrencias Mauro Jaskelioff 16/03/2015 Análisis de Algoritmos Queremos poder evaluar la performance de algoritmos. Para esto utilizamos Notación Asintótica Modelo de Costo basado en Lenguaje
Divide y vencerás. Dr. Eduardo A. RODRÍGUEZ TELLO. 7 de marzo de CINVESTAV-Tamaulipas
Dr. Eduardo A. RODRÍGUEZ TELLO CINVESTAV-Tamaulipas 7 de marzo de 2018 Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Divide y vencerás 7 de marzo de 2018 1 / 50 1 Divide y vencerás Dr. Eduardo RODRÍGUEZ T. (CINVESTAV)
Programación Dinámica 1
Programación Dinámica 1 El método de programación dinámica sirve para resolver problemas combinando las soluciones de subproblemas. Normalmente es usada para resolver problemas de optimización. Al construir
La transformada rápida de Fourier (FFT) y otros algoritmos para la implementación de la DFT
1 La transformada rápida de Fourier (FFT) y otros algoritmos para la implementación de la DFT Existen diversas formas de implementar la transformada discreta de Fourier (DFT). Para estudiar algunas de
1. Método general. 2. Análisis de tiempos de ejecución. 3. Ejemplos de aplicación Problema de las 8 reinas Problema de la mochila 0/1.
Backtracking. Método general. 2. Análisis de tiempos de ejecución. 3. Ejemplos de aplicación. 3.. Problema de las 8 reinas. 3.2. Problema de la mochila 0/. Método general El backtracking (método de retroceso
CI2612: Algoritmos y Estructuras de Datos II. Recurrencias y el principio de dividir y conquistar. Recurrencias. Objetivos.
CI2612: Algoritmos y Estructuras de Datos II Blai Bonet Universidad Simón Boĺıvar, Caracas, Venezuela Recurrencias y el principio de dividir y conquistar Objetivos Recurrencias Repasar los conceptos de
Estructura de datos y de la información Boletín de problemas - Tema 9
Estructura de datos y de la información Boletín de problemas - Tema 9 1. Dada la siguiente función recursiva: void F(char c) { if (( A
Introducción a la recursividad. Diseño y Análisis de Algoritmos
Diseño y Análisis de Algoritmos Contenidos Contenidos 1 Introducción 2 Ejemplos 3 Problemas variados 4 Problemas combinatorios URJC DAA 2 / 52 Introducción Introducción URJC DAA 3 / 52 Introducción Qué
3. Técnicas de diseño de algoritmos
3. Técnicas de diseño de algoritmos 1. Métodos Generales de Soluciones de Problemas 2. Técnicas de diseño de algoritmos 1. ecursividad básica 2. Divide y vencerás 3. Backtracking Bibliografía Aho, Hopcroft
Búsqueda en espacio de estados
Búsqueda en espacio de estados Departamento de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla Abstracción Problema Representación como espacio de estados Implementación del
Divide y vencerás. Diseño y Análisis de Algoritmos
Diseño y Análisis de Algoritmos Contenidos Contenidos 1 Introducción 2 Transforma y vencerás 3 Decrementa y vencerás 4 URJC DAA 2 / 54 Introducción Introducción URJC DAA 3 / 54 Introducción Uno de los
Taller de Programación Dinámica. Definiciones. Caso base. Laboratorio de Algoritmos y Estructuras de Datos III. 10 de Septiembre de 2010
Menú del día Taller de 1 Definiciones Laboratorio de Algoritmos y Estructuras de Datos III Departamento de Computación Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires 10 de Septiembre
MATEMÁTICAS 5. º CURSO UNIDAD 1: SISTEMAS DE NUMERACIÓN
MATEMÁTICAS 5. º CURSO UNIDAD 1: SISTEMAS DE NUMERACIÓN OBJETIVOS Conocer los cuatro primeros órdenes de unidades y las equivalencias entre ellos. Leer, escribir y descomponer números de hasta cuatro cifras.
ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACIÓN SYLLABUS DEL CURSO Análisis de Algoritmos
1. CÓDIGO Y NÚMERO DE CRÉDITOS ESCUELA SUPERIOR POLITÉCNICA DEL LITORAL FACULTAD DE INGENIERÍA EN ELECTRICIDAD Y COMPUTACIÓN SYLLABUS DEL CURSO Análisis de Algoritmos CÓDIGO FIEC04366 NÚMERO DE CRÉDITOS:
Programación Dinámica
Programación Dinámica Agustín Santiago Gutiérrez Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Septiembre 2014 Agustín Gutiérrez (UBA) Programación Dinámica Septiembre 2014 1 / 10
TEMA 1: Algoritmos y programas
TEMA 1: Algoritmos y programas 1.1.-Introducción La razón principal para utilizar un ordenador es para resolver problemas (en el sentido más general de la palabra), o en otras palabras, procesar información
Tema 3.2: Eficiencia de algoritmos recursivos. Diseño y Análisis de Algoritmos
Diseño y Análisis de Algoritmos Contenidos Contenidos 1 Introducción 2 3 Método general para resolución de relaciones de recurrencia URJC DAA 2 / 37 Introducción Análisis de algoritmos recursivos La matemática
Notación Asintótica. Temas. Introducción Notación O Notación Omega Notación Theta. Análisis de Algoritmos
Notación Asintótica Análisis de Algoritmos Temas Introducción Notación O Notación Omega Notación Theta 1 Introducción Por qué el análisis de algoritmos? Determinar tiempos de respuesta (runtime) Determinar
Capitulo 2 La técnica Divide y Vencerás
Capitulo 2 La técnica Divide y Vencerás Introducción Divide y Vencerás es una técnica para diseñar algoritmos que consiste en descomponer el caso del problema que queremos resolver en un número de subproblemas
Algoritmos de Ordenamiento
Algoritmos de Ordenamiento Límite inferior y Alg. Lineales Andrés Becerra Sandoval Ponticia Universidad Javeriana 14 de julio de 2007 Lenguajes III Introducción Algoritmo Complejidad Bubble(burbuja) Θ(n
