ANALISIS Y DISEÑO DEL ALGORITMOS

Slides:



Advertisements
Presentaciones similares

Advertisements

AED I. Estructuras de Datos.
GRAFOS HUGO ARAYA CARRASCO.
Teoría de Grafos.
PROGRAMACIÓN PARALELA EN ALGORITMOS SOBRE GRAFOS
Problemas de Decisión y Optimización
Diseño y análisis de algoritmos

Parte II. Algorítmica. 3. Algoritmos voraces.
Jorge Mondragón Leonardo Herrera Cristian Fernández
1 Single-Source Shortest Paths “Camino más corto desde/hacia una fuente” Agustín J. González ELO320: Estructura de Datos y Algoritmos 1.er. Sem
UNIDAD 2 Grafos Árboles abarcadores mínimos Caminos más cortos.
Recorridos de grafos Segunda Parte M.C. Meliza Contreras González.
Algoritmos voraces Códigos de Huffman. Descripción del problema Tenemos un archivo de entrada. Asumiremos que el archivo está compuesto de bytes (enteros.
GRAFOS ESTRUCTURA DE DATOS. INTRODUCCION Los grafos son estructuras de datos Representan relaciones entre objetos Relaciones arbitrarias, es decir No.
 E Expresión de un problema de programación lineal  A Aplicaciones de la programación lineal  S Soluciones de un problema de programación lineal.
Un grafo consta de un conjunto de vértices y un conjunto de aristas. Cada arista de un grafo se especifica mediante un par de vértices. Denotemos al conjunto.
BÚSQUEDA EN ESPACIOS DE ESTADOS Espacio de estados: modelo del mundo representado por un grafo Espacio de estados: modelo del mundo representado por un.
Profesor: Mag. Ing. Pavel Aliaga E. Facultad de Ing. de Sistemas Universidad de Lima Teoría de Grafos Estructuras Discretas en Computación.
UNIVERSIDAD NACIONAL DE TRUJILLO INGENIERÍA DE SISTEMAS Docente: Poemape Rojas Gloria Integrantes: BARRANTES NAUCA KELY EAST POMA GROBY INFANTE QUISPE.
BÚSQUEDA DE SOLUCIONES Soluciones no Informadas (cont.) Dra. Myriam Hernández A.
ALGORITMO DE DIJKSTRA BANDA DÍAZ ANA KARINA SUAREZ BARON SINDY TATIANA.
Curso Sygma. Grafos Universidad San Buenaventura Cali.
BASE DE DATOS.
LOGICA Y MATEMATICA COMPUTACIONAL
ESTRUCTURAS CONDICIONALES
PARTE II: ALGORÍTMICA Tema 4. Algoritmos voraces.
Optimización: Programación Lineal
PLANIFICACIÓN DE LAS RUTAS DE DISTRIBUCIÓN
En INCERTIDUMBRE No se conocen las probabilidades de ocurrencia de los estados naturales, por lo tanto, hay que recurrir a criterios empíricos para tomar.
PROBLEMA DEL AGENTE VIAJERO
Licenciatura en Contaduría Tema:
TAD’s ARBOLES GENERALIZADOS
TUTORIAL PSeint.
UNIDAD 2: Geometría LICEO VILLA MACUL ACADEMIA
TEORÍA DE GRAFOS -Algoritmo de Dijkstra -Algoritmo de Primm -Algoritmo de Kruskal Integrantes:
ALGORITMOS es un conjunto preescrito de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar una actividad mediante pasos.
Unidad 2. Algoritmos Unidad 4. Control de flujo
Análisis de redes Por: Alexander Miss.
Introducción a las estructuras de datos
Análisis de redes. 3.4 Problema de flujo máximo.
Grafos dirigidos: Sea G un grafo, si cada arista en G tiene una dirección entonces G se llama grafo dirigido o dígrafo y sus aristas se llaman arcos.
INTRODUCCION AL ENRUTAMIENTO “EL ROUTER”. Un router también conocido como enrutador, encaminador o rúter es un dispositivo que proporciona conectividad.
HERRAMIENTAS DE PROGRAMACIÓN
Juan José Bravo B., M.Sc. Solución de Modelos de Programación Lineal El Metodo Simplex Juan José Bravo B, M.Sc. ©
ESTRUCTURAS DISCRETAS M. Sc. PABLO CESAR TAPIA CATACORA.
Problema de la ruta mínima
Grafos Introducción y definiciones.
Localización y planeación de trayectorias
Inteligencia Artificial
Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2018
GRAFOS ESTRUCTURAS DE DATOS.
TEMAS *Arboles Binarios *listas Abiertas y Cerradas - Inserción - Recorrido - Eliminación *Pilas - Concepto - Inserción - Recorrido -
Grafos (parte 1).
Teoría Nº 3 Conceptos Básicos de Algoritmia Estructuras de Control
ANGULO YOMAIRA QUINTERO MARIA PAEZ MARIAM
OPTIMIZACIÓN EN REDES EN ALGUNOS PROBLEMAS DE OPTIMIZACIÓN PUEDE SER ÚTIL REPRESENTAR EL PROBLEMA A TRAVÉS DE UNA GRÁFICA: ruteo de vehículos, distribución.
GRAFOS ESTRUCTURA DE DATOS. INTRODUCCION Los grafos son estructuras de datos Representan relaciones entre objetos Relaciones arbitrarias, es decir No.
Tema 5: Grafos CIS - UABJB - Estructura de Datos II
Algoritmos de caminos más cortos
METODOS DE ORDENAMIENTO CHRISTIAN MICHAEL OBANDO GARCES JOAO ADRIAN BARIONUEVO.
Luis Manuel Monroy García Matemáticas discretas Ingeniería de Sistemas Universidad Simón Bolívar.
Procesamiento Digital de Imágenes. Etapas del procesamiento de imágenes Entrenamiento Captura Pre-procesamiento Segmentación Extracción de características.
s t a c b d Grafos.
Implementación de algoritmo para juegos. Algoritmo Minimax  El algoritmo de minimax en simples palabras consiste en la elección del mejor movimiento.
UNIVERSIDAD NACIONAL DEL CENTRO DEL PERU FACULTAD DE INGENIERIA DE MINAS HUANCAYO I MODELO DE REDES Ing. Eli Teobaldo Caro Meza CURSO: INVESTIGACION.
UNIDAD VI ARREGLO UNIDIMENSIONAL
Estrategia algorítmica
Grafos. Concepto: Un Grafo no es más que un conjunto de nodos o vértices que se encuentran relacionados con unas aristas. Además, los vértices tienen.
Grafos s t a c b d Grafos.
Transcripción de la presentación:

ANALISIS Y DISEÑO DEL ALGORITMOS ALGORITMOS VORACES “CAMINOS MÍNIMOS”

El esquema voraz Introducción El esquema voraz se aplica normalmente a problemas de decisión y optimización Procede por pasos: En cada paso se toma una decisión de la que estamos seguros. Las decisiones tomadas nunca se reconsideran el algoritmo termina cuando no quedan decisiones por tomar. el algoritmo es correcto si podemos garantizar que la solución encontrada es siempre óptima;

GRAFOS Un grafo, G, es un par, compuesto por dos conjuntos V y A. Al conjunto V se le llama conjunto de vértices o nodos del grafo. A es un conjunto de pares de vértices, estos pares se conocen habitualmente con el nombre de arcos o aristas del grafo. Se suele utilizar la notación G = (V, A) para identificar un grafo. Los grafos representan un conjunto de objetos donde no hay restricción a la relación entre ellos. Son estructuras más generales y menos restrictivas

Un grafo se puede representar gráficamente como un conjunto de puntos (vértices) con líneas conectándolos (arcos).

Caminos Sean x, y " V, se dice que hay un camino en G de x a y si existe una sucesión finita no vacía de aristas {x,v1}, {v1,v2},..., {vn,y}. En este caso: x e y se llaman los extremos del camino. El número de aristas del camino se llama la longitud del camino. Si los vértices no se repiten el camino se dice propio o simple. Un vértice a se dice accesible desde el vértice b si existe un camino entre ellos. Todo vértice es accesible respecto a si mismo. Un grafo cuyas aristas o vértices tienen pesos asociados recibe el nombre de grafo etiquetado o ponderado. Grafo etiquetado: G= (V, A, W), con W: A → TipoEtiq Grafo con pesos: grafo etiquetado con valores numéricos.

Representación de grafos. • Representación del conjunto de aristas, A. - Mediante matrices de adyacencia. - Mediante listas de adyacencia.

Grafos etiquetados: tipo GrafoEtiq[E]= array [1..n, 1..n] de E • El tipo E tiene un valor NULO, para el caso de no existir arista. Tipo GrafoEtiq[E]= array [1..n] de Lista[Nodo,E]

Problemas de caminos mínimos

• Problemas de caminos mínimos: – Caminos mínimos entre un nodo v y todos los demás. – Camino mínimo entre dos nodos, v y w. – Caminos mínimos entre todos los pares de nodos.

Caminos mínimos desde un origen Algoritmo de Dijkstra • Supongamos un grafo G, con pesos positivos y un nodo origen v. • El algoritmo trabaja con dos conjuntos de nodos: – Escogidos: S. Nodos para los cuales se conoce ya el camino mínimo desde el origen. – Candidatos: T. Nodos pendientes de calcular el camino mínimo, aunque conocemos los caminos mínimos desde el origen pasando por nodos de S.

Camino especial: camino desde el origen hasta un nodo, que pasa sólo por nodos escogidos, S. Idea: En cada paso, coger el nodo de T con menor distancia al origen. Añadirlo a S. • Recalcular los caminos mínimos de los demás candidatos, pudiendo pasar por el nodo cogido.

Algoritmo de Dijkstra • Inicialización: S= {1}, T= {2, ..., n}, caminos especiales mínimos = caminos directos. • Repetir n-1 veces: – Seleccionar el nodo v de T con el camino especial más corto. – Proposición: el camino mínimo para este nodo v, coincide con su camino especial. – Recalcular los caminos especiales para los nodos de T, pudiendo pasar por v.

Implementación del algoritmo de Dijkstra • Suponemos que el origen es el nodo 1. • D: array [2..n] de real. D[v] almacena el coste del camino especial mínimo para el nodo v. • P: array [2..n] de entero. P[v] almacena el último nodo en el camino especial mínimo de v. • Inicialización: D[v]:= C[1, v], P[v]:= 1 • Nodo seleccionado: nodo de T con mínimo D[v] • Actualización: para todos los w de T hacer si D[v] + C[v, w] < D[w] entonces D[w]:= D[v] + C[v, w] P[w]:= v finsi

Camino especial para w: – Sin pasar por v: D[w] – Pasando por v: D[v] + C[v,w] – Nos quedamos con el menor. Si el menor es pasando por v entonces: P[w]= v. 1 → ... → P[P[P[w]]] → P[P[w]] → P[w] → w

Algoritmo de Dijkstra C: array [1..n, 1..n] de real → Matriz de costes • Entrada: C: array [1..n, 1..n] de real → Matriz de costes • Salida: D: array [2..n] de real → Costes de caminos mínimos P: array [2..n] de entero → Nodos de paso • Datos para cálculos intermedios: S: array [2..n] de booleano → Nodos escogidos • Inicialización: para v:= 2, ..., n hacer D[v]:= C[1, v] P[v]:= 1 S[v]:= FALSE finpara

para i:= 1, ..., n-1 hacer v:= nodo con S[v]==FALSE y mínimo D[v] S[v]:= TRUE para cada nodo w adyacente a v hacer si (NOT S[w]) AND (D[v]+C[v,w]<D[w]) entonces D[w]:= D[v] + C[v, w] P[w]:= v finsi finpara

Caminos mínimos entre un nodo v y todos los demás El algoritmo de Dijkstra resuelve el problema de encontrar el camino más corto entre un vértice dado, el llamado inicial, y todos los restantes del grafo. Funciona de una forma semejante al algoritmo de Prim : supongamos que en VISTOS se tiene un conjunto de vértices tales que, para cada uno de ellos, se conoce ya cual es el camino más corto entre el vértice inicial y él. Para el resto de vértices, que se encuentran en VVISTOS, se guarda la siguiente información : (u : uVVISTOS: D[u] contiene la longitud del camino más corto desde el vértice inicial a u que no sale de VISTOS ), en realidad se dispone de esta información para todos los vértices. Una función de selección que eligiera el vértice v de VVISTOS con D[v] mínima sería muy parecida a la que selecciona el vértice con el valor de COSTMIN más pequeño en Prim.

función DIJKSTRA ( g es grafo; v_ini es vértice ) dev ( D es vector[1 función DIJKSTRA ( g es grafo; v_ini es vértice ) dev ( D es vector[1..n] de naturales ) { Pre : g=(V,E) es un grafo etiquetado con valores naturales y puede ser dirigido o no dirigido. En este caso es dirigido. Para facilitar la lectura del algoritmo se supone que el grafo está implementado en una matriz y que M[i,j] contiene el valor de la arista que va del vértice i al j y, si no hay arista, contiene el valor infinito } Para cada vV hacer D[v] := M[v_ini, v] fpara; D[v_ini]:= 0; VISTOS := añadir( conjunto_vacio, v_ini ); { Inv : u : uVVISTOS: D[u] contiene la longitud del camino más corto desde v_ini a u que no sale de VISTOS, es decir, el camino está formado por v_ini y una serie de vértices todos ellos pertenecientes a VISTOS excepto el propio u. u : u VISTOS: D[u] contiene la longitud del camino más corto desde v_ini a u} *[ |VISTOS| < |V| ---> u := MINIMO( D, uVVISTOS ); /* se obtiene el vértice uV-VISTOS que tiene D mínima */ VISTOS := VISTOS {u}; /* Ajustar D */ Para cada v  suc(g,u) tal que v VVISTOS hacer ajustar D[v] fpara; ] { Post : u : uV: D[u] contiene la longitud del camino más corto desde v_ini a u que no sale de VISTOS, y como VISTOS ya contiene todos los vértices, se tienen en D las distancias mínimas definitivas } dev ( D ) ffunción

Los valores resaltados de la tabla corresponden a valores definitivos y, por tanto, contienen la distancia mínima entre el vértice 0 y el que indica la columna. Se asume que la distancia de un vértice a si mismo es cero.

Camino mínimo entre nodo 0 y los demas

Camino mínimo entre dos nodos, a y z. 2 4 d e 3 7 a z b c f g 5 1 6

RECONSTRUCCION DE CAMINOS MINIMOS El algoritmo presentado calcula las distancias mínimas pero no mantiene la suficiente información como para saber cuales son los caminos que permiten alcanzarlos. Se puede modificar el algoritmo para almacenar la información necesaria y luego poder recuperar los caminos mínimos. Basta con anotar, cada vez que se modifica el valor de D, el vértice que ha provocado esa modificación. Si el hecho de que v entre en VISTOS hace que D[u] se modifique, es debido a que el camino mínimo del vértice inicial a u tiene como última arista la (v,u). Esta es la información que hay que guardar para cada vértice. El vector CAMINO se emplea en el siguiente algoritmo con ese propósito .

función DIJKSTRA_CAM ( g es grafo; v_ini es vértice ) dev ( D, CAMINO es vector[1..n] de natural ) { Pre : la misma que DIJKSTRA } Para cada vV hacer D[v] := M[v_ini, v]; CAMINO[v]:= v_ini fpara; D[v_ini]:= 0; VISTOS := añadir( conjunto_vacio, v_ini ); *[ |VISTOS| < |V| ---> u := MINIMO( D, uVVISTOS ); VISTOS := VISTOS{u}; Para cada v  suc(g,u) tal que v VVISTOS hacer [ D[v] > D[u] + valor( g,u,v ) ---> D[v] := D[u] + valor( g,u,v ); CAMINO[v]:= u; [] D[v]  D[u] + valor ( g,u,v ) ---> seguir ] fpara; { Post : u : uV: D[u] contiene la longitud del camino más corto desde v_ini a u que no sale de VISTOS, y como VISTOS ya contiene todos los vértices, se tienen en D las distancias mínimas definitivas. u : uV: CAMINO[u] contiene el otro vértice de la última arista del camino mínimo de v_ini a u} dev ( D, CAMINO ) ffunción

función RECONSTRUIR ( v, v_ini es vértice; CAMINO es vector[1 función RECONSTRUIR ( v, v_ini es vértice; CAMINO es vector[1..n] de vértices ) dev ( s es secuencia_aristas ) [ v = v_ini ---> s := secuencia_vacia; [] v  v_ini ---> u := CAMINO[v]; s := RECONSTRUIR( u, v_ini, CAMINO ); s := concatenar( s, (u, v) ); ] { Post : s contiene las aristas del camino mínimo desde v_ini a v } dev ( s ) ffunción

Inicialización en el Algoritmo de Dijkstra 2 4 d e 3 7 4 d e 2 3 7 z a b c f g 5 1 6 ~ Inicialización en el Algoritmo de Dijkstra

~ ~ ~ ~ ~ ~ ~ ~ ~ Paso 1 Paso 2 b 2 2 c b 2 c 2 4 1 2 3 2 4 1 2 3 z d ~ 2 3 z d e 4 a 4 ~ ~ z a d e a 4 ~ 3 7 a ~ 6 1 7 3 6 ~ 1 f g 6 1 5 f f g 5 Paso 3 Paso 4 b 2 c b 4 b 2 b c 2 4 1 2 3 2 4 1 2 3 z d e a 4 a ~ z d e z 6 a 4 7 a 3 6 1 7 3 6 1 f g f 5 f g 5 Ruta mas corta

Eficiencia del algoritmo de Dijkstra • Con matrices de adyacencia: – Inicialización: O(n) – Ejecutar n- 1 veces: • Buscar el nodo con mínimo D[v] y S[v] falso: O(n) • Actualizar los valores de los candidatos: O(n) – En total: O(n2) • Con listas de adyacencia: – Seguimos teniendo un O(n2)