Estructuras de Datos y Algoritmos. Curso 2009/2010. Tema 5: Algoritmos voraces

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Estructuras de Datos y Algoritmos. Curso 2009/2010. Tema 5: Algoritmos voraces"

Transcripción

1 Estructuras de Datos y Algoritmos Facultad de Informática Universidad Politécnica de Valencia Curso 2009/2010 Tema 5: Algoritmos voraces FI UPV: Curso 2009/2010

2 TEMA 5. Algoritmos voraces Objetivos Estudio de la técnica de diseño de algoritmos voraces. Estudio de algunos problemas clásicos. Otros ejemplos de algoritmos voraces se verán en el tema 6. Contenidos 1 Introducción. Ámbito de aplicación. Ejemplos. 2 El problema de la mochila con fraccionamiento. 3 Código Huffman. Bibliografía Introduction to Algorithms, de Cormen, Leiserson y Rivest (sección 17.2) Fundamentos de Algoritmia, de Brassard y Bratley (capítulo 6) Computer algorithms, de Horowitz, Sahni y Rajasekaran (capítulo 4) FI UPV: Curso 2009/2010 Página 5.1

3 1. INTRODUCCIÓN El esquema algorítmico de resolución voraz o avariciosa (greedy) se aplica normalmente a problemas de optimización: Búsqueda del valor óptimo (máximo o mínimo) de una cierta función objetivo f : X R en un dominio X determinado. El esquema voraz consiste en tratar de obtener un óptimo global tomando decisiones localmente óptimas. Es decir: Cada solución x del dominio X puede descomponerse en un conjunto de elementos más simples x = {x 1, x 2,..., x n } La estrategia voraz selecciona el valor de cada x i de manera irreversible, sin volver a replantearse la elección de los x 1,..., x i 1. Para ello elige el x i que resulte más prometedor de entre los que permiten seguir formando una solución factible. No siempre encuentra la solución óptima, pero en ocasiones permite encontrar una solución aproximada con un coste computacional bajo. FI UPV: Curso 2009/2010 Página 5.2

4 1. INTRODUCCIÓN Ejemplos Cajero automático: El desglose de una cantidad de dinero con el menor número posible de monedas y billetes. La mochila con fraccionamiento: La carga de un contenedor con diferentes materiales fraccionables que reportan beneficios distintos de modo que maximicemos el beneficio total sin exceder la cantidad máxima de carga. La asignación de un recurso único a una serie de actividades de las que se conoce el tiempo de inicio y finalización de modo que se atienda el mayor número de tareas. Código Huffman: Diseño de la codificación de un alfabeto de modo que se minimize la longitud esperada (en bits) de los mensajes. FI UPV: Curso 2009/2010 Página 5.3

5 1. INTRODUCCIÓN Ejemplos En el próximo tema veremos algunos algoritmos de grafos que utilizan una estrategia voraz, entre ellos: Los algoritmos de Kruskal y de Prim para el problema del recubrimiento mínimo en un grafo no dirigido, ponderado y conexo. El algoritmo de Dijkstra para el problema del camino más corto de un vértice a otro en un grafo ponderado. Existen algunos problemas que admiten solución aproximada aunque no óptima con una estrategia voraz, entre ellos: El coloreado de un grafo. El problema del viajante de comercio. FI UPV: Curso 2009/2010 Página 5.4

6 1. INTRODUCCIÓN Un ejemplo detallado Cajero automático: Suministrar la cantidad de billetes solicitada de forma que el n o total de billetes sea mínimo. Se supone que el cajero dispone de suficientes billetes de todas las cantidades consideradas. Ejemplo: M = 110 euros. B = {10, 20, 50} (11 billetes) (6 billetes) (3 billetes) La estrategia voraz consiste en ir seleccionando el billete de mayor valor: A veces no hay solución; p.e. si M = 30 y no hay billetes de 10 A veces no la encuentra; p.e. si M = 110 y no hay billetes de 10 A veces encuentra una factible pero no óptima; p.e. B = {100, 500, 1100, 50} y M = La solución que se obtendría es: (6 billetes) y la óptima es: (4 billetes) FI UPV: Curso 2009/2010 Página 5.5

7 1. INTRODUCCIÓN Esquema general voraz 1 // C Conjunto de elementos o candidatos 2 // S Conjunto de elementos de la solucion en curso 3 // solucion(s) Determina si S es solucion 4 // factible(s) Determina si S completable o factible 5 // seleccion(c) Selecciona un candidato 6 // f Funcion objetivo 7 voraz(c) { 8 S = cjt_vacio; 9 while (!solucion(s) && (C!= cjt_vacio)) { 10 x = selecciona(c); 11 C = C - {x}; 12 if (factible(unir(s,{x}))) 13 S = unir(s,{x}); 14 } 15 if (solucion(s)) 16 cout << "La solucion es " << S; 17 else 18 cout << "No hay solucion\n"; 19 } FI UPV: Curso 2009/2010 Página 5.6

8 2. LA MOCHILA CON FRACCIONAMIENTO Tenemos una mochila de capacidad M y N objetos para incluir en ella. Cada objeto tiene un peso p i y un beneficio b i, 1 i N. Los objetos se pueden fraccionar. Cómo llenar la mochila de forma que el beneficio total de los elementos que contenga sea máximo? Planteamiento del problema Datos del problema: capacidad M y N objetos de peso p 1,..., p N y beneficio b 1,..., b N Resultado: x 1,..., x N, donde 0 x i 1, 1 i N Maximizar el beneficio N i=1 b ix i con la restricción de que los objetos quepan en la mochila N i=1 p ix i M FI UPV: Curso 2009/2010 Página 5.7

9 2. LA MOCHILA CON FRACCIONAMIENTO Criterio de selección de los objetos: Objeto de mayor beneficio b i p = 30, 18, 15, 10, b = 25, 13, 12, 10 y M = 50 Step M C solución 50 {1, 2, 3, 4} {2, 3, 4} {3, 4} {4} 1 1 2/15 0 Beneficio = /15 12 = 39,6 FI UPV: Curso 2009/2010 Página 5.8

10 2. LA MOCHILA CON FRACCIONAMIENTO Criterio de selección de los objetos: Objeto de menor peso p i p = 30, 18, 15, 10, b = 25, 13, 12, 10 y M = 50 Step M C solución 50 {1, 2, 3, 4} {1, 2, 3} {1, 2} {1} / Beneficio = 7/ = 40,83 FI UPV: Curso 2009/2010 Página 5.9

