ALGORÍTMICA Ingeniería Técnica en Informática de Gestión y de Sistemas curso 2002-2003 Teoría: Domingo Giménez Seminario C: José María Rodríguez Prácticas.

Slides:



Advertisements
Presentaciones similares
Algoritmos y Programas
Advertisements

Complejidad Computacional
Complejidad Computacional
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Nuestro reto es educar al pensamiento, para que razone de acuerdo a ciertas reglas; con ello podremos ser más eficientes al momento en que ordenamos.
Estructura de Datos Hugo Araya Carrasco Hugo Araya Carrasco.
Complejidad Algorítmica: Análisis de algoritmos
Introducción a los Algoritmos
UNIDAD II: ALGORITMOS Y LENGUAJES
¿ Que es la complejidad de un algoritmo ?
Razonamiento Explícito y Experimentación en la Algoritmia
UNIVERSIDAD LATINA (UNILA) II.- ANALISIS DE ALGORITMOS
UNIVERSIDAD LATINA (UNILA) IV. IMPLANTACION DE ALGORITMOS.
Programación 1 Introducción
Ingeniería de sw.
Tema 3. Optimización de Código
Análisis de Sistemas Presentación de la asignatura.
Tema 6. Conceptos básicos de programación
Algoritmos y Estructuras de Datos I
Problemes de Viatjants
AED I. Estructuras de Datos.
Programación de Computadores
Ecuaciones de recurrencia
Análisis de Algoritmos
PROGRAMACIÓN PARALELA Tema 4: Metodología de la programación
Análisis de Algoritmos
Análisis y Diseño de Algoritmos. Propiedades : f ( n )  O ( f ( n ) ) a ) O ( f ( n ) )  O ( g ( n ) )  f ( n )  g ( n )
Fundamentos de programación
ALGORITMOS, CONCEPTOS BASICOS.
Introducción al análisis de algoritmos

Diseño y análisis de algoritmos
Parte II. Algorítmica. 3. Algoritmos voraces.
Fundamentos de programación Organización de una computadora.
Divide y vencerás 1. Método general.
UNIDAD 2. ALGORITMOS Y ESTRUCTURAS DE DATOS.
Capítulo 7 Gestión de memoria.
TECNOLOGÍA DE COMPUTADORES CURSO 2009/10. PRESENTACIÓN DE LA ASIGNATURA.
4.  Métodos matemáticos.
Parte II. Algorítmica. 5. Backtracking. 1. Análisis de algoritmos.
Parte II. Algorítmica. 4. Programación dinámica.
Algoritmos y Estructuras de Datos
Introducción a la Informática Ingeniero Técnico en Informática Gestión E.T.S. Ingeniería Informática Departamento de Lenguajes y Ciencias de la Computación.
Física I. Mecánica GRUPO 7
Parte I. Estructuras de Datos.
Análisis y Diseño de Algoritmos
Parte I. Estructuras de Datos.
Capítulo 6. ANÁLISIS DE ALGORITMOS
Análisis de Algoritmos
Tema 7: NOTACIONES ASINTÓTICAS
ALGORITMOS Y ESTRUCTURAS DE DATOS Ingeniería Técnica en Informática de Sistemas curso Teoría: Domingo Giménez, tutorías: L 9:30-10:30; M 10:00-12:30,
Parte I. Estructuras de Datos.
Introducción: Problemas, programas, estructuras y algoritmos
Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid Bloque 2: Divide y Vencerás Unidad 1: Nociones básicas.
Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos.
Programación II Anders Jonsson
Heap Fibonacci heap de Fibonacci es una estructura de datos similar a un heap binomial pero con mejor coste amortizado. se utiliza para mejorar el tiempo.
Elaboración de algoritmos usando lógica de programación
DISEÑAR Y ELABORAR ALGORITMOS Nombre: anayeli hernandez peralta Grado y grupo: 1 “3” Materia: Informática y computación Maestro: Ángel Buendía Turno: Vespertino.
DISEÑAR Y ELABORAR ALGORITMOS NOMBRE: LAURA PAEZ GARCIA GRADO Y GRUPO: 1 “3” MATERIA: INFORMÁTICA Y COMPUTACIÓN MAESTRO: ÁNGEL BUENDÍA TURNO: VESPERTINO.
Diagrama de Flujo Diagrama de flujo sencillo con los pasos a seguir si una lámpara no funciona. El diagrama de flujo o diagrama de actividades es la representación.
Conalep Coacalco Algoritmos Recursivos
Introducción a los TADs
UNIDAD 1 Introducción a la Programación OBJETIVO: El estudiante identificará los elementos Básicos de todo lenguaje de programación. Comparando las posibles.
75.41 Algoritmos y Programación II Cátedra Ing. Patricia Calvo Complejidad algorítmica.
Algoritmos.
Informática (34159) Presentación del curso Grado en Matemáticas
Presenta: Dr. Jorge Rodríguez Arce.
Prof. Jonathan Silva Ingeniería Civil – Informática I Ingeniería Civil Informática I Clase 3 – Diseño de Programas.
Transcripción de la presentación:

