Análisis de algoritmos
|
|
|
- Montserrat Herrero Vázquez
- hace 9 años
- Vistas:
Transcripción
1 Tema 09: Programación dinámica Solicitado: Ejercicios 06: Programación dinámica de Fibonacci y Coeficientes Binomiales M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom 1
2 Contenido Introducción Programación dinámica Enfoques de la programación dinámica Principio de optimalidad Diseño de un algoritmo de programación dinámica Ejemplos Fibonacci Cálculo del coeficiente binomial Ejercicios 06: Programación dinámica de Fibonacci y Coeficientes Binomiales 2
3 Introducción La técnica divide y vencerás señala que es posible dividir un problema en subproblemas y combinar las soluciones para resolver el problema original. En ocasiones resolver subproblemas nos lleva a considerar subproblemas idénticos. Si aprovechamos la duplicación, resolviendo cada problema una sola vez, guardando la solución para su uso posterior entonces tendremos un algoritmo más eficiente. 3
4 La idea de la programación dinámica es evitar repetición de cálculos. La base de la programación dinámica es el razonamiento inductivo: Como resolver un problema combinando soluciones para problemas más pequeños? Se resuelven primero los subproblemas más pequeños y por tanto más simples. Combinando las soluciones se obtienen las soluciones de ejemplares sucesivamente más grandes hasta llegar al ejemplar original. 4
5 Programación dinámica La programación dinámica es un método para reducir el tiempo de ejecución de un algoritmo mediante la utilización de subproblemas superpuestos y subestructuras óptimas. Una subestructura óptima significa que se pueden usar soluciones óptimas de subproblemas para encontrar la solución óptima del problema en su conjunto. Un problema tiene subproblemas superpuestos si se usa un mismo subproblema para resolver diferentes problemas mayores. 5
6 Los algoritmos divide y vencerás están dentro de los métodos descendentes. Empezar con el problema original y descomponerlo en pasos sucesivos en problemas de menor tamaño. La programación dinámica por el contrario, es un método ascendente: Resolver primero los problemas pequeños (guardando las soluciones) y después combinarlas para resolver problemas más grandes. La programación dinámica hace uso de: Subproblemas superpuestos Subestructuras óptimas Memoizacion 6
7 En general, se pueden resolver problemas con subestructuras óptimas siguiendo estos tres pasos: 1. Dividir el problema en subproblemas más pequeños. 2. Resolver estos problemas de manera óptima usando este proceso de tres pasos recursivamente. 3. Usar estas soluciones óptimas para construir una solución óptima al problema original. Los subproblemas se resuelven a su vez dividiéndolos en subproblemas más pequeños hasta que se alcance el caso fácil, donde la solución al problema es trivial. 7
8 Los subproblemas superpuestos provocan resolver varias veces el mismo problema, ya que la solución de un subproblema requiere calcular soluciones que otro subproblema también tenga que calcular. Perder tiempo calculando varias veces la solución al mismo subproblema se puede evitar guardando las soluciones que ya hemos calculado. Entonces, si necesitamos resolver el mismo problema más tarde, podemos obtener la solución de la lista de soluciones calculadas y reutilizarla. Este acercamiento al problema se llama memoización (no confundir con memorización; en inglés es llamado memoization). En programación dinámica comúnmente se utilizan tablas de resultados conocidos que se va generando a medida que se resuelven los subcasos. 8
9 Originalmente, el término de programación dinámica se refería a la resolución de ciertos problemas y operaciones fuera del ámbito de la Ingeniería Informática, al igual que hacía la programación lineal. Aquel contexto no tiene relación con la programación en absoluto; el nombre es una coincidencia. El término también lo usó en los años 40 Richard Bellman, un matemático norteamericano, para describir el proceso de resolución de problemas donde hace falta calcular la mejor solución consecutivamente. Algunos lenguajes de programación funcionales, sobre todo Haskell, pueden usar la memorización automáticamente sobre funciones con un conjunto concreto de argumentos, para acelerar su proceso de evaluación. Esto sólo es posible en funciones que no tengan efectos secundarios. 9
10 Donde tiene mayor aplicación la Programación Dinámica es en la resolución de problemas de optimización. En este tipo de problemas se pueden presentar distintas soluciones, cada una con un valor, y lo que se desea es encontrar la solución de valor óptimo (máximo o mínimo). La solución de problemas mediante esta técnica se basa en el llamado principio de óptimo enunciado por Bellman en 1957 y que dice: En una secuencia de decisiones óptima toda subsecuencia ha de ser también óptima. 10
11 Enfoques de la programación dinámica Top-down: El problema se divide en subproblemas, y estos se resuelven recordando las soluciones por si fueran necesarias nuevamente. Es una combinación de memoización y recursión. Bottom-up: Todos los problemas que puedan ser necesarios se resuelven de antemano y después se usan para resolver las soluciones a problemas mayores. Este enfoque es ligeramente mejor en consumo de espacio y llamadas a funciones, pero a veces resulta poco intuitivo encontrar todos los subproblemas necesarios para resolver un problema dado. 11
12 Principio de optimalidad Cuando hablamos de optimizar nos referimos a buscar alguna de las mejores soluciones de entre muchas alternativas posibles. Dicho proceso de optimización puede ser visto como una secuencia de decisiones que nos proporcionan la solución correcta. En este caso sigue siendo posible el ir tomando decisiones elementales, en la confianza de que la combinación de ellas seguirá siendo óptima, pero será entonces necesario explorar muchas secuencias de decisiones para dar con la correcta, siendo aquí donde interviene la programación dinámica. 12
13 En una secuencia de decisiones óptima toda subsecuencia ha de ser también óptima Contemplar un problema como una secuencia de decisiones equivale a dividirlo en problemas más pequeños y por lo tanto más fáciles de resolver como hacemos en Divide y Vencerás. La programación dinámica se aplica cuando la subdivisión de un problema conduce a: Una enorme cantidad de problemas. Problemas cuyas soluciones parciales se solapan. Grupos de problemas de muy distinta complejidad. 13
14 Diseño de un algoritmo de programación dinámica Para que un problema pueda ser abordado por esta técnica ha de cumplir dos condiciones: La solución al problema ha de ser alcanzada a través de una secuencia de decisiones, una en cada etapa. Dicha secuencia de decisiones ha de cumplir el principio de optimalizad. 14
15 El diseño de un algoritmo de Programación Dinámica consta de los siguientes pasos: 1. Planteamiento de la solución como una sucesión de decisiones y verificación de que ésta cumple el principio de óptimo. 2. Definición recursiva de la solución. 3. Cálculo del valor de la solución óptima mediante una estructura de datos en donde se almacenan soluciones a problemas parciales para reutilizar los cálculos. 4. Construcción de la solución óptima haciendo uso de la información contenida en la estructura de datos. 15
16 Fibonacci Ο(c n ) 16
17 Si se llama a fib(5), se produce un árbol de llamadas que contendrá funciones con los mismos parámetros varias veces: 1. fib(5) 2. fib(4) + fib(3) 3. (fib(3) + fib(2)) + (fib(2) + fib(1)) 4. ((fib(2) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1)) 5. (((fib(1) + fib(0)) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1)) En particular, fib(2) se calcula dos veces. En ejemplos mayores, se recalculan muchos otros valores de fib, o subproblemas. Para evitar este inconveniente, se puede resolver el problema mediante programación dinámica, y en particular, utilizando el enfoque de memorización (guardar los valores que ya han sido calculados para utilizarlos posteriormente). Así, rellenaríamos una tabla con los resultados de los distintos subproblemas, para reutilizarlos cuando haga falta en lugar de volver a calcularlos. La tabla resultante sería una tabla unidimensional con los resultados desde 0 hasta n. 17
18 Fibonacci utilizando (Programación dinámica - Buttom-up) int fibonacci(int n) { int i; if (n<2) { return n; } else { tabla[0] = 0; tabla[1] = 1; for(i = 2; i < n; i++) tabla[i] = tabla[i-1] + tabla[i-2]; } return tabla[n-1]; } Ο(n) 18
19 Fibonacci utilizando (Programación dinámica -Top-down) int tabla[n]; // tabla {-1,-1,,-1} int fibonacci(int n) { if (n<2) return n; if(tabla[n-1] == -1) tabla[n-1] = fibonacci(n-1); Ο(n) if(tabla[n-2] == -1) tabla[n-2] = fibonacci(n-2); tabla[n] = tabla[n-1] + tabla[n-2]; return tabla[n]; } 19
20 Cálculo del coeficiente binomial Los coeficientes binomiales o números combinatorios son una serie de números estudiados en combinatoria que indican el número de formas en que se pueden extraer subconjuntos a partir de un conjunto dado. Sin embargo, dependiendo del enfoque que tenga la exposición, se suelen usar otras definiciones equivalentes. P.g. Se tiene un conjunto con 6 objetos diferentes {A,B,C,D,E,F}, de los cuales se desea escoger 2 (sin importar el orden de elección). Cuántas formas de elección existen? A,B A,C A,D A,E A,F B,C B,D B,E B,F C,D C,E C,F D,E D,F E,F 20
21 El número de formas de escoger k elementos a partir de un conjunto de n, puede denotarse de varias formas: C (n, k), n C k C(6,2) = 15 Los números C(n,k) se conocen como coeficientes binomiales, pero es frecuente referirse a ellos como combinaciones de n en k, o simplemente n en k. n El coeficiente binomial es el número de subconjuntos k de k elementos escogidos de un conjunto con n elementos El coeficiente binomial n k n k = n! k! n k! está dado por la fórmula 21
22 Forma recursiva del coeficiente binomial n k = 1 n 1 k 1 + n 1 k 0 si k = 0 o k = n si 0 < k < n en caso contrario Si se desea calcular C(5,3), Cuáles son los casos que se repiten? funcion C(n,k) { Si k = 0 o k = n entonces devolver 1 sino si 0 < k< n devolver C(n-1,k-1) + C(n-1,k) sino devolver 0 } 22
23 El algoritmo recursivo que los calcula resulta ser de complejidad exponencial por la repetición de los cálculos que realiza. No obstante, es posible diseñar un algoritmo con un tiempo de ejecución de orden O(nk) basado en la idea del Triángulo de Pascal. Para ello es necesario la creación de una tabla bidimensional en la que ir almacenando los valores intermedios que se utilizan posteriormente. 23
24 Se ira construyendo la tabla por filas de arriba hacia abajo y de izquierda a derecha mediante el siguiente algoritmo de complejidad polinómica (Bottom-up). int coef_bino(int n, int k) { int i, j; for(i = 0; i <= n; i++) tabla[i][0] = 1; for(i = 1; i<= n; i++) tabla[i][1] = i; for(i = 2; i<= k; i++) tabla[i][i] = 1; } for(i = 3; i <= n; i++) for(j = 2; j <= i-1; j++) if(j <= k) tabla[i][j] = tabla[i-1][j-1] + tabla[i-1][j]; return tabla[n][k]; 24
25 Resultado Triangulo de Pascal 25
26 Ejercicios 06: Programación dinámica de Fibonacci y Coeficientes Binomiales Entender e implementar los algoritmos basados en programación dinámica de Fibonacci (top down y botton up) y de coeficientes binomiales. Describir de manera detallada los algoritmos y su implementación. *Se entregará antes del día Martes 23 de Junio de 2015 (23:59:59 hora limite). *Incluir la redacción de cada ejercicio *Portada y encabezados de pagina *Enviar códigos y documento en un archivo comprimido 26 1.
Análisis de algoritmos
Tema 09: Programación dinámica M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom 1 Contenido Introducción Programación dinámica Enfoques de
Teoría y Complejidad Algorítmica
Teoría y Complejidad Algorítmica Practica 3 Eduardo Viciana Gámez Contiene documentación y código fuente de la práctica 2 Descripción de la Práctica En esta práctica se van a comparar dos algoritmos que
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
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
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
Programación Dinámica
Programación Dinámica Adaptado de Algorithm Design Goodrich and Tamassia Programación Dinámica 1 Calculando la serie de Fibonacci 1,1,2,3,5,8,13,21,. fib(n) = 1 si n = 0,1 fib(n 1) + fib(n 2) o.c. Programación
Programación Dinámica
Programación Dinámica Es aplicada típicamente a problemas de optimización, donde puede haber muchas soluciones, cada una tiene un valor asociado y prentendemos obtener la solución con valor óptimo. Al
Programación Dinámica
Leopoldo Taravilse Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Training Camp 2012 Leopoldo Taravilse (UBA) TC 2012 1 / 34 Contenidos 1 Recursión Principio de Optimalidad Ejemplos
Programación dinámica
Algoritmos y Estructura de Datos III Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires 03 de Abril de 2013 Repaso Aplica a problemas de optimización donde obtenemos una solución utilizando
Tema 5- Diseño Recursivo y. Objetivos Principales. Bibliografía Básica
Tema 5- Diseño Recursivo y Eficiente Tema 5- Diseño Recursivo y Eficiente Germán Moltó Escuela Técnica Superior de Ingeniería Informática Universidad Politécnica de Valencia Índice general: 1. Introducción
Análisis de algoritmos. Recursividad
Análisis de algoritmos Recursividad 1 Matrushka La Matrushka es una artesanía tradicional rusa. Es una muñeca de madera que contiene otra muñeca más pequeña dentro de sí. Ésta muñeca, también contiene
Practica 04: Soluciones Recursivas
M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Problema Descripción Observaciones
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
Tema: Programación Dinámica.
1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Tema: Programación Dinámica. Objetivos Específicos Definir brevemente el concepto de programación dinámica. Interpretar un algoritmo
Tema 06: Recursividad
Tema 06: Recursividad M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom (Prof. Edgardo A. Franco) 1 Contenido Recursión Recursividad Programación
Recursividad... un análisis posterior. Aurelio Sanabria Introducción a la programación
Recursividad... un análisis posterior Aurelio Sanabria Introducción a la programación II semestre, 2016 Construyendo Programas Buscar soluciones a problemas (pensar en un algoritmo) requiere de una etapa
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
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
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
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
Programación Dinámica
Programación Dinámica La técnica de programación dinámica se aplica en general a problemas de optimización. l igual que "dividir y conquistar", el problema es dividido en subproblemas de tamaños menores
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
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,
Recursividad... un análisis posterior. Jaime Gutiérrez Alfaro Introducción a la programación
Recursividad... un análisis posterior Jaime Gutiérrez Alfaro Introducción a la programación I semestre, 2015 Agenda Introducción Cálculos por aproximación Tipos de recursión Concepto de error Depuración
Programación II Recursividad Dr. Mario Rossainz López
5. RECURSIVIDAD 5.1. Introducción La recursividad es una técnica en la que una función o método se hace llamadas a sí misma en el proceso de la realización de sus tareas. La recursividad da al programador
Diseño de algoritmos
Diseño de algoritmos Programación Dinámica Jesús Bermúdez de Andrés Universidad del País Vasco/Euskal Herriko Unibertsitatea (UPV/EHU) Curso 2008-09 1 Programación Dinámica Definición de la técnica Funciones
Tema 02: Algoritmia y pseudocódigo
M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Pseudocódigo Ejemplo 01 Ejemplo
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
Programación dinámica
Parte de Algoritmos de la asignatura de Programación Master de Bioinformática Programación dinámica Web asignatura: http://dis.um.es/~domingo/algbio.html E-mail profesor: [email protected] Transparencias preparadas
Practica 03: Eliminación Gaussiana
M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Introducción Ecuaciones lineales
Teoría de los Lenguajes de Programación Práctica curso Enunciado. Fernando López Ostenero y Ana García Serrano
Teoría de los Lenguajes de Programación Práctica curso 2015-2016 Enunciado Fernando López Ostenero y Ana García Serrano Sumario 1. Introducción: Skyline de una ciudad...3 2. Enunciado de la práctica...3
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
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.
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,
Análisis y Diseño de Algoritmos (AyDA) Isabel Besembel Carrera
Análisis y Diseño de Algoritmos (AyDA) Isabel Besembel Carrera Estrategia 5 Programación dinámica Técnica utilizada para eliminar el trabajo redundante almacenando en un área de memoria especial las soluciones
4.1 Definición. Se dice que algo es recursivo si se define en función de sí mismo o a sí mismo. Un objeto (problemas, estructuras de datos) es
Recursividad 4.1 Definición. Se dice que algo es recursivo si se define en función de sí mismo o a sí mismo. Un objeto (problemas, estructuras de datos) es recursivo si forma parte de sí mismo o interviene
Qué es la recursividad?
Recursividad 1 Ejemplo Matrushka La Matrushka es una artesanía tradicional rusa. Es una muñeca de madera que contiene otra muñeca más pequeña dentro de sí. Esta muñeca, también contiene otra muñeca dentro.
Análisis de algoritmos
Tema 05: no recursivos M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom 1 Contenido no recursivos La notación de Landau O La notación O Principio
1. PRINCIPIOS BÁSICOS DE PROGRAMACIÓN
1. PRINCIPIOS BÁSICOS DE PROGRAMACIÓN Las estructuras de datos bien definidas no son adecuadamente utilizadas si no se realiza una buena programación. La programación estructurada tiene la finalidad de
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: Funciones, Procedimientos y Recursividad en C#.
2 Programación I Programación I. Guía 6 3 Facultad: Ingeniería Escuela: Ingeniería en Computación Asignatura: Programación I Tema: Funciones, Procedimientos y Recursividad en C#. Objetivos Utilizar la
Análisis de algoritmos
Tema 03: Análisis temporal M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom 1 Contenido Caso de entrada Ejemplo 1 (Búsqueda lineal) Operación
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
Tema 10: Árbol binario de búsqueda
Tema 10: Árbol binario de búsqueda M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom (Prof. Edgardo A. Franco) 1 Contenido Árbol binario de
Análisis de algoritmos
Tema 02: Complejidad de los algoritmos M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom 1 Contenido Algoritmo Algoritmo vs. Proceso Computacional
Estructuras de Datos. Practica 06: Codificación de Huffman
M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom 1 Contenido Definición del problema Algoritmo de Huffman Pasos del código de Huffman Actividades
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
UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.
UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO. TRUJILLO Recursividad: La recursividad es una técnica de programación
Análisis de algoritmos
Tema 10: Algoritmos ávidos M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom 1 Contenido Introducción Algoritmos ávidos Forma general de un
Análisis de algoritmos
M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom 1 1. Encuentre el orden O de complejidad temporal y espacial del algoritmo de ordenamiento
Tema: Funciones, Procedimientos y Recursividad en C#.
Tema: Funciones, Procedimientos y Recursividad en C#. Objetivos Programación I, Guía 6 1 Utilizar la sintaxis de las funciones definidas por el usuario (programador) para resolver problemas. Identificar
Tema: Funciones, Procedimientos y Recursividad en C#.
Tema: Funciones, Procedimientos y Recursividad en C#. Objetivos Programación I, Guía 7 1 Facultad: Ingeniería Escuela: Ingeniería en Computación Asignatura: Programación I Utilizar la sintaxis de las funciones
Análisis de algoritmos
Tema 10: Algoritmos de empate de cadenas M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom 1 Contenido Introducción Empate de cadenas Fuerza
Análisis de algoritmos
Practica 03: Codificación voraz de Huffman M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom 1 Contenido Definición del problema Algoritmo
Practica 01: Evaluación de expresiones infijas
M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Definición del problema Actividades
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]
PROGRAMACION ESTRUCTURADA: Tema 3. Funciones
PROGRAMACION ESTRUCTURADA: Tema 3. Funciones Presenta: David Martínez Torres Universidad Tecnológica de la Mixteca Instituto de Computación Oficina No. 37 [email protected] Contenido 1. Definiciones
Tema 7: Recursividad
Tema 7: Recursividad Objetivos: en este tema estudiaremos funciones recursivas; esto es, funciones que se invocan a sí mismas. Estas funciones son equivalentes a estructuras tipo bucle pero permiten especificar
La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados.
RECURSIVIDAD La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados. Los algoritmos recursivos ofrecen soluciones estructuradas, modulares
Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015
Listas y Recursión Taller de Álgebra I Primer Cuatrimestre de 2015 Un nuevo tipo: Listas Tipo Lista Las listas pueden contener elementos de cualquier tipo (incluso listas) [1] :: [Integer] [1, 2] :: [Integer]
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
Algoritmos. Diseño de algoritmos por inducción. Alberto Valderruten. [email protected]. Dept. de Computación, Universidade da Coruña
Divide y Vencerás Diseño de algoritmos por inducción Dept. de Computación, Universidade da Coruña [email protected] Contenido Divide y Vencerás 1 Divide y Vencerás 2 Índice Divide y Vencerás 1
Programación I Recursividad.
Programación I Recursividad http://proguno.unsl.edu.ar [email protected] Recursividad Técnica de resolución de problemas particulares. La definición de un concepto es recursiva si el concepto es definido
Taller de Programación Dinámica
Taller de Programación Dinámica Pablo Haramburu - Cristian Martinez Departamento de Computación Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires 14 de abril de 2014 Pablo Haramburu
Jueves, 30 de abril. Ejemplo de recursión. Ejemplo de PD. Ejemplo de programación dinámica. Programación dinámica
.0 Jueves, 0 de abril Programación dinámica. Recursión. Principio de optimalidad. Entregas: material de clase. Programación dinámica Transforma un problema de optimización complejo en una secuencia problemas
Tema: Funciones, Procedimientos y Recursividad en C#.
Programación I, Guía 6 1 Tema: Funciones, Procedimientos y Recursividad en C#. Objetivos Utilizar la sintaxis de las funciones definidas por el usuario (programador) para resolver problemas. Identificar
Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE
Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Problema de Encontrar todos los Pares de Rutas más Cortas 2 Encontrar las rutas
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
Trabajo Práctico Nº 06
Tema: Recursividad 1. Dado el siguiente método: static int puzle (int base, int limite) if (base > limite) return -1; if (base = = limite) return base * puzle(base+1,limite); 1.1 Identificar: a) el caso(s)
Programación 2. Lección 3. Introducción a la recursividad
Programación 2 Lección 3. Introducción a la recursividad 1 1. Definiciones recursivas Número natural y número entero Múltiplos de 7 Secuencia de datos Factorial de un número natural Sucesión de Fibonacci
Practica 03: Uso de expresiones regulares en Python
Practica 03: Uso de expresiones regulares en Python Entrega vía Web: Domingo 08 de Septiembre de 2013 M. en C. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco @efranco_escom
Tema 18: Memoria dinámica y su uso en C
Tema 18: Memoria dinámica y su uso en C M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1
Análisis de algoritmos
Demostración laboratorio: Martes 14 de Julio de 2015 Entrega vía Web: Domingo 19 de Julio de 2015 Demostración laboratorio y Entrega vía Web (Extraordinario): Martes 21 de Julio de 2015 M. en C. Edgardo
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
Practica 02: Simulaciones con el TAD Cola
M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Definición del problema Simulación
Algoritmos glotones. mat-151
Algoritmos glotones (greedy) mat-151 Alonso Ramirez Manzanares Computación y Algoritmos 04.06.2009 Algoritmos glotones Algoritmos utilizados en problemas de optimización. Estos algoritmos siguen típicamente
Clase 16: GLC s recursivas y no factorizadas Solicitado: Ejercicios 13: Recursividad y factorización de gramáticas
Clase 16: GLC s recursivas y no factorizadas Solicitado: Ejercicios 13: Recursividad y factorización de gramáticas M. en C. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco @efranco_escom
Geometría. Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires. Training Camp 2012
Geometría Leopoldo Taravilse Francisco Roslán Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Training Camp 2012 Leopoldo Taravilse, Francisco Roslán (UBA) Geometría TC 2012 1 / 30
Resolución de Problemas y Algoritmos Segundo cuatrimestre 2015 Clase 11: Construcción de primitivas (Funciones)
Resolución de Problemas y Algoritmos Segundo cuatrimestre 2015 Clase 11: Construcción de primitivas (Funciones) Dr. Sergio A. Gómez http://cs.uns.edu.ar/~sag Departamento de Ciencias e Ingeniería de la
Tema 14: Arreglos estáticos en C
Tema 14: Arreglos estáticos en C Solicitado: Ejercicios 05: Ejercicios con arreglos estáticos unidimensionales M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom
Análisis de algoritmos
Practica 04: Codificación voraz de Huffman Entrega vía Web: 05 de Julio de 2015 M. en C. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco @efranco_escom [email protected] 1 Contenido
Análisis de algoritmos
Practica 0 : Análisis temporal y notación de orden (Algoritmos de búsqueda) M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom Practica 0 :
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.
Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero
Universidad de Valladolid Departamento de informática Campus de Segovia Estructura de datos Tema 1: Recursividad Prof. Montserrat Serrano Montero ÍNDICE Conceptos básicos Ejemplos recursivos Recursividad
Técnicas de diseño de algoritmos Programación dinámica
Técnicas de diseño de algoritmos Programación dinámica 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]
Tema 05: Tablas hash. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom
Tema 05: Tablas hash M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom Estructuras de datos (Prof. Edgardo A. Franco) 1 Contenido Función
Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2
Estructuras de Datos y de la Información Ingeniería Técnica en Informática de Gestión. Curso 2007/2008 Ejercicios del Tema 2 Diseño de algoritmos recursivos 1. Dado un vector de enteros de longitud N,