11 2. LA MOCHILA CON FRACCIONAMIENTO Criterio de selección de los objetos: Objeto con mayor beneficio unitario b i /p i p = 30, 18, 15, 10, b = 25, 13, 12, 10 y M = 50 Step M C solución 50 {1, 2, 3, 4} {1, 2, 3} {2, 3} {2} /15 1 Beneficio = / = 42,99 FI UPV: Curso 2009/2010 Página 5.10

12 2. LA MOCHILA CON FRACCIONAMIENTO 1 using namespace std; 2 #include <iostream> 3 #include <queue> // cola de prioridad 4 class objeto { 5 public: 6 string nombre; 7 float peso, beneficio, bu; // bu = beneficio unitario 8 objeto() {}; // constructor 9 objeto(string nombre, float peso, float beneficio); // constructor 10 // al comparar dos objetos se comparan por beneficio unitario: 11 bool operator < (const objeto& b) const {return bu < b.bu;} 12 bool operator > (const objeto& b) const {return bu > b.bu;} 13 bool operator <= (const objeto& b) const {return bu <= b.bu;} 14 bool operator >= (const objeto& b) const {return bu >= b.bu;} 15 bool operator == (const objeto& b) const {return bu == b.bu;} 16 }; 17 objeto::objeto(string nombre, float peso, float beneficio) { 18 this->nombre = nombre; this->peso = peso; 19 this->beneficio = beneficio; bu = beneficio/peso; 20 } FI UPV: Curso 2009/2010 Página 5.11