ALGORÍTMICA Ingeniería Técnica en Informática de Gestión y de Sistemas curso Teoría: Domingo Giménez Seminario C: José María Rodríguez Prácticas Gestión: Joaquín Cervera Prácticas Sistemas: Domingo Giménez

TEMARIO Valor en la puntuación final Análisis de algoritmos3 Diseño de algoritmos: Divide y vencerás2 Algoritmos voraces1 Programación Dinámica1 Backtracking2 Branch & Bound1

BIBLIOGRAFÍA Brassard, Bratley: Fundamentos de algoritmos. (estudio por paradigmas) Cormen, Leiserson, Rivest: Introduction to Algorithms. The MIT Press (estudio por problemas) Apuntes de la asignatura (estudio por paradigmas) en: servinf.dif.um.es/˜domingo También: enlaces a otros cursos, exámenes resueltos

PRÁCTICAS Seminario de C: octubre-noviembre laboratorio 1.2 lunes, jueves 11:30-13:30 Prácticas:laboratorio 1.2, martes 8:30-10:30 jueves 9:30-11:30 laboratorio 1.3, martes 16:30-18:30 martes 18:30-20:30 viernes 18:30-20:30

EVALUACIÓN Examen de teoría 7.5 (mínimo de 2.5 / 7.5) Prácticas 2.5 (mínimo de 1.25 / 2.5) En convocatoria de febrero se puede optar por: examen de teoría 5 (mínimo 1.75 / 5) prácticas 5 (mínimo 2.5 / 5) entregando las prácticas en los plazos establecidos, revisándolas y obteniendo evaluación positiva, no habría que examinarse de las partes correspondientes: divide y vencerás programación dinámica backtracking Se puede aprobar la teoría y la práctica por separado o quedar pendiente de prácticas (hasta septiembre de 2003).

Introducción: ALGORÍTMICA Estudia: ›Diseño de algoritmos: esquemas para resolver problemas. Divide y vencerás, avance rápido, programación dinámica, Backtracking, Branch & Bound ›Análisis de algoritmos: recursos necesarios para resolver el problema con el algoritmo elegido. Ocupación de memoria, tiempo de ejecución. De manera que se pueda decidir qué algoritmo es mejor para nuestro problema y entrada.

Introducción: ALGORITMO Conjunto de reglas para resolver un problema. Debe ser: ›Definible. En seudocódigo, pero pueda dar lugar a un programa. ›De un conjunto de datos de entrada producir unos datos de salida, en un número finito de pasos (tiempo de ejecución finito). Además debemos diseñar algoritmos eficientes: que el tiempo para acabar sea “razonable”. › Determinista si para la misma entrada produce siempre la misma salida. No determinista en caso contrario (redondeos, probabilistas, paralelos, …)

Introducción: PROGRAMACIÓN Problema real Modelo matemático Algoritmo en lenguaje natural Tipo abstracto de datos Programa en seudolenguaje Estructura de datos Programa ejecutable modelización Estructura de datos algorítmica programación

Estudio de algoritmos Se trata de diseñar algoritmos eficientes: que usan pocos recursos: ›memoria ›tiempo › otros (memoria secundaria, tiempo de programación, …) Para decidir: ›qué algoritmo programar ›qué algoritmo utilizar en resolver un problema para una cierta entrada › detectar fallo en programa que no funciona bien

Tiempo de ejecución Se intenta obtener el tiempo de ejecución para un cierto tamaño de entrada, t(n) Influyen factores externos al algoritmo: compilador, máquina, programador, …; por lo que normalmente se estudia la forma en que crece t(n), y se utilizan notaciones asintóticas: , O, , o Se cuenta el número de operaciones, o las de un cierto tipo, o cada operación afectada de un coste diferente Se estudian: Caso más favorable t m (n) Caso más desfavorable t M (n) Tiempo promedio t p (n)

Ej: Cálculo del factorial fact(n): si n=1 devolver 1 en otro caso devolver (fact(n-1)*n) tiempo: t(n)=t(n-1)+a=t(n-2)+2*a=... =t(1)+(n-1)*c memoria: m(n)=m(n-1)+c=m(n-2)+2*c=... =m(1)+(n-1)*c

