Análisis de Algoritmos

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

Download "Análisis de Algoritmos"

Transcripción

1 Análisis de Algoritmos Profesor: M.C. Cuauhtemoc Gomez Suarez Tarea 06: Para calificación de examen. Sección: 503 Manuel Alejandro Salazar Mejía. Matrícula: C 11 de enero de

2 Tarea: a) Programar la solución para el problema de las rutas más cortas de todos los pares. * Utilizar el algoritmo de Floyd-Warshall * Utilizar matrices de adyacencia para la representación de los grafos El algoritmo de Floyd-Warshall Utilizaremos una formulación diferente de programación dinámica para resolver el problema de todos los pares de rutas más cortas en un grafo dirigido G = (V, E). El algoritmo resultante, conocido como el algoritmo de Floyd-Warshall, se ejecuta en tiempo de Θ(V 3 ). Como antes, vertices con pesos negativos pueden estar presentes, pero asumimos que no hay ciclos con peso negativo. El algoritmo de Floyd-Warshall considera vertices intermedios en una ruta mas corta, y se basa en la siguiente observación. De acuerdo con nuestro supuesto de que los vertices de G son V = {1, 2,..., n, consideremos un subconjunto {1, 2,..., k de vertices para algun k. Para cualquier par de vertices i, j ɛ V, tenga en cuenta todas las rutas i a j cuyos vertices intermedios están formados por {1, 2,..., k, y sea p una ruta con el mínimo peso de entre ellos. Por lo que explota una relación entre la ruta p y rutas mas cortas de i a j con todos los vertices intermedios en el conjunto {1, 2,..., k 1. La relacion depende de si k es un vertice intermedio de la ruta p. - Si k no es un vertice intermedio de la ruta p, entonces todos los vertices intermedios de la ruta p están en el conjunto {1, 2,..., k 1. - Si k es un vertice intermedio de la ruta p, entonces separamos p en i p 1 k p 2 j, asi vemos que p 1 es una ruta mas corta de i a k con todos sus vertices intermedios en {1, 2,..., k 1. Del mismo modo, p 2 es unaruta mas corta desde el vertice k a el vertice j con todos los vertices intermedios en el conjunto {1, 2,..., k 1. Entonces encontrando una solución recursiva para el problema de todos los pares de rutas más cortas definimos: como el peso de la ruta mas corta desde el vertice i al vertice j, para los cuales todos los vertices intermedios están en el conjunto {1, 2,..., k. d (k) ij 2

3 y { d (k) wij k = 0 ij = min(d (k 1) ij, d (k 1) ik + d (k 1) kj ) k 1 ahora para saber como se altera la matriz de predecesores, podemos dar una formulación recursiva de Π (k) ij. Cuando k = 0, una ruta mas corta de i hasta j no tiene vertices intermedios en absoluto. Por lo tanto, { Π (0) NIL if i = j or wij = ij = i if i j and w ij < Para k 1, si tomamos la ruta i k j: { Π (k 1) ij if d (k 1) ij Π (k) ij = Π (k 1) kj if d (k 1) ij d (k 1) ik > d (k 1) ik + d (k 1) kj, + d (k 1) kj. Algoritmo de Floyd-Warshall. pseudocodigo FLOYD-WARSHALL(W ) 1: n rows[w ] 2: D (0) W 3: para k 1 hasta n hacer 4: para i 1 hasta n hacer 5: para j 1 hasta n hacer 6: d (k) ij 7: fin para 8: fin para 9: fin para 10: regresa D (n) 11: regresa Π (n) min(d (k 1) ij, d (k 1) ik + d (k 1) kj ) 3

4 Se propone el siguiente codigo en C++, floyd warshall.cpp: #include< iostream > #include< climits > #include< cstdlib > #include< cstdio > //definiciones para el algoritmo #define INF #define NIL -1 using namespace::std; //matrices de pesos y de padres int W[5][5]; int Padre[5][5]; //inicializar la matriz de adyacencia y de padres void inicializar(){ for(int i = 0; i < 5; i + +) for(int j = 0; j < 5; j + +){ Padre[i][j] = NIL; if(i == j) W[i][j] = 0; else W[i][j] = INF; //insertar una arista validando i = j void inserta arista(int i, int j, int w){ if(i == j) W[i][j] = 0; else{ W[i][j] = w; Padre[i][j] = i+1; //validacion para suma con infinito int suma(int x, int y){ if( x == INF y == INF) return INF; else return x + y; algoritmo que calcula las rutas mas cortas void floyd warshall(){ //ciclo principal de floyd warshall for(int k = 0; k < 5; k + +) for(int i = 0; i < 5; i + +) for(int j = 0; j < 5; j + +) if( W[i][j] > suma(w[i][k], W[k][j]) ){ W[i][j] = suma(w[i][k], W[k][j]); Padre[i][j] = Padre[k][j]; printf( W =\n ); for(int i = 0; i < 5; i + +){ for(int j = 0; j < 5; j + +) printf( %d, W[i][j]); printf( \n ); printf( P =\n ); for(int i = 0; i < 5; i + +){ for(int j = 0; j < 5; j + +) printf( %d, Padre[i][j]); printf( \n ); 4

5 int main(){ int narist; int a, b, c; printf( ingresa el numero de aristas\n ); scanf( %d, &narist); //inicializar la matriz de adyacencias y la matriz de predecesores inicializar(); //leer las aristas printf( ingresa la arista en el orden: vertice1 vertice2 peso\n ); while(narist){ //leer arista (a,b) con capacidad c scanf( %d %d %d, &a, &b, &c); inserta arista(a, b, c); narist ; floyd warshall(); return 0; dicho codigo se ha implementado para la resolución del siguiente grafo: Figura 1: Grafo a resolver con el algoritmo de Floyd-Warshall. 5

6 en la figura 2 podemos ver una corrida de la forma en que trabaja el algoritmo de Floyd-Warshall: Figura 2: corrida del algoritmo de Floyd-Warshall sobre el grafo de la figura 1. 6

7 ahora ejecutando el archivo floyd warshall.cpp: Figura 3: ejecución del programa floyd warshall.cpp. como se puede observar el resultado es el mismo W es la matriz resultante y P es la matriz de predecesores con la que se puede reconstruir la ruta mas corta obtenida pero eso esta fuera de mi alcance. 7

8 b) Programar la solución para el problema del flujo máximo * Utilizar el método de Ford-Fulkerson El algoritmo de Ford-Fulkerson Para comprender mejor este algoritmo es necesario definir algunos conceptos. Primero decimos que un grafo que representa flujos es un grafo dirigido y ponderado, donde el peso de las aristas representa una capacidad máxima de transportar un flujo. El flujo residual es el flujo disponible en una determinada arista una vez que se ha enviado flujo por ella (en ningún caso el flujo neto residual debe ser mayor a la capacidad de dicha arista ni menor que cero). El flujo residual lo calculamos como la capacidad menos flujo actual, donde flujo actual es el flujo que ya se ha ocupado en alguna iteración del algoritmo. Un camino de flujo residual es aquel camino de la fuente al sumidero donde todas las aristas en el camino tienen un flujo residual mayor a cero. El algoritmo comienza por hacer que el flujo actual en todas las aristas del grafo sea igual a cero, en consecuencia el flujo residual será igual a la capacidad de las mismas. El siguiente paso es encontrar un camino de la fuente al sumidero donde todas las aristas incluidas en el camino tengan una capacidad residual mayor a cero. La cantidad máxima de flujo que puede enviarse al sumidero por dicho camino corresponde como es lógico al valor de la capacidad residual mínima en dicho camino. A esta cantidad se le denomina incremento en el flujo, debido a que se suma al flujo actual en todas las aristas en el camino encontrado. La consecuencia inmediata es que el flujo residual se verá modificado y la arista con la menor capacidad estará transportando el flujo máximo (su flujo residual se convertirá en cero) y por lo tanto no deberá ser considerada en la siguiente iteración del algoritmo. Este proceso se repite siempre que pueda encontrarse un nuevo camino de flujo residual (un camino donde todas las aristas tengan un flujo residual mayor a cero). Al final el flujo máximo que puede enviarse de la fuente al sumidero corresponde a la suma de todos los incrementos calculados con cada nuevo camino encontrado. El algoritmo de Ford-Fulkerson depende fuertemente del método que se use para encontrar los caminos de flujo residual y estos a su vez dependen de la forma en la que se represente el grafo. Por un lado, la representación de matrices hace muy rápido el encontrar el valor de los flujos y las capacidades de cada arista pero hace lento el encontrar los nodos adyacentes y por lo tanto la búsqueda de caminos. Por otro lado, las listas de adyacencias hacen muy rápido el encontrar los nodos adyacentes pero hacen lento el encontrar el valor de los flujos y capacidades. 8

9 En cada iteración del método de Ford-Fulkerson, encontramos algunas rutas p que aumentan e incrementan el flujo f en cada vertice de p por la capacidad residual c f (p). La consecuencia de la aplicación del método calcula el caudal máximo en un grafo G = (V, E), poniendo al día el flujo f[u, v] entre cada par u, v de vertices que estan conectados por una vertice. Si u y v no estan conectados por una arista en cualquier dirección, se supone implícitamente que f[u, v] = 0. La capacidad de c(u, v) se supone que se administra junto con el grafo, y c(u, v) = 0 si (u, v) ɛ E. Algoritmo de Ford-Fulkerson. pseudocodigo FORD-FULKERSON(G,s,t) 1: para cadavertice(u, v)ɛe[g] hacer 2: f[u, v] 0 3: f[v, u] 0 4: mientras existaunarutapdeshastatenlaredresidualg f hacer 5: c f (p) min{c f (u, v) : (u, v)estaenp 6: para cadavertice(u, v)enp hacer 7: f[u, v] f[u, v] + c f (p) 8: f[v, u] f[u, v] 9: fin para 10: fin mientras 9

10 Se propone el siguiente codigo en C++, ford fulkerson.cpp: #include < stdio.h > #include < list > //definiciones para el algoritmo #define MAXVERT 100 #define NULO -1 #define INFINITO using namespace::std; //definicion de una estructura para almacenar los flujos actuales y capacidades typedef struct{ int flujo; int capacidad; FLUJOS; //el grafo se almacena como una matriz FLUJOS grafo[maxvert][maxvert]; int nvert, padre[maxvert]; //valores iniciales de los flujos antes de insertar aristas void inicia grafo(){ for(int i = 0; i < nvert; i + +) for(int j = 0; j < nvert; j + +) grafo[i][j].capacidad = 0; //se considera que puede haber mas de una arista entre cada para de vertices void inserta arista(int origen, int destino, int capacidad){ grafo[origen][destino].capacidad += capacidad; //busqueda de caminos residuales, devuelve verdadero al encontrar un camino int BFS(int fuente, int sumidero){ int visitado[maxvert], u, v, residual; list< int > cola; //inicializar la busqueda for(u = 0; u < nvert; u + +){ padre[u] = NULO; visitado[u] = 0; cola.clear(); //hacer la busqueda visitado[fuente] = 1; cola.push back(fuente); //ciclo principal de la busqueda por anchura while(!cola.empty()){ //saca nodo de la cola u = cola.front(); cola.pop front(); for(v = 0; v < nvert; v + +){ //elige aristas con flujo residual mayor a cero en el recorrido residual = grafo[u][v].capacidad - grafo[u][v].flujo; if(!visitado[v] && ( residual > 0)){ cola.push back(v);//mete nodo a la cola padre[v] = u;//guarda a su padre visitado[u] = 1;//lo marca como visitado //devolver estado del camino al sumidero al terminar el recorrido return visitado[sumidero]; //algoritmo de ford-fulkerson int ford fulkerson(int fuente, int sumidero){ int flujomax, incremento, residual, u; //los flujos a cero antes de iniciar el algoritmo 10

11 for(int i = 0; i < nvert; i + +) for(int j = 0; j < nvert; j + +) grafo[i][j].flujo = 0; flujomax = 0; //mientras existan caminos de flujo residual while(bfs(fuente, sumidero)){ //busca el flujo minimo en el camino de f a s incremento = INFINITO;//inicializa incremento a infinito //busca el flujo residual minimo en el camino de fuente a sumidero for(u = sumidero; padre[u]!= NULO; u = padre[u]){ residual = grafo[padre[u]][u].capacidad- grafo[padre[u]][u].flujo; incremento = min( incremento, residual); //actualiza los valores de flujo, flujo maximo y residual en el camino for(u = sumidero; padre[u]!= NULO; u = padre[u]){ //actualiza los valores en el sentido de fuente a sumidero grafo[padre[u]][u].flujo += incremento; //hace lo contrario en el sentido de sumidero a fuente grafo[u][padre[u]].flujo -= incremento; // muestra la ruta for (u=sumidero; padre[u]!=(-1); u=padre[u]) printf( %d<,u); printf( %d añade %d de flujo adicional\n, fuente,incremento); flujomax += incremento; //al salir del ciclo ya no quedan rutas de incremento de flujo se devuelve el ciclo maximo return flujomax; int main(){ int narist; int a, b, c; int fuente, sumidero; int flujo; //leer parametros del grafo printf( numero de vertice y numero de aristas\n ); scanf( %d %d, &nvert, &narist); //inicializar el grafo inicia grafo(); //leer las aristas printf( ingresa la arista en el orde v1 v2 peso\n ); while(narist){ //leer arista (a,b) con capacidad c scanf( %d %d %d, &a, &b, &c); inserta arista(a, b, c); narist ; for(int i = 0; i < nvert; i + +) for(int j = 0; j < nvert; j + +) printf( grafo[ %d][ %d] = %d\n, i, j, grafo[i][j].capacidad); //leer la consulta printf( introduce el vertice fuente y el sumidero del grafo\n ); scanf( %d %d, &fuente, &sumidero); flujo = ford fulkerson(fuente, sumidero); printf( el flujo maximo entre %d y %d es %d\n, fuente, sumidero, flujo); printf( El flujo entre los vertices quedo asi\n ); for(int i = 0; i < nvert; i + +) for(int j = 0; j < nvert; j + +) if( (i!= j) && (grafo[i][j].flujo!= 0) ) printf( ( %d, %d) = %d\n, i, j, grafo[i][j].flujo); return 0; 11

12 aqui vemos una corrida de como deberia funcionar el algoritmo de Ford- Fulkerson: Figura 4: corrida del algoritmo Ford-Fulkerson. como se puede apreciar el resultado del flujo maximo obtenido es en el inciso d) con un valor de 14. ahora haciendo la corrida del programa ford fulkenson.cpp se tiene: 12

13 Figura 5: corrida del programa ford fulkerson.cpp. como podemos ver el flujo maximo que nos regresa entre el vertice fuente 1(vertice s en el grafo) y el vertice sumidero 4(vertice t en el grafo) es 14. Conclusión: Como podemos ver el algoritmo de floyd-warshall efectivamente regresa la ruta más corta de un grafo. Y en cambio el algoritmo de ford-fulkerson nos regresa el flujo maximo que se puede transportar desde un origen o fuente hasta un consumidor o sumidero, los dos creo que tienen muchas aplicaciones que ya se han mencionado en clase, recuerdo que el de floyd se puede utilizar en planeacion de vuelos y cosas por el estilo, y el de ford en cambio se puede utilizar para determinar si se cumplen las leyes de Kirchoff donde la suma de los flujos entrantes a un vertice, debe de ser igual a la suma de los flujos saliendo del vertice. Referencias: * Thomas H. Cormen, Charles E. Leiserson, Introduction to Algorithms, Second Edition 13

Grafos: algunas definiciones

Grafos: algunas definiciones Grafos: algunas definiciones Un grafo dirigido G es un par (V, E), donde V es un conjunto finito de nodos (o vértices) y E es una relación binaria sobre V. Un grafo no dirigido G es un par (V, E), donde

Más detalles

Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE

Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Todos los Pares de Rutas más Cortas (All-Pairs Shortest Paths) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Problema de Encontrar todos los Pares de Rutas más Cortas 2 Encontrar las rutas

Más detalles

Francisco J. Hernández López

Francisco J. Hernández López Francisco J. Hernández López fcoj23@cimat.mx Estructura de datos no lineales donde cada componente o nodo puede tener uno o más predecesores (a diferencia de los árboles) y sucesores Un grafo esta formado

Más detalles

Grafos. 19 de diciembre de 2013

Grafos. 19 de diciembre de 2013 Grafos 19 de diciembre de 2013 Grafo Un grafo es un conjunto, no vacío, de objetos llamados vértices (o nodos) y una selección de pares de vértices, llamados aristas (edges en inglés) que pueden ser orientados

Más detalles

Estructuras de Datos y Algoritmos. Grafos

Estructuras de Datos y Algoritmos. Grafos Estructuras de Datos y Algoritmos Grafos Definiciones Grafo modelo para representar relaciones entre elementos de un conjunto. Grafo: (V,E), V es un conjunto de vértices o nodos, con una relación entre

Más detalles

Tema: Algoritmos para la ruta más corta en un Grafo.

Tema: Algoritmos para la ruta más corta en un Grafo. Programación IV. Guía 10 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Tema: Algoritmos para la ruta más corta en un Grafo. Objetivos Específicos Definir el concepto de camino

Más detalles

Tema: Algoritmos para la ruta más corta en un Grafo.

Tema: Algoritmos para la ruta más corta en un Grafo. Programación IV. Guía No. 10 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación IV Tema: Algoritmos para la ruta más corta en un Grafo. Objetivos Específicos Definir el concepto de camino

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

Tema: Recorrido de Grafos. Ruta más corta

Tema: Recorrido de Grafos. Ruta más corta PED104. Guía N 12 Página 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación con Estructuras de Datos Tema: Recorrido de Grafos. Ruta más corta Competencia Desarrolla sistemas de información

Más detalles

Camino mínimo en grafos

Camino mínimo en grafos Camino mínimo en grafos Melanie Sclar Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Nacional OIA 206 Melanie Sclar (UBA) Camino mínimo en grafos Nacional OIA 206 / Contenidos Camino

Más detalles

for(i = 0; i <= 45; i+=5) { x = (i*3.1416)/180; printf( seno(%d) = %f\n,i,seno(x));

for(i = 0; i <= 45; i+=5) { x = (i*3.1416)/180; printf( seno(%d) = %f\n,i,seno(x)); Ejemplo #include #include float seno(float x); int main(){ int i; float x; for(i = 0; i

Más detalles

Ciclos y grafos acíclicos

Ciclos y grafos acíclicos Ciclos y grafos acíclicos Domingo Gómez Pérez Domingo Gómez Pérez Ciclos y grafos acíclicos 1 / 23 Definición de ciclos Figura: Figura con ciclos Definición de camino Un camino en un grafo es una lista

Más detalles

Estructuras de Datos Orientadas a Objetos. Pseudocódigo y aplicaciones en C#.NET. Capítulo 9.- Grafos

Estructuras de Datos Orientadas a Objetos. Pseudocódigo y aplicaciones en C#.NET. Capítulo 9.- Grafos Capítulo 9.- Grafos Cuestionario 9.1 Se pueden representar los nodos de un grafo como un conjunto de elementos 9.2 Se pueden representar los arcos de un grafo como un conjunto de tuplas 9.3 Los grafos

Más detalles

Máximo Flujo (Maximum Flow) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE

Máximo Flujo (Maximum Flow) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Máximo Flujo (Maximum Flow) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Flujo Máximo También podemos utilizar un grafo dirigido para modelar una red de flujo Se produce un material que

Más detalles

Estructuras de Repetición: Repita Mientras.

Estructuras de Repetición: Repita Mientras. Estructuras de Repetición: Repita Mientras. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de Los Andes Programación Digital I 1 Programación

Más detalles

Programación Dinámica

Programación Dinámica Programación Dinámica Agustín Santiago Gutiérrez Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Septiembre 2014 Agustín Gutiérrez (UBA) Programación Dinámica Septiembre 2014 1 / 10

Más detalles

UTN FRBA Algoritmos y Estructura de Datos Examen Final 18/07/2014. Apellido y nombre: Legajo: Cursó con Prof:

UTN FRBA Algoritmos y Estructura de Datos Examen Final 18/07/2014. Apellido y nombre: Legajo: Cursó con Prof: UTN FRBA Algoritmos y Estructura de Datos Examen Final 18/07/2014 Distancias entre localidades Temas evaluados: Resolución de problemas, estructuras de datos, matrices, y lenguaje de programación Contexto

Más detalles

Teoría de redes y optimización en redes

Teoría de redes y optimización en redes Teoría de redes y optimización en redes Pedro Sánchez Martín Contenidos Definiciones básicas Árbol generador mínimo de expansión Camino mínimo Algoritmo Dkstra Algoritmo Bellman-Ford Fluo máximo Fluo de

Más detalles

El TAD Grafo. El TAD Grafo

El TAD Grafo. El TAD Grafo ! Esta representación resulta útil cuando el número de vértices se conoce previamente y permanecerá fijo durante la resolución del problema, pero resulta ineficiente si necesitamos añadir o eliminar vértices

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

Este material es de uso exclusivo para clase de algoritmos y estructura de datos, la información de este documento fue tomada textualmente de varios

Este material es de uso exclusivo para clase de algoritmos y estructura de datos, la información de este documento fue tomada textualmente de varios CLASE GRAFOS Este material es de uso exclusivo para clase de algoritmos y estructura de datos, la información de este documento fue tomada textualmente de varios libros por lo que está prohibida su impresión

Más detalles

Estructuras de Repetición (Hacer-Mientras)

Estructuras de Repetición (Hacer-Mientras) Estructuras de Repetición (Hacer-Mientras) Material Original: Prof. Flor Narciso Modificaciones: Prof. Andrés Arcia Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería

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

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

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

1. GRAFOS : CONCEPTOS BASICOS

1. GRAFOS : CONCEPTOS BASICOS 1. GRAFOS : CONCEPTOS BASICOS Sea V un conjunto finito no vacio y sea E V x V. El par (V, E) es un grafo no dirigido, donde V es un conjunto de vértices o nodos y E es un conjunto de aristas. Denotaremos

Más detalles

Dobles: Es el caso de la instrucción if-else (punto 1.2).

Dobles: Es el caso de la instrucción if-else (punto 1.2). 1 1.Introducción Las estructuras de control son instrucciones que nos permiten controlar el flujo de ejecución del programa. Las instrucciones de control se pueden agrupar en instrucciones condicionales

Más detalles

Representación y manipulación de grafos: caminos, expansión, cortes y flujos

Representación y manipulación de grafos: caminos, expansión, cortes y flujos Un grafo G es un par de conjuntos G =(V,E) Representación y manipulación de grafos: caminos, expansión, cortes y flujos V = un conjunto de n vértices u, v, w V E = un conjunto de m aristas V = n, E = m

Más detalles

Árboles de Expansión Mínima. Matemática Discreta. Agustín G. Bonifacio UNSL

Árboles de Expansión Mínima. Matemática Discreta. Agustín G. Bonifacio UNSL UNSL Árboles Definiciones y Ejemplos Caracterización Un árbol T es un grafo simple que satisface lo siguiente: si v y w son vértices en T, entonces existe una trayectoria simple única de v a w. Un árbol

Más detalles

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE) Repaso Lenguaje C OBJETOS Variables Constantes Variable: objeto del ambiente cuyo contenido puede cambiar. Constante: objeto cuyo contenido no puede cambiar. Variables: - un nombre que la identifica. Deben

Más detalles

Introducción general al Lenguaje C (2010/2011)

Introducción general al Lenguaje C (2010/2011) Luis Valencia Cabrera lvalencia@us.es (http://www.cs.us.es/~lvalencia) Ciencias de la Computacion e IA (http://www.cs.us.es/) Introducción general al Lenguaje C (2010/2011) Universidad de Sevilla Índice

Más detalles

Guía práctica de estudio 07. Estructuras de datos lineales: Lista simple y lista circular.

Guía práctica de estudio 07. Estructuras de datos lineales: Lista simple y lista circular. Guía práctica de estudio 07. Estructuras de datos lineales: Lista simple y lista circular. Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Autorizado por: M.C. Alejandro Velázquez

Más detalles

NIVEL 17: ESTRUCTURAS NO LINEALES

NIVEL 17: ESTRUCTURAS NO LINEALES 1 NIVEL 17: ESTRUCTURAS NO LINEALES Recorridos y Algorítmica de Grafos 2 Agenda Recorridos de grafos Recorridos Planos Recorridos en profundidad Recorridos por niveles Recorridos Heurísticos Algorítmica

Más detalles

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Unidad II: Fundamentos de la Programación Estructurada Algoritmo, Estructuras y Programación I Ing. Marglorie Colina Estructura General de un Programa Zona de ficheros de cabecera de las librerías Zona

Más detalles

Grafos: Fundamentos Representaciones, etc. Jose Aguilar

Grafos: Fundamentos Representaciones, etc. Jose Aguilar Grafos: Fundamentos Representaciones, etc. Jose Aguilar Introducción Las estructura de datos no lineales se caracterizan por tener una relación de adyacencia genérica entre sus elementos, es decir, un

Más detalles

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Lógica y Estructuras Discretas Tutor: Antonio Rivero Cuesta Tema 5 Teoría de Grafos Conceptos Básicos Un grafo consta de: Grafo Un conjunto de nodos, Un conjunto de aristas

Más detalles

Algoritmos Elementales de Grafos. Agustín J. González ELO-320: Estructura de Datos Y Algoritmos 1er.Sem. 2002

Algoritmos Elementales de Grafos. Agustín J. González ELO-320: Estructura de Datos Y Algoritmos 1er.Sem. 2002 Algoritmos Elementales de Grafos Agustín J. González ELO-0: Estructura de Datos Y Algoritmos er.sem. 00 Introducción Estudiaremos métodos para representar y explorar o recorrer grafos. Explorar un grafo

Más detalles

Guía práctica de estudio 7

Guía práctica de estudio 7 Guía práctica de estudio 7 Algoritmos de Grafos. Parte 2. Elaborado por: Revisión: Ing. Laura Sandoval Montaño Facultad de Ingeniería U.N.A.M. Guía Práctica 7 Estructura de datos y Algoritmos II Algoritmos

Más detalles

Grafos (principiantes) - Parte I

Grafos (principiantes) - Parte I Grafos (principiantes) - Parte I Juan Cruz Piñero Facultad de Informática Universidad Nacional del Comahue Training Camp 2017 Juan Cruz Piñero (FAI - UNCo) Grafos (Principiantes) Parte I TC 2017 1 / 39

Más detalles

Modularización en lenguaje C. Funciones

Modularización en lenguaje C. Funciones Modularización en lenguaje C Funciones Segundo Cuatrimestre 2016 F. de la Informática- Int.a la Computación - Int.a la Programación 1 Ejercicio: Dado el siguiente algoritmo incompleto codificado en Lenguaje

Más detalles

Operadores aritméticos

Operadores aritméticos Bloque 3.2 Operadores aritméticos Suma : x + y Resta : x y Multiplicación : x * y División : x / y Módulo : x % y (resto de la división Si los operandos son enteros tipo del resultado

Más detalles

Grafos. Leopoldo Taravilse. Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires. Training Camp 2012

Grafos. Leopoldo Taravilse. Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires. Training Camp 2012 Grafos Leopoldo Taravilse Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires Training Camp 2012 Leopoldo Taravilse (UBA) Grafos TC 2012 1 / 78 Contenidos 1 Definiciones básicas Algoritmos

Más detalles

Es un conjunto de objetos llamados vértices o nodos unidos por enlaces llamados aristas o arcos, que permiten representar relaciones binarias entre

Es un conjunto de objetos llamados vértices o nodos unidos por enlaces llamados aristas o arcos, que permiten representar relaciones binarias entre Es un conjunto de objetos llamados vértices o nodos unidos por enlaces llamados aristas o arcos, que permiten representar relaciones binarias entre elementos de un conjunto. Típicamente, un grafo se representa

Más detalles

Teoría de grafos y optimización en redes

Teoría de grafos y optimización en redes Teoría de grafos y optimización en redes José María Ferrer Caja Universidad Pontificia Comillas Definiciones básicas Grafo: Conjunto de nodos (o vértices) unidos por aristas G = (V,E) Ejemplo V = {,,,,

Más detalles

Algoritmos y Estructuras de Datos III Apunte Teórico Primer cuatrimestre

Algoritmos y Estructuras de Datos III Apunte Teórico Primer cuatrimestre Algoritmos y Estructuras de Datos III Apunte Teórico 2018 Primer cuatrimestre Índice 1. Grafos 2 1.1. Conceptos básicos.......................... 2 1.2. Árboles................................ 6 1.3. Camino

Más detalles

Arreglos Estructura (struct)

Arreglos Estructura (struct) Universidad Rafael Urdaneta Escuela de Ingeniería de Computación Arreglos Estructura (struct) MSc Jaime Soto Una estructura de datos es una colección de datos que pueden ser caracterizados por su organización

Más detalles

Algebra Matricial y Teoría de Grafos

Algebra Matricial y Teoría de Grafos Algebra Matricial y Teoría de Grafos Unidad 3: Nociones de teoría de grafos Luis M. Torres Escuela Politécnica del Litoral Quito, Enero 2008 Maestría en Control de Operaciones y Gestión Logística p.1 Contenido

Más detalles

Grafos. Suponiendo que e = [u, v]. Entonces los nodos u y v se llaman extremos de e y u y v se dice que son nodos adyacentes o vecinos.

Grafos. Suponiendo que e = [u, v]. Entonces los nodos u y v se llaman extremos de e y u y v se dice que son nodos adyacentes o vecinos. Grafos Los grafos son estructuras que constan de vértices o nodos y de aristas o arcos que conectan los vértices entre sí. Un grafo G consiste en dos cosas: 1. Un conjunto V de elementos llamados nodos

Más detalles

1 3 3 a. Grafos. Grafos 1

1 3 3 a. Grafos. Grafos 1 s 2 2 b 4 3 3 a d c 3 2 t 5 45 0 2 55 40 25 30 25 50 4 5 20 3 Grafos Grafos Indice general. Introducción. 2. Definiciones y representación. 3. Recorridos en grafos. 4. Algoritmos de caminos más cortos.

Más detalles

Estructuración del programa en partes más pequeñas y sencillas

Estructuración del programa en partes más pequeñas y sencillas Introducción Estructuración del programa en partes más pequeñas y sencillas Modularización Propósito único Identificable Reusable Mayor claridad: programación, depuración, etc. Construcción de librerías

Más detalles

Grafos. Amalia Duch Brown Octubre de 2007

Grafos. Amalia Duch Brown Octubre de 2007 Grafos Amalia Duch Brown Octubre de 2007 Índice 1. Definiciones Básicas Intuitivamente un grafo es un conjunto de vértices unidos por un conjunto de líneas o flechas dependiendo de si el grafo es dirigido

Más detalles

Apuntes de Teórico PROGRAMACIÓN 3

Apuntes de Teórico PROGRAMACIÓN 3 Apuntes de Teórico PROGRAACIÓN Programación Dinámica Versión. Índice Índice... Introducción... Principio de optimalidad...5 Ejemplo: Camino de menor costo...6 Ejemplo: problema de la mochila...6 Aplicación

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

Tema 3. Estructuras de control

Tema 3. Estructuras de control Tema 3. Estructuras de control 3.1. Secuencial 3.2. Selección 3.3. Repetición 2 Objetivos Objetivos del tema: Conocer y saber la utilidad de las tres estructuras de control (secuencial, alternativa y repetitiva)

Más detalles

Algoritmos Elementales de Grafos DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE

Algoritmos Elementales de Grafos DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Análisis álii y Diseño de Algoritmos Algoritmos Elementales de Grafos DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Introducción Buscar en un grafo significa sistemáticamente seguir las aristas

Más detalles

Ruta más Corta con una sóla Fuente de Inicio (Single-Source Shortest Paths) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE

Ruta más Corta con una sóla Fuente de Inicio (Single-Source Shortest Paths) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Ruta más Corta con una sóla Fuente de Inicio (Single-Source Shortest Paths) 1 DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE Problema de Encontrar la Ruta más Corta 2 Se requiere llegar de

Más detalles

Unidad 2: Problemas de camino mínimo

Unidad 2: Problemas de camino mínimo Representación Recorrido de grafos Camino mínimo Unidad 2: Problemas de camino mínimo Representación Matriz de adyacencia Matriz de incidencia Listas de vecinos Recorrido de grafos Estructuras de datos

Más detalles

Programa de teoría. Algoritmos y Estructuras de Datos II. 3. Algoritmos voraces. 1. Análisis de algoritmos 2. Divide y vencerás

Programa de teoría. Algoritmos y Estructuras de Datos II. 3. Algoritmos voraces. 1. Análisis de algoritmos 2. Divide y vencerás Programa de teoría Algoritmos y Estructuras de Datos II 1. Análisis de algoritmos 2. Divide y vencerás 3. Algoritmos voraces 4. Programación dinámica 5. Backtracking 6. Ramificación y poda A.E.D. II 1

Más detalles

Metodología de la Programación II. Recursividad

Metodología de la Programación II. Recursividad Metodología de la Programación II Recursividad Objetivos Entender el concepto de recursividad. Conocer los fundamentos del diseño de algoritmos recursivos. Comprender la ejecución de algoritmos recursivos.

Más detalles

Caminos más cortos: Jose Aguilar

Caminos más cortos: Jose Aguilar Caminos más cortos: algoritmo de Dijkstra, algoritmo de Bellman-Ford, Caminos más cortos en grafos dirigidos, algoritmo de Floyd-Warshall y algoritmo de Johnson. Jose Aguilar Caminos más cortos Coste de

Más detalles

Tema 1. Programación modular. Programación Avanzada Ingeniería Técnica en Informática de Gestión Jorge Badenas

Tema 1. Programación modular. Programación Avanzada Ingeniería Técnica en Informática de Gestión Jorge Badenas Tema 1. Programación modular Programación Avanzada Ingeniería Técnica en Informática de Gestión Jorge Badenas 1.1. Objetivos Repasar brevemente mediante ejemplos los elementos principales del lenguaje

Más detalles

ALGORITMOS Y PROGRAMACIÓN I Unidad 3

ALGORITMOS Y PROGRAMACIÓN I Unidad 3 ALGORITMOS Y PROGRAMACIÓN I Unidad 3 Tipos de Datos Estructurados Prof. Jaime Soto Sección (007) Material original de Prof. AURELY LEAL Introducción a las Estructuras de Datos Una estructura de datos es

Más detalles

ESTRUCTURA DE DATOS Y DE LA INFORMACIÓN II

ESTRUCTURA DE DATOS Y DE LA INFORMACIÓN II ESTRUCTURA DE DATOS Y DE LA INFORMACIÓN II PRÁCTICA 2: GRAFOS grupo comienzo entrega 1a miércoles 3/3 miércoles 14/4 1b jueves 4/3 jueves 15/4 1c lunes 8/3 lunes 12/4 2a viernes 5/3 viernes 9/4 2b lunes

Más detalles

Parte de Algoritmos de la asignatura de Programación Master de Bioinformática. Grafos

Parte de Algoritmos de la asignatura de Programación Master de Bioinformática. Grafos Parte de Algoritmos de la asignatura de Programación Master de Bioinformática Grafos Web asignatura: http://dis.um.es/~domingo/algbio.html E-mail profesor: domingo@um.es Transparencias preparadas a partir

Más detalles

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa

Paradigmas de lenguajes de programación. Introducción a la programación imperativa. Lenguaje C. Programación imperativa Paradigmas de lenguajes de programación Introducción a la programación imperativa Algoritmos y Estructuras de Datos I Paradigma: Definición del modo en el que se especifica el cómputo (que luego es implementado

Más detalles

Funciones y paso de parámetros

Funciones y paso de parámetros Unidad Didáctica 24 Funciones y paso de parámetros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.0 Índice Consideraciones sobre funciones Estructura de una función

Más detalles

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México

Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México Universidad Autónoma del Estado de México 2016, Año del 60 Aniversario de la Universidad Autónoma del Estado de México Unidad Académica Profesional Tianguistenco Ingeniería de Software Estructura de Datos

Más detalles

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

Flujo máximo en redes. M.C.C Magali Arellano Vázquez

Flujo máximo en redes. M.C.C Magali Arellano Vázquez M.C.C Magali Arellano Vázquez El ujo máximo de una red En una red de oleoductos se transporta petroleo desde un pozo a una renería. Antes de llegar a la renería debe pasar por varias estaciones de bombeo

Más detalles

Propiedades. Ejercicios Tema 14. Representación de Grafo. Grado de Grafo (Matriz de Adyacencia)

Propiedades. Ejercicios Tema 14. Representación de Grafo. Grado de Grafo (Matriz de Adyacencia) Propiedades Ejercicios Tema Ejercicios Adaptados de Apuntes y Exámenes de EDA Germán Moltó gmolto@dsic.upv.es Estructuras de Datos y Algoritmos Escuela Técnica Superior de Ingeniería Informática Universidad

Más detalles

La máxima distancia entre dos nodos de un árbol está dada por alguna de las 3 siguientes: La máxima distancia entre dos nodos del subárbol izquierdo.

La máxima distancia entre dos nodos de un árbol está dada por alguna de las 3 siguientes: La máxima distancia entre dos nodos del subárbol izquierdo. Dado un árbol binario cualquiera, calcular la máxima distancia entre dos nodos. El algoritmo debe funcionar en orden de complejidad, siendo n la cantidad de nodos. Idea del algoritmo: La máxima distancia

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

SESIÓN DE EJERCICIOS E1

SESIÓN DE EJERCICIOS E1 SESIÓN DE EJERCICIOS E1 Primera parte: ejercicios test (soluciones al final) A resolver antes de comenzar la sesión en el aula Ejercicio 1 Qué definición de constantes es la correcta en lenguaje C? a)

Más detalles

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Procedimientos para asignación y liberación de memoria. Tipos de datos recursivos.

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

Operadores de comparación

Operadores de comparación Operadores de comparación Los operadores de comparación en C son: Igual (==) Distinto (!=) Mayor (>) y Mayor o igual (>=) Menor (

Más detalles

Examen escrito de Programación 1. Viernes 22 de enero de Problema 1 o (3.0 puntos) Problema 2 o (3.0 puntos)

Examen escrito de Programación 1. Viernes 22 de enero de Problema 1 o (3.0 puntos) Problema 2 o (3.0 puntos) Examen escrito de Programación 1. Viernes 22 de enero de 2016 Se debe disponer de un documento de identificación con fotografía sobre la mesa. Se debe comenzar a resolver cada uno de los problemas del

Más detalles

Cátedra I Informática Autor I Carlos Bartó

Cátedra I Informática Autor I Carlos Bartó FCEFyN Departamento de Computación Informática Examen - 07-07-2008 Apellido y Nombres: Matrícula: Carrera: PROBLEMAS: 1) Especifique en el lenguaje C++ una función denominada calc_fecha() que tenga como

Más detalles

LISTAS ENLAZADAS FUNDAMENTOS TEORICOS

LISTAS ENLAZADAS FUNDAMENTOS TEORICOS LISTAS ENLAZADAS FUNDAMENTOS TEORICOS Una lista enlazada es una colección o secuencia de elementos dispuestos uno detrás de otro, en la que cada elemento se conecta al siguiente elemento por un «enlace»

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

Unidad 2. La lógica de programación. Tema 4. Arreglos y estructuras de repetición

Unidad 2. La lógica de programación. Tema 4. Arreglos y estructuras de repetición Unidad 2. La lógica de programación Tema 4. Arreglos y estructuras de repetición Arreglos y estructuras de repetición Contenido: Introducción Arreglos Vectores Matrices De más de 2 dimensiones Estructura

Más detalles

PARTE II: ALGORÍTMICA

PARTE II: ALGORÍTMICA Programa de teoría Parte I. Estructuras de Datos.. Abstracciones y especificaciones.. Conjuntos y diccionarios.. Representación de conjuntos mediante árboles. 4. Grafos. Parte II. Algorítmica.. Análisis

Más detalles

Guía práctica de estudio 08: Estructuras de datos lineales: Lista doblemente ligada y doblemente ligada circular.

Guía práctica de estudio 08: Estructuras de datos lineales: Lista doblemente ligada y doblemente ligada circular. Guía práctica de estudio 08: Estructuras de datos lineales: Lista doblemente ligada y doblemente ligada circular. Elaborado por: M.C. Edgar E. García Cano Ing. Jorge A. Solano Gálvez Autorizado por: M.C.

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

Algoritmos para caminos más cortos (2) comp-420

Algoritmos para caminos más cortos (2) comp-420 lgoritmos para caminos más cortos (2) comp-420 lgoritmo * escrito totalmente en 1968 por Peter art, Nils Nilsson y ertram Raphael. n 1964 Nils Nilsson inventó un método que utiliza una heurística para

Más detalles

Método simplex para redes (representaciones gráficas) Cálculo del flujo de un árbol de expansión

Método simplex para redes (representaciones gráficas) Cálculo del flujo de un árbol de expansión . 7 Árbol con ofertas y demandas. (Suponemos que el flujo de los demás arcos es igual a ) Método simplex para redes (representaciones gráficas) 6 - flujo en el arco (,)? Método simplex para redes (representaciones

Más detalles

Multiplicación de matrices simétricas

Multiplicación de matrices simétricas Multiplicación de matrices simétricas La traspuesta de una matriz A n n es definida como una matriz A T n n tal que A T [i, j] =A[j, i] paracadai, j 2{1,...,n} Además, una matriz A es simétrica si A =

Más detalles

TIPOS ABSTRACTOS DE DATOS EN HASKELL

TIPOS ABSTRACTOS DE DATOS EN HASKELL TIPOS ABSTRACTOS DE DATOS EN HASKELL ÍNDICE GENERAL 1. Introducción a Haskell 2. Tipos abstractos de datos en Haskell 3. TAD Grafo 4. TAD Montículos 5. Bibliografía INTRODUCCIÓN A HASKELL 1. Introducción

Más detalles

Estructuras de Decisión Simples y Dobles. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Estructuras de Decisión Simples y Dobles. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz Estructuras de Decisión Simples y Dobles Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz Control de Flujo Las sentencias estudiadas hasta ahora son ejecutadas una tras otra.

Más detalles

Introducción a los Computadores Funciones y recursividad en C

Introducción a los Computadores Funciones y recursividad en C Introducción a los Computadores Funciones y recursividad en C Alejandro Piedrahita H. Instituto de Matemáticas Facultad de Ciencias Exactas y Naturales Universidad de Antioquia Copyleft 2013. Reproducción

Más detalles

Gráficas. Las relaciones que resultan de estas conexiones nos llevan a preguntas como:

Gráficas. Las relaciones que resultan de estas conexiones nos llevan a preguntas como: GRÁFICAS Gráficas Muchas aplicaciones computacionales involucran no solo un conjunto de elementos sino también conexiones entre pares de elementos. Las relaciones que resultan de estas conexiones nos llevan

Más detalles

Tema 11. Estructura de datos Grafo

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

Más detalles

Introducción. Königsberg, s.xviii A

Introducción. Königsberg, s.xviii A Teoría de Grafos Introducción Königsberg, s.xviii A B C D Euler resuelve este problema mediante la teoría de grafos: sólo puede haber un ciclo euleriano cuando todos los nodos tienen un número par de aristas

Más detalles

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros.

UNIDAD 8 Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Tipos de datos dinámicos: Punteros Asignación dinámica de memoria. Uso de punteros. Inicialización y asignación de punteros. Procedimientos para asignación y liberación de memoria. Tipos de datos recursivos.

Más detalles

Auxiliar N 5 07 de Noviembre de 2007

Auxiliar N 5 07 de Noviembre de 2007 Universidad de Chile Facultad de Ciencias Físicas y Matemáticas Departamento de Ingeniería Industrial IN34A Optimización Auxiliar N 5 07 de Noviembre de 2007 Profesores: Francisco Cisternas Richard Weber

Más detalles

Tema 10- Grafos. Objetivos:

Tema 10- Grafos. Objetivos: Tema - Grafos Duración: 2 semanas aprox. Índice general:. Relaciones entre los Datos de una Colección 2. Conceptos básicos sobre Grafos. Representación de un Grafo: Matriz y Listas de Adyacencia. Implementación

Más detalles

Caminos más cortos en gráficas. comp-420

Caminos más cortos en gráficas. comp-420 Caminos más cortos en gráficas comp-40 Caminos más cortos en gráficas Dado un grafo con peso y dirigido G = (V, E) con una función de peso w : E R que transforma aristas a valores reales de peso. El peso

Más detalles

Objetivo El alumno conocerá y aplicará los conceptos de arreglo y estructura en la realización de programas que resuelvan problemas de tipo numérico.

Objetivo El alumno conocerá y aplicará los conceptos de arreglo y estructura en la realización de programas que resuelvan problemas de tipo numérico. Universidad Nacional Autónoma de México Facultad de Ingeniería ARREGLOS Y ESTRUCTURAS Objetivo El alumno conocerá y aplicará los conceptos de arreglo y estructura en la realización de programas que resuelvan

Más detalles