13 2. LA MOCHILA CON FRACCIONAMIENTO 21 typedef priority_queue<objeto> cola_prioridad_objetos; 22 int main(int argc, char **argv) { // programa principal 23 cola_prioridad_objetos Q; 24 string nombre; 25 float capacidad_max,capacidad,beneficio,peso,gano,r; 26 objeto obj; 27 cin >> capacidad_max; // leemos los datos 28 while (cin >> nombre >> peso >> beneficio) 29 if (peso > 0) Q.push(objeto(nombre,peso,beneficio)); 30 gano = 0; capacidad = 0; 31 while ((capacidad < capacidad_max) && (Q.size() > 0)) { 32 obj = Q.top(); Q.pop(); // extraemos el de mayor b.u. 33 r = (capacidad_max - capacidad)/obj.peso; 34 if (r>1) r = 1; // como mucho el objeto entero 35 capacidad += r*obj.peso; 36 gano += r*obj.beneficio; 37 cout << "Meto " << r << " de " << obj.nombre << endl; 38 } 39 cout << "Ganancia = " << gano << endl; 40 } FI UPV: Curso 2009/2010 Página 5.12

14 Es un código binario de longitud variable. El objetivo consiste en representar los datos más frecuentes con el menor número de bits posibles. Se utiliza para compresión de información. Se trata de un algoritmo voraz Entrada: una tabla de frecuencias de aparición de los símbolos del alfabeto Σ. Salida: Un código binario prefijo. Un código binario es prefijo si ningún símbolo del alfabeto Σ está codificado con una secuencia de bits que es un prefijo de la secuencia de bits que codifica cualquier otro símbolo El conjunto de soluciones factibles es el conjunto de árboles binarios con Σ hojas, cada una de las cuales corresponde a un símbolo distinto del alfabeto. De entre todos ellos nos interesa el que hace mínimo el valor de f(t ) = a Σ d T (a) freq(a) donde d T (a) representa la profundidad del símbolo a en el árbol T y freq(a) es la frecuencia del símbolo a. FI UPV: Curso 2009/2010 Página 5.13

15 Supongamos que tenemos un fichero con caracteres. Carácter a b c d e Frecuencia (en miles) Código de longitud fija Código de longitud variable Número de bits utilizando el código de longitud fija: Número de bits utilizando el código de longitud varible: Código de longitud fija: bits bits Codificación aace Descodificación aace Código de longitud variable: Codificación aace Descodificación ? FI UPV: Curso 2009/2010 Página 5.14

16 Descodificación con código de longitud variable 0 A 1 B D d C b a 0 e 1 c A 1 D 1 a A 1 D 1 a A 0 B 1 C 1 c A 0 B 1 C 0 e FI UPV: Curso 2009/2010 Página 5.15

17 TRAZA EJEMPLO 30 a 25 b 15 c 20 d 10 e FI UPV: Curso 2009/2010 Página 5.16

18 TRAZA EJEMPLO 10 e 15 c 20 d 25 b 30 a FI UPV: Curso 2009/2010 Página 5.17

19 TRAZA EJEMPLO 20 d e 15 c 25 b 30 a FI UPV: Curso 2009/2010 Página 5.18

20 TRAZA EJEMPLO 25 b 30 a d e 15 c FI UPV: Curso 2009/2010 Página 5.19

21 TRAZA EJEMPLO d b 30 a e 15 c FI UPV: Curso 2009/2010 Página 5.20

22 TRAZA EJEMPLO d b 30 a 10 e 15 c FI UPV: Curso 2009/2010 Página 5.21

23 1 // Huffman, pseudocodigo 2 Crear un heap con n nodos (caracter, frecuencia); 3 4 for (i = 1; i < n; i++) { 5 Crear un nuevo nodo A; 6 Asignar el minimo del heap como hijo izquierda de A; 7 Eliminar el minimo del heap; 8 Asignar el minimo del heap como hijo derecha de A; 9 Eliminar el minimo del heap; 10 La clave de A es la suma de las claves de los hijos; 11 Insertar el nodo en el heap; 12 } 13 return unico elemento del heap; El coste computacional es O(n log n) FI UPV: Curso 2009/2010 Página 5.22

24 73 dic_cadena_cadena* huffman(dic_cadena_entero& entrada) { 74 dic_cadena_cadena *salida = new dic_cadena_cadena; 75 if (entrada.size() == 0) return salida; 76 cola_prioridad_nodos Q; pnodo uno,dos,tres,raiz; int iteracion = 1; 77 cout << "Metemos los simbolos en una cola de prioridad:\n"; 78 dic_cadena_entero::iterator i; 79 for (i = entrada.begin(); i!= entrada.end(); i++) { 80 uno = pnodo(new nodo(i->first, i->second)); 81 Q.push(uno); cout << "Inserto " << uno << endl; 82 } 83 while (Q.size() > 1) { 84 cout<<"\niteracion "<<iteracion<< "\n \n";iteracion++; 85 uno = Q.top(); Q.pop(); cout << "Extraigo " << uno << endl; 86 dos = Q.top(); Q.pop(); cout << "Extraigo " << dos << endl; 87 tres=pnodo(new nodo(uno,dos)); 88 Q.push(tres);cout<<"Inserto "<<tres<<endl; 89 } 90 raiz = Q.top(); raiz.n->recorrido_extraccion(string(""),salida); 91 raiz.n->recorrido_liberar(); delete raiz.n; 92 return salida; 93 } FI UPV: Curso 2009/2010 Página 5.23

25 13 typedef map<string,string> dic_cadena_cadena; 14 typedef map<string,int> dic_cadena_entero; 15 class nodo { 16 public: 17 string simbolo; 18 int freq; 19 nodo *h_izq, *h_der; 20 nodo(string simbolo, int freq); // constructor para una hoja 21 nodo(nodo *x, nodo *y); // constructor que junta 2 nodos 22 void recorrido_extraccion(string prefijo, dic_cadena_cadena* dic); 23 void recorrido_liberar(); // para liberar la memoria al final 24 void recorrido_imprimir(ostream &s); // para una traza del algoritmo 25 }; 26 nodo::nodo(string simbolo, int freq) { // constructor para una hoja 27 this->simbolo = simbolo; this->freq = freq; h_izq = h_der = 0; 28 } 29 nodo::nodo(nodo *x, nodo *y) { // constructor que junta 2 nodos 30 simbolo = string(""); // no hace falta, no se utiliza 31 freq = x->freq + y->freq; h_izq = x; h_der = y; 32 } FI UPV: Curso 2009/2010 Página 5.24

26 33 void nodo::recorrido_extraccion(string prefijo, dic_cadena_cadena* dic) { 34 if (h_izq == 0) // es una hoja, caso base 35 (*dic)[simbolo] = prefijo; 36 else { // necesariamente tiene los 2 hijos 37 h_izq->recorrido_extraccion(prefijo+"0",dic); 38 h_der->recorrido_extraccion(prefijo+"1",dic); 39 } 40 } 41 void nodo::recorrido_liberar() { 42 if (h_izq!= 0) { 43 h_izq->recorrido_liberar(); delete h_izq; 44 h_der->recorrido_liberar(); delete h_der; 45 } 46 } 47 void nodo::recorrido_imprimir(ostream &s) { 48 if (h_izq!= 0) { 49 s << "[" << freq << "]("; 50 h_izq->recorrido_imprimir(s); s << ","; 51 h_der->recorrido_imprimir(s); s << ")"; 52 } else s << "[" << freq << "]" << simbolo; 53 } FI UPV: Curso 2009/2010 Página 5.25

27 54 class pnodo { // basicamente es un puntero a nodo public: 56 nodo *n; // <-- unico atributo de la clase 57 pnodo() {}; // un contructor 58 pnodo(nodo *n) { this->n = n; } // otro constructor 59 operator nodo*() { return n; } // conversion automatica a nodo* 60 int freq() const { return n->freq; } 61 // sobrecargamos comparaciones OJO!!! es mayor el de menor freq 62 bool operator < (const pnodo& b) const {return freq() > b.freq();} 63 bool operator > (const pnodo& b) const {return freq() < b.freq();} 64 bool operator <= (const pnodo& b) const {return freq() >= b.freq();} 65 bool operator >= (const pnodo& b) const {return freq() <= b.freq();} 66 bool operator == (const pnodo& b) const {return freq() == b.freq();} 67 }; 68 ostream& operator<< (ostream& s, pnodo& p) { 69 p.n->recorrido_imprimir(s); 70 return s; 71 } 72 typedef priority_queue<pnodo> cola_prioridad_nodos; FI UPV: Curso 2009/2010 Página 5.26

28 94 int main(int argc, char **argv) { // programa principal 95 dic_cadena_entero entrada; 96 string simbolo; 97 int freq; 98 while (cin >> simbolo >> freq) 99 entrada[simbolo] = freq; 100 dic_cadena_cadena *salida = huffman(entrada); 101 dic_cadena_cadena::iterator iter; 102 cout << "\nla codificacion Huffman obtenida es:\n"; 103 for (iter = salida->begin(); iter!= salida->end(); iter++) 104 cout<<setw(5)<<left<<iter->first<<" --> "<< iter->second<<endl; 105 } FI UPV: Curso 2009/2010 Página 5.27

Tema 4y 5. Algoritmos voraces. Algoritmos sobre grafos

Tema 4y 5. Algoritmos voraces. Algoritmos sobre grafos Tema 4y 5. Algoritmos voraces. Algoritmos sobre grafos Objetivos: Estudio de la técnica de diseño de algoritmos voraces Estudio de algunos problemas clásicos: Indice: Mochila con fraccionamiento Algoritmos

Más detalles

Algoritmos Voraces. Diseño y Análisis de Algoritmos

Algoritmos Voraces. Diseño y Análisis de Algoritmos Algoritmos Voraces Diseño y Análisis de Algoritmos Contenidos Contenidos 1 Introducción 2 Ejemplos básicos 3 Cambio de monedas 4 Problema de la mochila 5 Problemas de planificación de tareas 6 Patrones

Más detalles

Algoritmos y Complejidad

Algoritmos y Complejidad Algoritmos y Complejidad Algoritmos greedy Pablo R. Fillottrani Depto. Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Primer Cuatrimestre 2017 Algoritmos greedy Generalidades Problema

Más detalles

Algoritmos voraces (greedy)

Algoritmos voraces (greedy) Dr. Eduardo A. RODRÍGUEZ TELLO CINVESTAV-Tamaulipas 21 de marzo de 2018 Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 1 / 45 1 Algoritmos voraces (greedy) Aplicaciones de

Más detalles

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Programación 1 Tema 3. Información, datos, operaciones y expresiones Programación 1 Tema 3 Información, datos, operaciones y expresiones Índice Datos y tipos de datos Datos primitivos en C++ Expresiones e instrucción de asignación Datos y tipos de datos Problema información

Más detalles

greedy (adj): avaricioso, voraz, ávido, codicioso, glotón

greedy (adj): avaricioso, voraz, ávido, codicioso, glotón Algoritmos Greedy Análisis y Diseño de Algoritmos Algoritmos Greedy Características generales Elementos de un algoritmo greedy Esquema de un algoritmo greedy s Almacenamiento óptimo en cintas Problema

Más detalles

Tema 7. Colas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Badía. {badia, bmartine,

Tema 7. Colas.   José M. Badía, Begoña Martínez, Antonio Morales y José M. Badía. {badia, bmartine, Tema 7. Colas http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Badía {badia, bmartine, morales}@icc.uji.es Estructuras de datos y de la información Universitat Jaume

Más detalles

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

Estructura de datos y de la información Boletín de problemas - Tema 10 Estructura de datos y de la información Boletín de problemas - Tema 10 1. En el caso de que sea posible, dar un ejemplo de los siguientes puntos. Si no, explicar por qué no lo es. Considerar un valor genérico

Más detalles

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2 Contenidos: 1. Definición de clases 2. Implementación de los métodos 3. Constructores y destructores 4. Objetos

Más detalles

Tema: Sobrecarga de Operadores Unarios. Sobrecarga de Funciones.

Tema: Sobrecarga de Operadores Unarios. Sobrecarga de Funciones. Programación II. Guía 8 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Sobrecarga de Operadores Unarios. Sobrecarga de Funciones. Objetivos Diferenciar sobrecarga de operadores

Más detalles

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Programación 1 Tema 3. Información, datos, operaciones y expresiones Programación 1 Tema 3 Información, datos, operaciones y expresiones Índice Datos y tipos de datos Datos primitivos en C++ Expresiones e instrucción de asignación Datos y tipos de datos Problema información

Más detalles

Una lista de operadores que pueden o no sobrecargarse es la siguiente: Operadores que pueden sobrecargarse

Una lista de operadores que pueden o no sobrecargarse es la siguiente: Operadores que pueden sobrecargarse La sobrecarga de operadores, aunque puede ser una capacidad exótica, la mayoría de personas las usa implícita y regularmente se valen de los operadores sobrecargados. Por ejemplo, el operador de suma (+)

Más detalles

GESTIÓN DE MEMORIA DINÁMICA

GESTIÓN DE MEMORIA DINÁMICA UNIVERSIDAD DE MÁLAGA Dpto. Lenguajes y CC. Computación E.T.S.I. Telecomunicación GESTIÓN DE MEMORIA DINÁMICA Tema 3 Programación II Programación II 0 Tema 3: GESTIÓN DE MEMORIA DINÁMICA Tema 3: GESTIÓN

Más detalles

Arboles Binarios de Búsqueda en C++

Arboles Binarios de Búsqueda en C++ Arboles Binarios de Búsqueda en C++ por CCG/Mayo-2014 Tema de Arboles Binarios de Búsqueda, como un poco de teoría para su mejor entendimiento seguidamente mostrare la implementación en lenguaje de programación

Más detalles

Estructuras de datos

Estructuras de datos Estructuras de datos Grado en Matemáticas, UCM Curso 2012-2013 http://gpd.sip.ucm.es/jaime/edat/ 0. Breve introducción al lenguaje C++ Programa 1. Análisis de la eficiencia de algoritmos. Medidas asintóticas

Más detalles

Estructuras de Datos y Algoritmos: Boletín de Problemas del segundo parcial

Estructuras de Datos y Algoritmos: Boletín de Problemas del segundo parcial Estructuras de Datos y Algoritmos: Boletín de Problemas del segundo parcial (Facultad de Informática) Curso 00 0 Estructuras de Datos y Algoritmos (FI-UPV) Curso 00 0 Árboles. Si la acción P fuera escribir

Más detalles

ÁRBOLES CRISTIAN ALFREDO MUÑOZ ÁLVAREZ JUAN DAVID LONDOÑO CASTRO JUAN PABLO CHACÓN PEÑA EDUARDO GONZALES

ÁRBOLES CRISTIAN ALFREDO MUÑOZ ÁLVAREZ JUAN DAVID LONDOÑO CASTRO JUAN PABLO CHACÓN PEÑA EDUARDO GONZALES ÁRBOLES CRISTIAN ALFREDO MUÑOZ ÁLVAREZ JUAN DAVID LONDOÑO CASTRO JUAN PABLO CHACÓN PEÑA EDUARDO GONZALES ÁRBOL Un árbol es un grafo no dirigido, conexo, sin ciclos (acíclico), y que no contiene aristas

Más detalles

Estructura de Datos. Códigos de Huffman. Primer Semestre, Compresión de Archivos. Compresión de Archivos

Estructura de Datos. Códigos de Huffman. Primer Semestre, Compresión de Archivos. Compresión de Archivos Estructura de Datos Códigos de Huffman Prof.: Mauricio Solar Prof.: Lorna Figueroa Primer Semestre, 2 Los algoritmos estudiados hasta ahora han sido diseñados, en general, para que utilicen el menor tiempo

Más detalles

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS

UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS UNIVERSIDAD AUTONOMA DE MADRID ESCUELA POLITÉCNICA SUPERIOR ESTRUCTURAS DE DATOS Y ALGORITMOS Curso 2008-09 Examen parcial APELLIDOS: NOMBRE: 1. (0.5 puntos) Enumera las características de un algoritmo

Más detalles

LISTAS ENLAZADAS DOBLES C++

LISTAS ENLAZADAS DOBLES C++ LISTAS ENLAZADAS DOBLES C++ fichero nodo.h #ifndef NODO_H #define NODO_H #include using namespace std; class Nodo private: int codigo; string nombre; float nota1; float nota2; float nota3; Nodo*

Más detalles

Análisis y Diseño de Algoritmos

Análisis y Diseño de Algoritmos Análisis y Diseño de Algoritmos Algoritmos Voraces DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Introducción Siempre toman la mejor opción en cada momento (punto de decisión del algoritmo)

Más detalles

ÁRBOL BINARIO. T der. Árbol binario homogéneo es aquel cuyos nodos tienen grado 0 ó 2(no hay ninguno de grado 1).

ÁRBOL BINARIO. T der. Árbol binario homogéneo es aquel cuyos nodos tienen grado 0 ó 2(no hay ninguno de grado 1). ÁRBOL BINARIO - Un árbol binario puede definirse como un árbol que en cada nodo puede tener como mucho grado 2, es decir, a lo más 2 hijos. Los hijos suelen denominarse hijo a la izquierda e hijo a la

Más detalles

Estructuras Enlazadas AyED UTN-BA

Estructuras Enlazadas AyED UTN-BA Funciones para estructuras enlazadas Sin Plantilla El Nodo Con plantilla para un dato genérico en info El Nodo struct Nodo1 int info; Nodo* sig; ; Nodo1* p1 = new Nodo1(); struct Nodo2 string info; Nodo*

Más detalles

Introducción a C++ Índice

Introducción a C++ Índice Introducción a C++ 1. 2. 3. 4. 5. 6. Índice 1. Diferencias entre C y C++. 2. Diferencias entre C++ y Java. 3. Ejemplos. 4. Funciones. 5. Memoria dinámica 6. Librería de funciones. 1 1. Diferencias entre

Más detalles

Temario. Tema 5. Estructuras de Datos no Lineales. 5.1 Árboles Binarios 5.2 Árboles n-arios

Temario. Tema 5. Estructuras de Datos no Lineales. 5.1 Árboles Binarios 5.2 Árboles n-arios Temario 5.1 Árboles Binarios 5.2 Árboles n-arios Especificación Utilización Representación Enlazada 5.3 Árboles Binarios de Búsqueda 5.4 Árboles Parcialmente Ordenados 1 Árbol n-ario: O bien es el conjunto

Más detalles

Estructura de Datos Árboles Árboles 2-3

Estructura de Datos Árboles Árboles 2-3 Estructura de Datos Árboles 1-2-3 Árboles 2-3 Prof.: Mauricio Solar Prof.: Lorna Figueroa Primer Semestre, 2010 1 Arboles 1-2-3 Árbol n-ario ordenado de orden 3 Cada nodo tiene 1 ó 2 elementos 75 Nodo

Más detalles

Algoritmos glotones 2 (código de Huffman) mat-151

Algoritmos glotones 2 (código de Huffman) mat-151 Algoritmos glotones 2 (código de Huffman) mat-151 Alonso Ramírez Manzanares Computación y Algoritmos 05.06.2009 Son técnicas muy efectivas para comprimir datos. Alcanzan una compresión de entre 20% y 90%

Más detalles

PROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA

PROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA PROGRAMA EDUCATIVO INFORMATICA ADMINISTRATIVA UNIDAD DE APRENDIZAJE ADMINISTRACION DE BASES DE DATOS Unidad de competencia III Manejar las estructuras dinámicas en memoria secundaria Arboles ELABORACION

Más detalles

Librerías estándar en C++ STL: Standard Template Library. Álvaro Sánchez Miralles José Porras (Fidel Fernández)

Librerías estándar en C++ STL: Standard Template Library. Álvaro Sánchez Miralles José Porras (Fidel Fernández) Librerías estándar en C++ STL: Standard Template Library Álvaro Sánchez Miralles José Porras (Fidel Fernández) Cadenas de caracteres Es una clase que se encuentra en librería estandar Consta,

Más detalles

Examen de prácticas de Programación 1

Examen de prácticas de Programación 1 Examen de prácticas de Programación 1 Escuela de Ingeniería y Arquitectura Departamento de Informática e Ingeniería de Sistemas 2 de septiembre de 2015 Tiempo para realizar el trabajo de programación propuesto:

Más detalles

Nº Mat. Calificación APELLIDOS NOMBRE. CURSO 4º GRUPO Julio 2014 ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES

Nº Mat. Calificación APELLIDOS NOMBRE. CURSO 4º GRUPO Julio 2014 ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES APELLIDOS NOMBRE Nº Mat. UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y DISEÑO INDSUTRIAL Departamento Electrónica, Automática e Informática Industrial 2. Problema de ADOO (10

Más detalles

Árboles. Alonso Ramírez Manzanares Computación y Algoritmos Friday, March 17, 17

Árboles. Alonso Ramírez Manzanares Computación y Algoritmos Friday, March 17, 17 Árboles 1 Grafos Un grafo es un conjunto de nodos atados por un conjunto de ejes que conectan pares de nodos distintos (con un eje conectando un par de nodos.) Árboles Un árbol es una colección no-vacía

Más detalles

Impresión por pantalla. 3. Indicar la salida por pantalla (2 puntos-20 minutos)

Impresión por pantalla. 3. Indicar la salida por pantalla (2 puntos-20 minutos) 3. Indicar la salida por pantalla (2 puntos-20 minutos) #include class EUITIelemento; class EUITIpila int num; EUITIelemento *pila[10]; EUITIpila():num(0); bool push(euitielemento *in) if(num>=10)return

Más detalles

1. Conceptos básicos sobre el problema en cuestión y cuestiones afines. 2. Formulación de los correspondientes algoritmos y su pseudocódigo.

1. Conceptos básicos sobre el problema en cuestión y cuestiones afines. 2. Formulación de los correspondientes algoritmos y su pseudocódigo. Análisis de Algoritmos Ingeniería Informática, EPS-UAM Información general Organización del curso: 13-15 (mínimo-máximo) semanas docentes: 30-33 clases teóricas. 9-12 clases de problemas 26-30 clases prácticas

Más detalles

2. Problema de Algoritmia (5 puntos - 15 minutos)

2. Problema de Algoritmia (5 puntos - 15 minutos) APELLIDOS NOMBRE Nº Mat. UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y DISEÑO INDSUTRIAL Departamento de Ingeniería Eléctrica, Electrónica, Automática y Física Aplicada 2.

Más detalles

Tema 8. Listas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz

Tema 8. Listas.  José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz Tema 8. Listas http://aulavirtual.uji.es José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz {badia, bmartine, morales, sanchiz}@icc.uji.es Estructuras de datos y de la información Universitat

Más detalles

Tema: Métodos de Ordenamiento. Parte 3.

Tema: Métodos de Ordenamiento. Parte 3. Programación IV. Guía 4 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Tema: Métodos de Ordenamiento. Parte 3. Objetivos Específicos Identificar la estructura de algunos algoritmos

Más detalles

3.3. Pilas 3.3. PILAS 3

3.3. Pilas 3.3. PILAS 3 3.3. PILAS 3 3.3. Pilas Una Pila es una estructura de datos lineal que sólo permite insertar, eliminar y consultar elementos en uno de sus extremos, que denominamos cima. Es, por tanto, una estructura

Más detalles

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

ESTRUCTURA DE DATOS Y ALGORITMOS Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º 1. Ejercicio (1 puntos) Dado el array A={8, 3, 7, 1, 4, 9, 5, 2, 6 (a) Escribir la secuencia de ordenación del array A por medio del algoritmo de InsertionSort. {8, 3, 7, 1, 4, 9, 5, 2, 6 {3, 8, 7, 1,

Más detalles

Análisis de algoritmos

Análisis de algoritmos Tema 10: Algoritmos ávidos M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom 1 Contenido Introducción Algoritmos ávidos Forma general de un

Más detalles

Una clave Definición informal La clave debe contener una secuencia de una o más letras seguidas por uno o más dígitos

Una clave Definición informal La clave debe contener una secuencia de una o más letras seguidas por uno o más dígitos Una clave Definición informal La clave debe contener una secuencia de una o más letras seguidas por uno o más dígitos Definición formal del lenguaje por comprensión L = {C n D m \ n,m >0 Donde C representa

Más detalles

Programación 1 Tema 7. Desarrollo modular y descendente de programas

Programación 1 Tema 7. Desarrollo modular y descendente de programas Programación 1 Tema 7 Desarrollo modular y descendente de programas Índice Programas dirigidos por menú Diseño modular Módulos de biblioteca en C++ Programa dirigido por menú MENÚ DE OPERACIONES ===================

Más detalles

OBJETIVOS ÍNDICE BIBLIOGRAFÍA

OBJETIVOS ÍNDICE BIBLIOGRAFÍA OBJETIVOS Tema 9: GRAFOS Primera Parte Estructuras de Datos y Algoritmos Curso 2002/03 Definiciones formales de grafo y conceptos relacionados Estructuras de datos para representar grafos Algoritmos para

Más detalles

3.3. PILAS 1. stack(const queue &original); /* Pre: cierto */ /* Post: Construye una pila que es una copia de "original". */

3.3. PILAS 1. stack(const queue &original); /* Pre: cierto */ /* Post: Construye una pila que es una copia de original. */ 3.3. PILAS 1 3.3. Pilas Una Pila es una estructura de datos lineal que sólo permite insertar, eliminar y consultar elementos en uno de sus extremos, que denominamos cima. Es, por tanto, una estructura

Más detalles

Programación 1 Tema 5. Instrucciones simples y estructuradas

Programación 1 Tema 5. Instrucciones simples y estructuradas Programación 1 Tema 5 Instrucciones simples y estructuradas Índice Instrucciones simples Instrucciones estructuradas Instrucción ::= Instrucciones.

Más detalles

324 MR Versión 1 Prueba Integral 1/3 Semana 10 Lapso 2015-2

324 MR Versión 1 Prueba Integral 1/3 Semana 10 Lapso 2015-2 324 MR Versión 1 Prueba Integral 1/3 UNIVERSIDAD NACIONAL ABIERTA VICERRECTORADO ACADÉMICO ÁREA INGENIERÍA MODELO DE RESPUESTA ASIGNATURA: Computación II CÓDIGO: 324 MOMENTO: Prueba Integral FECHA DE APLICACIÓN:

Más detalles

2^6 2^5 2^4 2^3 2^2 2^1 2^0 SUMA

2^6 2^5 2^4 2^3 2^2 2^1 2^0 SUMA Universidad Rafael Urdaneta Facultad de Ingeniería Escuela de Ingeniería de Computación Cátedra: Programación I Laboratorio - Semestre 2012-1 (Sección E ) Profesor: Jaime Soto Examen #1 - Fecha: 08-03-2012

Más detalles

ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Julio 2015

ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Julio 2015 2. Problema de Algoritmia (5 puntos - 20 minutos) En una planificación de un proyecto se dispone de la secuencia de 10 tareas T i ordenadas parcialmente que aparece a continuación, y se necesita encontrar

Más detalles

Apuntes de Teórico de Programación 3. Apuntes de Teórico PROGRAMACIÓN 3. Greedy. Versión 1.1

Apuntes de Teórico de Programación 3. Apuntes de Teórico PROGRAMACIÓN 3. Greedy. Versión 1.1 Apuntes de Teórico PROGRAMACIÓN 3 Greedy Versión 1.1 1 Índice Índice... Introducción... 3 Ejemplo 1 (problema de las monedas)... 3 Ejemplo (problema de la mochila)... 4 Aplicaciones del método Greedy a

Más detalles

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010

Estructura de Datos. Árboles Binarios de Búsqueda ABB. Primer Semestre, 2010 Estructura de Datos Árboles Binarios de Búsqueda ABB Prof.: Mauricio Solar Prof.: Lorna Figueroa Primer Semestre, 20 1 Arboles de Búsqueda Binaria El árbol binario de búsqueda (ABB) toma su nombre del

Más detalles

Algoritmos mas complejos. Algoritmos y Estructuras de Datos II (Programación I) Mgter. Vallejos, Oscar A.

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

Más detalles

Contenido. Contenido - IX. 1 Encapsulamiento a través de clases y objetos Introducción al lenguaje de programación Java...

Contenido. Contenido - IX. 1 Encapsulamiento a través de clases y objetos Introducción al lenguaje de programación Java... Contenido - IX Contenido 1 Encapsulamiento a través de clases y objetos... 1 1.1 Introducción... 2 1.2 Clases y objetos... 2 1.2.1 Las clases... 2 1.2.2 Miembros de la clase... 3 1.2.3 Interfaz y encapsulamiento...

Más detalles

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++ IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++ Fichero nodo.h #ifndef NODO_H #define NODO_H const int cantidad_nodos = 10; class Nodo private: string dato; Nodo* siguiente; public: Nodo(); void setdato(string

Más detalles

ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Octubre 2015

ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Octubre 2015 2. Problema de Análisis y Diseño Orientado a Objetos (10 puntos - 20 minutos) Para el código de test adjunto, se pide. 1. Diagrama de clases de diseño (2.5 puntos). 2. Implementación en C++ de la solución

Más detalles

Heurísticas en el recorrido de árboles de soluciones

Heurísticas en el recorrido de árboles de soluciones Heurísticas en el recorrido de árboles de soluciones. Árboles de soluciones. Repaso de backtracking y branch and bound. Uso de heurísicas en backtracking 4. Uso de heurísticas en branch and bound . Árboles

Más detalles

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios

Estructura de Datos. Temario Unidad VI. Árboles Árboles Binarios Estructura de Datos Árboles Árboles Binarios Temario Unidad VI 6.1 Definición y operaciones 6.2 Implementación 6.3 Recorrido en Árboles Binarios 6.4 Árboles AVL y su implementación 6.5 Árboles n-arios

Más detalles

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES

A) PREORDEN B) INORDEN C) POSTORDEN D) NIVELES Capitulo 5. Arboles 1. Al recorrer el siguiente árbol en se visitan más nodos para llegar al número 38. Justifique su respuesta mostrando cada uno de los recorridos. Tipo de Recorrido Recorrido A) PREORDEN

Más detalles

Introducción a C++ y Code::Blocks

Introducción a C++ y Code::Blocks Introducción a C++ y Práctica Imperativo Clase 1 Luis Agustín Nieto Departamento de Computación, FCEyN,Universidad de Buenos Aires. 28 de mayo de 2010 Menu de esta Tarde Funcional Vs. Imperativo (Intérprete

Más detalles

Programación de sistemas Árboles

Programación de sistemas Árboles Programación de sistemas Árboles Departamento de Ingeniería Telemática 1 Contenidos Concepto de árbol Terminología Implementación Casos especiales Árboles binarios de búsqueda Montículos (heaps) 2 Concepto

Más detalles

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

Árboles. Árboles. Árboles binarios de búsqueda. Árboles. Inserción en un árbol. Árbol binario de búsqueda Árboles Árboles Mario Medina C. mariomedina@udec.cl Árboles Estructura recursiva Árbol vacío 0 o más árboles hijos Altura ilimitada Árbol binario A lo más dos hijos: izquierdo y derecho Árboles Árboles

Más detalles

Análisis de algoritmos

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 edfrancom@ipn.mx 1 Contenido

Más detalles

Tema: Sobrecarga de Operadores.

Tema: Sobrecarga de Operadores. Programación II. Guía 7 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Sobrecarga de Operadores. Objetivos Describir como redefinir (sobrecargar) operadores para que funcionen

Más detalles

Programación 1 Tema 2. Lenguaje de programación y ejecución de un programa

Programación 1 Tema 2. Lenguaje de programación y ejecución de un programa Programación 1 Tema 2 Lenguaje de programación y ejecución de un programa Índice Lenguaje de programación Símbolos Sintaxis Semántica Computador Ejecución de un programa Sistema operativo, entorno de programación

Más detalles

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS

Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS Contenido PARTE II: ESTRUCTURAS DE DATOS AVANZADAS TEMA 4. - La Estructura de datos Árbol 4.1. Árboles, definiciones 4.2 Árboles binarios y su representación 4.3 Operaciones básicas de un árbol binario

Más detalles

Definición y Conversión de datos. Agustín J. González ELO-329

Definición y Conversión de datos. Agustín J. González ELO-329 Definición y Conversión de datos Agustín J. González ELO-329 1 Calificador Const El calificador const previene que un objeto sea modificado con posterioridad a su definición. El objeto calificado como

Más detalles

ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Diciembre 2013

ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Diciembre 2013 APELLIDOS NOMBRE Nº Mat. UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA Y DISEÑO INDSUTRIAL Departamento Electrónica, Automática e Informática Industrial 2. Problema de ADOO (10

Más detalles

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 3

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 3 Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 3 Contenidos: 1. Funciones y clases genéricas 2. Excepciones 3. Asertos 4. El puntero this 5. Redefinición

Más detalles

Estructuras de Datos ARBOLES Y GRAFOS

Estructuras de Datos ARBOLES Y GRAFOS Estructuras de Datos ARBOLES Y GRAFOS Rosa Barrera Capot rosa.barrera@usach.cl Grafo? Características Permiten Modelar un problema Aplicaciones: Ingeniería de Sistemas Modelado de Redes Ingeniería Industrial

Más detalles

ALMACENAMIENTO PERSISTENTE DE DATOS

ALMACENAMIENTO PERSISTENTE DE DATOS UNIVERSIDAD DE MÁLAGA Dpto. Lenguajes y CC. Computación E.T.S.I. Telecomunicación ALMACENAMIENTO PERSISTENTE DE DATOS Tema 1 Programación II Programación II 0 Tema 1: ALMACENAMIENTO PERSISTENTE DE DATOS

Más detalles

Tema: Plantillas en C++.

Tema: Plantillas en C++. Programación II. Guía 11 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Plantillas en C++. Objetivos Específicos Conocer los tipos de plantillas Utilizar las plantillas de

Más detalles

ÁRBOLES BINARIOS DE BÚSQUEDA (ABB)

ÁRBOLES BINARIOS DE BÚSQUEDA (ABB) ÁRBOLES BINARIOS DE BÚSQUEDA (ABB) INTRODUCCIÓN - Un árbol binario de búsqueda (ABB) es un árbol binario con la propiedad de que todos los elementos almacenados en el subárbol izquierdo de cualquier nodo

Más detalles

EDA. Tema 8 Colas de Prioridad: Heaps

EDA. Tema 8 Colas de Prioridad: Heaps EDA. Tema 8 Colas de Prioridad: Heaps Natividad Prieto Sáez. DSIC EDA, T-8. Curso 02/03. N.Prieto p.1/55 Objetivos Estudio de las definiciones asociadas a las Colas de Prioridad: Especificación: operaciones

Más detalles

Programación 1 Tema 5. Instrucciones simples y estructuradas

Programación 1 Tema 5. Instrucciones simples y estructuradas Programación 1 Tema 5 Instrucciones simples y estructuradas Índice Instrucciones simples Instrucciones estructuradas 2 Instrucción ::= 3 Instrucciones.

Más detalles

2. Con una lista ordenada, aunque la localización y eliminación es rápida el problema es en la inserción de datos pues puede ser del orden de O(n).

2. Con una lista ordenada, aunque la localización y eliminación es rápida el problema es en la inserción de datos pues puede ser del orden de O(n). Capítulo 7 Heap 7.1 Introducción Una cola de prioridad es una estructura de datos apropiada cuando la tarea más importante es localizar y/o eliminar el elemento con valor menor de una colección. Ejemplo

Más detalles

Algunas ideas básicas de C++ Agustín J. González ELO-329

Algunas ideas básicas de C++ Agustín J. González ELO-329 Algunas ideas básicas de C++ Agustín J. González ELO-329 1 Archivos de encabezado Son necesarios para hacer uso de constantes predefinidas. Son incluidos con la directiva del pre-procesador #include Ejemplo:

Más detalles

Colas de prioridad. Tema Plantillas de clases y funciones en C El TAD Cola de Prioridad El montículo binario (heap)

Colas de prioridad. Tema Plantillas de clases y funciones en C El TAD Cola de Prioridad El montículo binario (heap) Tema 7 Colas de prioridad 7.1. Plantillas de clases y funciones en C++ 7.2. El TAD Cola de Prioridad 7.3. El montículo binario (heap) IS13. Estructuras de datos y de la información 2003/2004 1 Plantillas

Más detalles

Introducción a C++. Asignatura Estructuras de Datos Curso 2017/2018 ETSISI UPM

Introducción a C++. Asignatura Estructuras de Datos Curso 2017/2018 ETSISI UPM Introducción a C++. Asignatura Estructuras de Datos Curso 2017/2018 ETSISI UPM C vs. C++ C es un lenguaje procedural el elemento central del son las funciones. Cualquier función se puede comunicar con

Más detalles

Programación 1. Tema II. Diseño de los primeros programas. Lección 4. Diseño de algunos programas elementales

Programación 1. Tema II. Diseño de los primeros programas. Lección 4. Diseño de algunos programas elementales Programación 1 Tema II. Diseño de los primeros programas Lección 4. Diseño de algunos programas elementales 1 Objetivos de la lección: Aprender, paso a paso, una metodología de programación descendente

Más detalles

Programación 1 Tema 4. Diseño de programas elementales

Programación 1 Tema 4. Diseño de programas elementales Programación 1 Tema 4 Diseño de programas elementales Índice Estructuración de programas Metodología de programación descendente Ámbito y vida Comunicación entre funciones Índice Estructuración de programas

Más detalles

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1.

Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1. Ejercicios Resueltos del Práctico 4 Ejercicio 2 Considere la representación para Lista de Naturales y Árbol Binario de Naturales de la Figura 1. 1 2 struct NodoLista { 3 int elem ; 4 NodoLista * sig ;

Más detalles

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. 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

Más detalles

Compresión. UCR ECCI CI-2414 Recuperación de Información Prof. M.Sc. Kryscia Daviana Ramírez Benavides

Compresión. UCR ECCI CI-2414 Recuperación de Información Prof. M.Sc. Kryscia Daviana Ramírez Benavides UCR ECCI CI-2414 Recuperación de Información Prof. M.Sc. Kryscia Daviana Ramírez Benavides Introducción Grandes cantidades de información textual en la Internet. Se desea representar esta información con

Más detalles

Fundamentos de la programación

Fundamentos de la programación Fundamentos de la programación 4A Grado en Ingeniería Informática Grado en Ingeniería del Software Grado en Ingeniería de Computadores Facultad de Informática Universidad Complutense Archivos como parámetros

Más detalles

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa Programación 1 Tema I. Conceptos y elementos básicos de Programación Lección 2. Lenguaje de programación y ejecución de un programa 1 Léxico, sintaxis y semántica de un lenguaje #include #include

Más detalles

3. Indicar la salida por pantalla (2 puntos-10 minutos)

3. Indicar la salida por pantalla (2 puntos-10 minutos) APELLIDOS NOMBRE Nº Mat. UNIVERSIDAD POLITÉCNICA DE MADRID ESCUELA UNIVERSITARIA DE INGENIERÍA TÉCNICA INDUSTRIAL Departamento El.A.I. ASIGNATURA INFORMÁTICA INDUSTRIAL Calificación CURSO 2º GRUPO Junio

Más detalles

LABORATORIO #1 INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C++

LABORATORIO #1 INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C++ LABORATORIO #1 INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C++ C++ es un lenguaje de programación diseñado por Bjarne Stroustrup a partir de 1979. La intención de su creación fue ampliar al exitoso lenguaje

Más detalles

APUNTES PROII 2º PARCIAL.

APUNTES PROII 2º PARCIAL. APUNTES PROII 2º PARCIAL. MEMORIA DINÁMICA. Hay que distinguir entre: Estática: memoria que se reserva en tiempo de compilación. Dinámica: memoria que se reserva en tiempo de ejecución. 5 pasos: 1. Declaración

Más detalles

Tema: Arreglos de Objetos en C++.

Tema: Arreglos de Objetos en C++. Programación II. Guía 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Arreglos de Objetos en C++. Objetivos Específicos Describir la implementación de arreglos de Objetos.

Más detalles

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas

Programación 1. Tema II. Diseño de programas elementales. Lección 7. Diseño modular y descendente de programas Programación 1 Tema II. Diseño de programas elementales Lección 7. Diseño modular y descendente de programas 1 Objetivos de la lección : En esta lección se aprende: a dotar a un programa C++ de una estructura

Más detalles

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1 Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1 Contenidos: 1. Características generales de C++ 2. Entrada/salida estándar 3. Variables y tipos de datos

Más detalles

Programación II Tema 5. Árboles binarios

Programación II Tema 5. Árboles binarios ontenidos Programación II Tema 5. Árboles binarios Iván antador ompletitud de búsqueda onstrucción de un árbol e inserción y búsqueda de un elemento y recorrido onstrucción ontenidos ompletitud de búsqueda

Más detalles

Tema 10: Árbol binario de búsqueda

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 edfrancom@ipn.mx @edfrancom edgardoadrianfrancom (Prof. Edgardo A. Franco) 1 Contenido Árbol binario de

Más detalles

SEGUNDO PARCIAL INFORMATICA II

SEGUNDO PARCIAL INFORMATICA II SEGUNDO PARCIAL INFORMATICA II Tema 1 Hacer un programa en C++ que realice lo siguiente: a. Generar los primeros 100 números enteros comenzando en 1 y guardar los impares en una pila y los pares en una

Más detalles

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++ Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++ OBJETIVO En este documento se presentan las construcciones básicas de orientación a objetos del lenguaje de programación C++, y recomendaciones

Más detalles

1. Caminos Mínimos en un Grafo sin Pesos 2. Caminos Mínmos en un Grafo ponderado. 1. Algoritmo de Dijkstra

1. Caminos Mínimos en un Grafo sin Pesos 2. Caminos Mínmos en un Grafo ponderado. 1. Algoritmo de Dijkstra Tema - Soluciones Greedy para Problemas de Optimización sobre un Grafo Tema - Soluciones Greedy para Problemas de Optimización sobre un Grafo Germán Moltó Escuela Técnica Superior de Ingeniería Informática

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS

PROGRAMACIÓN ORIENTADA A OBJETOS PROGRAMACIÓN ORIENTADA A OBJETOS GRADO EN INGENIERÍA INFORMÁTICA SEGUNDO CURSO DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO ESCUELA POLITÉCNICA SUPERIOR UNIVERSIDAD DE CÓRDOBA CURSO ACADÉMICO: 2011

Más detalles

Desarrollo de Programas. Prof. Lisbeth C. Pérez Rivas

Desarrollo de Programas. Prof. Lisbeth C. Pérez Rivas Desarrollo de Programas Prof. Lisbeth C. Pérez Rivas lisbethpe@ula.ve Desarrollo de Programas Ejercicio: Calcular el sueldo neto de un trabajador conociendo el número de horas trabajadas, la tarifa horaria

Más detalles