Ej: Torres de Hanoi Hanoi(origen,destino,pivote,discos): si discos=1 moveruno(origen,destino) en otro caso Hanoi(origen,pivote,destino,discos-1) moveruno(origen,destino) Hanoi(pivote,destino,origen,discos-1)

Ej: Torres de Hanoi Número de movimientos: t(1)=1 t(n)=2t(n-1)+1, si n>1 Expandiendo la recurrencia: t(n) = 2 t(n-1) +1 = 2 (2t(n-2)+1) +1 = 2 2 t(n-2) +1+2 = 2 2 (2t(n-3)+1) +1+2 = 2 3 t(n-3) …. 2 n-1 t(1)+1+2+…+ 2 n-2 = 2 n -1

Tiempo promedio t p (n) =   S(n) t(  ) * p(  ) Conteo de instrucciones afectadas por probabilidad: Ej: búsqueda secuencial con centinela i=0 a[n+1]=x repetir i=i+1 hasta a[i]=x t p (n)=2+2*p/n+4*p/n+...+2*n*p/n+(2*n+2)*(1-p)= 2n+4-p(n+1)

Ej: Algoritmo de Euclides Calcular m.c.d(m,n), con m>n repetir r = resto(m/n) m = n n = r hasta r =0 mcd = m t(m,n) = a,si m múltiplo de n t(m,n) = b+t(n,resto(m/n)), si m no es múltiplo de n

Algoritmos - Estructuras GrafoMatriz de adyacenciaListas de adyacencia N N N N Memorian 2 n+a Inicializaciónn 2 n+a Grado salidangs(nodo) Grado entradann+a

Comparación de algoritmos 1.1fin=false 1.2mientras no fin 1.3fin=true 1.4para i=1,2,…n-1 1.5si x i >x i+1 1.6cambiar 1.7fin=false 2.1para i=1,2,…,n-1 2.2para j=i+1,…,n 2.3si x i >x j 2.4cambiar

1.1fin=false 1.2mientras no fin 1.3fin=true 1.4para i=1,2,…n-1 1.5si x i >x i+1 1.6cambiar 1.7fin=false Caso más favorable: Entrada 1,2,3,4: 1.1, 1.2, 1.3, 1.4 (i=1), (i=2), (i=3), (sale) 1.2 (sale) Total 11 instrucciones Entrada 1,2,…,n: 1.1, 1.2, 1.3, 1.4 (i=1), (i=2), 1.5 … 1.4 (i=n-1), (sale) 1.2 (sale) Total 2n+3 instrucciones

2.1para i=1,2,…,n-1 2.2para j=i+1,…,n 2.3si x i >x j 2.4cambiar Caso más favorable: Entrada 1,2,3,4: 2.1 (i=1), 2.2 (j=2), (j=3), (j=4), (sale) 2.1 (i=2), 2.2 (j=3), (j=4), (sale) 2.1 (i=3), 2.2 (j=4), (sale) 2.1 (sale) Total 19 instrucciones Entrada 1,2,…,n: 2.1 (i=1), 2.2 (j=2), 2.3 … 2.2 (j=n), (sale) 2.1 (i=2), 2.2 (j=3), 2.3 … 2.2 (j=n), (sale) … 2.1 (i=n-1), 2.2 (j=n), (sale) 2.1 (sale) Total n 2 +n-1 instrucciones

1.1fin=false 1.2mientras no fin 1.3fin=true 1.4para i=1,2,…n-1 1.5si x i >x i+1 1.6cambiar 1.7fin=false Caso más desfavorable: Entrada 4,3,2,1: 1.1, 1.2, 1.3, 1.4 (i=1), 1.5, 1.6 (3421), (i=2), 1.5, 1.6 (3241), (i=3), 1.5, 1.6 (3214), (sale) 1.2, 1.3, 1.4 (i=1), 1.5, 1.6 (2314), (i=2), 1.5, 1.6 (2134), (i=3), (sale) … ¿instrucciones?

2.1para i=1,2,…,n-1 2.2para j=i+1,…,n 2.3si x i >x j 2.4cambiar Caso más desfavorable: Entrada 4,3,2,1: 2.1 (i=1), 2.2 (j=2), 2.3, 2.4 (3421) 2.2 (j=3), 2.3, 2.4 (2431) 2.2 (j=4), 2.3, 2.4 (1432) 2.2 (sale) 2.1 (i=2), 2.2 (j=3), 2.3, 2.4 (1342) 2.2 (j=4), 2.3, 2.4 (1243) 2.2 (sale) 2.1 (i=3), 2.2 (j=4), 2.3, 2.4 (1234) 2.2 (sale) 2.1 (sale) ¿instrucciones?