Estructuras de Datos y Algoritmos. Curso 2009/2010. Tema 5: Algoritmos voraces
|
|
- Pascual Páez Prado
- hace 5 años
- Vistas:
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 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 detallesAlgoritmos 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 detallesAlgoritmos 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 detallesAlgoritmos 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 detallesProgramació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 detallesgreedy (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 detallesTema 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 detallesEstructura 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 detallesAlgoritmos 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 detallesTema: 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 detallesProgramació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 detallesUna 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 detallesGESTIÓ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 detallesArboles 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 detallesEstructuras 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 detallesEstructuras 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 ÁRBOL Un árbol es un grafo no dirigido, conexo, sin ciclos (acíclico), y que no contiene aristas
Más detallesEstructura 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 detallesUNIVERSIDAD 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 detallesLISTAS 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 detallesAná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 - 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 detallesEstructuras 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 detallesIntroducció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 detallesTemario. 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 detallesEstructura 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 detallesAlgoritmos 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 detallesPROGRAMA 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 detallesLibrerí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 detallesExamen 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 detallesNº 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 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 detallesImpresió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 detalles1. 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 detalles2. 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 detallesTema 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 detallesTema: 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 detalles3.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 detallesESTRUCTURA 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 detallesAná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 detallesUna 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 detallesProgramació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 detallesOBJETIVOS Í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 detalles3.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 detallesProgramació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 detalles324 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 detalles2^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 detallesASIGNATURA: 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 detallesApuntes 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 detallesEstructura 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 detallesAlgoritmos 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 detallesContenido. 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 detallesIMPLEMENTACIÓ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 detallesASIGNATURA: 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 detallesHeurí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 detallesEstructura 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 detallesA) 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 detallesIntroducció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 detallesProgramació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 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 detallesAná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 detallesTema: 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 detallesProgramació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 detallesContenido 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 detallesDefinició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 detallesASIGNATURA: 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 detallesAlgoritmos 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 detallesEstructuras 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 detallesALMACENAMIENTO 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 detallesTema: 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) 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 detallesEDA. 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 detallesProgramació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 detalles2. 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 detallesAlgunas 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 detallesColas 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 detallesIntroducció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 detallesProgramació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 detallesProgramació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 detallesEjercicio 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 detallesProgramació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 detallesCompresió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 detallesFundamentos 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 detallesProgramació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 detalles3. 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 detallesLABORATORIO #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 detallesAPUNTES 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 detallesTema: 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 detallesProgramació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 detallesAlgoritmos 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 detallesProgramació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 detallesTema 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 detallesSEGUNDO 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 detallesProgramació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 detalles1. 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 detallesPROGRAMACIÓ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 detallesDesarrollo 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