tema4 eltadgrafomcast/esdatos/grafos/grafo.pdf · tema4 2005-2006 especgrafosdirigidos...
TRANSCRIPT
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 1
Tema 4
2005 -2006
El TAD GrafoObjetivosq Estudiar la especificación del TAD Grafo
q Presentar diferentes alternativas de implementación
q Conocer los algoritmos más importantes de manipulación de grafos
Contenidos4.1 Conceptos4.2 Especificación algebraica4.3 Implementación4.4 Recorridos sobre grafos4.4.1 Recorrido en anchura4.4.2 Recorrido en profundidad
4.5 Caminos mínimos sobre grafos4.5.1 Algoritmo de Dijkstra4.5.2 Algoritmo de Floyd
4.6 Árbol de extensión de coste mínimo
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 2
Tema 4
2005 -2006
Duración
q 6 clases (9 h)
Bibliografía
q Estructuras de datos: especificación, diseño e implementaciónAutor: Xavier Franch GutiérrezEditorial : Ediciones UPC, 1999Págs. 303-352
q Estructuras de datos. Algoritmos, abstracción y objetosAutores: Luis Joyanes Aguilar, Ignacio Zahonero MartínezEditorial: McGraw-HillPágs. 417-496
q Estructuras de datos y métodos algorítmicosAutores: Narciso Martí Oliet, Yolanda Ortega Mallén y José Alberto Verdejo LópezEditorial: Prentice HalllPágs. 231-276
El TAD Grafo
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 3
Tema 4
2005 -2006
4.1 Conceptosq Un grafo es una estructura capaz de representar relaciones complejas entre objetos de un
mismo tipo. Formalmente se representa mediante el par G = (V, A), donde:
q V es un conjunto de objetos llamados vértices o nodosq A es un conjunto de objetos denominados aristas o arcosq Las aristas representan relaciones entre los vértices, de forma que una arista es
un par (u, v) de vértices de Vq Básicamente, podemos clasificar los grafos en 4 tipos dependiendo de dos criterios:
q Grafo dirigido. Es aquel cuyas aristas forman pares ordenados (u à v).
q Grafo no dirigido. Es aquel cuyas aristas no son pares ordenados
q Grafo etiquetado o valorado. Cuando se asocia información a cada arista de un grafo
q Grafo no etiquetado. Cuando no se asocia ninguna información a las aristas
q La teoría de grafos se aplica a campos tan diversos como química, geografía, ingenieríaeléctrica, comunicaciones, etc.
El TAD Grafo
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 4
Tema 4
2005 -2006
q Un ejemplo de grafo podría ser la red de metro de Madrid, donde los vértices representanlas estaciones y las aristas la línea que une dos estaciones:
q Otro ejemplo de aplicación de los grafos es la construcción de modelos donde se estudianlas relaciones de precedencia que existen entre las tareas que se necesitan para completarun trabajo
El TAD Grafo
Sol Gran V ía Tribunal
Plaza deEspaña
Opera Callao
Tirso deMolina
130
120150
120
160
125
145
17595Sol Gran V ía Tribunal
Plaza deEspaña
Opera Callao
Tirso deMolina
130
120150
120
160
125
145
17595
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 5
Tema 4
2005 -2006
q Algunas definiciones sobre grafos:
§ Un camino en un grafo G = (V, A) es una secuencia de vértices v1, ..., vn Î V,
con n ³ 1, tal que (vi, vi+1) Î A, para i = 1, ..., n-1
§ La longitud de un camino es su número de vértices menos 1
§ Un camino es simple si todos sus vértices, excepto tal vez el primero y el
último, son distintos
§ Un ciclo es un camino simple de longitud no nula que empieza y termina en el
mismo vértice
§ En un grafo no dirigido, el grado de un vértice v es el número de aristas que
contiene a v§ Se dice que el vértice y es sucesor o adyacente del vértice x si existe una
arista que tenga por origen a x y por destino a y, es decir, si la arista (x, y) Î A
§ Se dice que el vértice x es antecesor del vértice y si existe una arista que tenga
por origen a x y por destino a y, es decir, si la arista (x, y) Î A
El TAD Grafo
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 6
Tema 4
2005 -2006
§ En un grafo dirigido se distingue entre el grado de entrada y el grado de salida: elgrado de entrada de un vértice v es el número de aristas que llegan a v(antecesores), y el grado de salida de un vértice v es el número de aristas que salende v (sucesores).
Ejemplo 1: Grafo no dirigidoNúmero de nodos:Número de aristas:V = { }A = { }Camino =Ciclo =Grado (v3) =Adyacentes (v3) = { }
El TAD Grafo
v2 v3
v1 v4
v2 v3
v1 v4
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 7
Tema 4
2005 -2006
Ejemplo 2: Grafo DirigidoNúmero de nodos:Número de aristas:V = { }A = { }Camino =Ciclo =GradoEnt (v2) =GradoSal(v2)=Adyacentes (v3) = { }Antecesores (v3) =Antecesores (v2) = { }
El TAD Grafo
v2
v1 v3
v2
v1 v3
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 8
Tema 4
2005 -2006
El TAD Grafo
v2
v3
v1
v4
v5
v2
v3
v1
v4
v5
v2 v3
v1 v4
v5
v2 v3
v1 v4
v5
Grafo conexo
§ Un grafo dirigido es fuertemente conexo si existeun camino entre cualquier par de nodos que formanel grafo
v2 v3
v1
v4
v5
v2 v3
v1
v4
v5
Grafo No conexo
§ Un grafo no dirigido G es conexo si existe un camino entre cualquier par de
nodos que forman el grafo.
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 9
Tema 4
2005 -2006
4.2 Especificación Algebraica
q Puesto que el grafo es un conjunto de vértices y aristas, la signatura del TAD grafo deberácontener, al menos, las operaciones de añadir vértices y aristas a un grafo
q El resto de las operaciones dependerá de la aplicación que se vaya a dar al TAD
q Definiremos un TAD para los grafos dirigidos, con las operaciones básicas para suconstrucción, así como las operaciones de cálculo de vértices adyacentes a uno dado ylas de pertenencia de arista y de vértice.
El TAD Grafo
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 10
Tema 4
2005 -2006
espec grafosDirigidosusa booleanos, conjuntoparámetro formal
género vérticeoperaciones
_ == _: vértice vértice à booleano_ ¹ _: vértice vértice à booleano
fpfrenombrar conjunto<vértice> por conjVértices
conjunto<(vértice, vértice)> por conjAristasgénero grafooperaciones
gVacío: à grafo
+vértice: grafo vértice à grafo
parcial +arista: grafo vértice vértice à grafo
_ Î _ : vértice grafo à booleano
( _, _ ) Î _ : vértice vértice grafo à booleano
esVacío: grafo à booleano
adyacentes: grafo vértice à conjVértices
-vértice: grafo vértice à grafo
-arista: grafo vértice vértice à grafo
vértices: grafo à conjVértice
aristas: grafo à conjAristas
Gen (grafo) = { gvacio, +vértice, +arista }
Mod (grafo) = {-vértice, -arista}
Obs (grafo) = { _ Î _ , ( _, _ ) Î _ , adyacentes, esVacío,
vértices, aristas}
El TAD Grafo
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 11
Tema 4
2005 -2006
dominios de definición g: grafo; v1,v2: vértice
+arista (g,v1,v2) está definido sólo si v1Îg Ù v2Îg
ecuaciones g: grafo; v,v1,v2,v3,v4: vértice
+vértice (+vértice (g, v1), v2) =
+arista (+arista (g, v1, v2), v3, v4) =
+arista (+vértice (g, v1), v2, v3) =
v Î gVacío =
v1 Î +vértice (g, v2) =
v1 Î +arista (g, v2, v3) =
El TAD Grafo
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 12
Tema 4
2005 -2006
(v1, v2) Î gVacío =
(v1, v2) Î +vértice (g, v3) =
(v1, v2) Î +arista (g, v3, v4) =
esVacío (gVacío) =
esVacío (+vértice (g, v)) =
esVacío (+arista (g, v1, v2)) =
adyacentes (gVacío, v) =
adyacentes (+vértice (g, v1), v2) =
adyacentes (+arista (g, v1, v2), v3) =
El TAD Grafo
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 13
Tema 4
2005 -2006
-vértice (gVacío, v) =
-vértice (+vértice (g, v1), v2) =
-vértice (+arista (g, v1, v2), v3) =
-arista (gVacío, v1, v2) =
-arista (+vértice (g, v1), v2, v3) =
-arista (+arista (g, v1, v2), v3, v4) =
El TAD Grafo
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 14
Tema 4
2005 -2006
vértices (gVacío) =
vértices (+vértice (g, v)) =
vértices (+arista (g, v1, v2)) =
aristas (gVacío) =
aristas (+vértice (g, v)) =
aristas (+arista (g, v1, v2)) =
El TAD Grafo
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 15
Tema 4
2005 -2006
El TAD Grafo4.3 Implementación
q Un Vértice es un objeto con un atributo de tipo genérico
template <typename T>class Vertice {public:
Vertice(const T& objeto);const T& getObj() const;void setObj(const T& objeto);
private:T obj;
};
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 16
Tema 4
2005 -2006
El TAD Grafoq Una Arista es un objeto con tres atributos: dos vértices y opcionalmente una etiqueta
template <typename T, typename U>class Arista {public:
Arista(const Vertice<T>& vo, const Vertice<T>& vd, const U& etiq);const Vertice<T>& getOrigen() const;const Vertice<T>& getDestino() const;const T& getEtiqueta() const;void setOrigen(const Vertice<T>& orig);void setDestino(const Vertice<T>& dest);void setEtiqueta(const U& etiq);
private:Vertice<T> origen;Vertice<T> destino;U etiqueta;
};
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 17
Tema 4
2005 -2006
El TAD Grafoq Interfaz informal de la clase Grafo:
template <typename T, typename U>class Grafo{
public:Grafo();bool esVacio() const;bool estaVertice(const Vertice<T>& v) const;bool estaArista(const Arista<T, U>& a) const;const Conjunto<Vertice<T> >& vertices() const;const Conjunto<Arista<T, U> >& aristas() const;const Conjunto<Vertice<T> >& adyacentes(const Vertice<T>& v) const;const Conjunto<Vertice<T> >& antecesores(const Vertice<T>& v) const;void insertarVertice(const Vertice<T>& v);void insertarArista(const Arista<T, U>& a);void eliminarVertice(const Vertice<T>& v);void eliminarArista(const Arista<T, U>& a);
}
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 18
Tema 4
2005 -2006
q Existen básicamente 3 formas de implementar los grafos: una estática y dos dinámicas. Laelección de cada una de ellas dependerá de las operaciones que se vayan a aplicar sobrelos vértices y las aristas
El TAD Grafo
4.3.1 Matriz de Adyacencia
§ Sea G = (V, A) un grafo de n nodos, donde suponemos que los nodos V = {v1, v2,... , vn}están ordenados y podemos representarlos por sus ordinales {1, 2,... , n}
§ La matriz de adyacencia para el grafo G es una matriz A de dimensión n x n deelementos booleanos en la que:
A[i, j] = verdad, si y sólo si existe una arista en G que va del vértice i al vértice jA[i, j] = falso, en caso contrario
§ En un grafo no dirigido, la matriz de adyacencia es simétrica y los elementos de sudiagonal son todos falsos
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 19
Tema 4
2005 -2006
El TAD Grafo§ El tipo necesario para representar un grafo mediante matriz de adyacencia es:
template <typename T, typename U>class Grafo{
public:// métodos de la interfaz informal
private:enum { N = …};bool m[N][N];int nv;
}
§ Esta representación es útil para aquellos problemas donde se necesite saber si existe unaarista entre dos vértices dados, ya que es de orden constante O(1).
§ El principal inconveniente es que se necesita un espacio de O(n2) aunque el grafo tenga muypocas aristas.
J M
F
T
E
J M
F
T
E
EFJMT
E F J M TF V V V FF F F F FF F F V FF F V F FV V F F F
M =V = {E, F, J, M, T}
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 20
Tema 4
2005 -2006
El TAD Grafo
J M
F
T
E
J M
F
T
E
EFJMT
E F J M T
M =
Huelva
CádizCórdoba
Sevilla
2
3
2
2
4
5
Huelva
CádizCórdoba
Sevilla
2
3
2
2
4
5
CA CO HU SE
M =
Para un grafo con aristasetiquetadas, la matriz sedeclararía de la forma:
U* m[N][N];
Donde U es el parámetro de tipopara la etiqueta de las aristas
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 21
Tema 4
2005 -2006
El TAD Grafoq Algoritmo del método adyacentes para un grafo no etiquetado:
Conjunto<int> adyacentes(int v) constvar
Conjunto<int> c;fvar;inicio
para i = 1 hasta nv hacersi m[v][i] entonces
c.poner(i)fsi
fpara;devolver c
fin;
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 22
Tema 4
2005 -2006
El TAD Grafo4.3.2 Listas de Adyacencia
§ Esta representación consiste en n listas, de forma que la lista i-ésima contiene losvértices adyacentes al vértice i
§ Una posible representación podría ser:
template <typename T, typename U>class Grafo{
public:// métodos de la interfaz informal
private:Lista<Vertice<T> > *G;int nv;
}
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 23
Tema 4
2005 -2006
El TAD Grafo
1 3
4
2
5
1 3
4
2
5
2
1 3 4
32
1
2
3
4
5
G
2
1 3 4
32
1
2
3
4
5
G
1 4
2
5
3
1 4
2
5
3
2
1 5
5
32
1
2
3
4
5
G
4
1 5
4
2
1 5
5
32
1
2
3
4
5
G
4
1 5
4
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 24
Tema 4
2005 -2006
El TAD Grafoq Algoritmo del método adyacentes:
Conjunto<int> adyacentes(int v) constvar
Conjunto<int> c;Lista<int>::Iterador it;
fvar;inicio
it = G[v].principio();mientras it ¹ G[v].final() hacer
c.poner(it.observar(G[v]));it.avanzar(G[v])
fpara;devolver c
fin;
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 25
Tema 4
2005 -2006
q Esta representación resulta útil cuando el número de vértices se conocepreviamente y permanece fijo durante la resolución del problema, pero resultaineficiente si necesitamos añadir o eliminar vértices en tiempo de ejecución
q Por tanto, para un caso más general, podemos utilizar, en lugar de una tabla, unalista enlazada para almacenar la información de los vértices
El TAD Grafo
template <typename T, typename U>class Grafo{
public:// métodos de la interfaz informal
private:Lista<Adyacencia<T> > G;
}
template <typename T>class Adyacencia{
public:// métodos tipo get/set
private:Vertice<T> v;Lista<Vertice<T> > adyacentes;
}
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 26
Tema 4
2005 -2006
El TAD Grafo
Huelva
CádizCórdoba
SevillaHuelva
CádizCórdoba
Sevilla
Huelva
Sevilla
Cádiz
Córdoba
G
Sevilla
Huelva Cádiz Córdoba
Huelva
HuelvaHuelva
SevillaSevilla
CádizCádiz
CórdobaCórdoba
G
SevillaSevilla
HuelvaHuelva CádizCádiz CórdobaCórdoba
HuelvaHuelva
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 27
Tema 4
2005 -2006
El TAD Grafo
template <typename T, typename U>class Grafo{
public:// métodos de la interfaz informal
private:Lista<Adyacencia<T, U> > G;
}
template <typename T, typename U>class Adyacencia{
public:// métodos tipo get/set
private:Vertice<T> v;Lista<VerticeAdy<T, U> > adyacentes;
}
q Para un grafo con aristas etiquetadas, cada objeto almacenado en la listaadyacentes debe contener no sólo el vértice sino también la información asociadaa la arista
template <typename T, typename U>class VerticeAdy: public Vertice<T>{
public:// métodos getEtiqueta/setEtiqueta
private:U etiqueta;
}
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 28
Tema 4
2005 -2006
El TAD Grafo
Huelva
CádizCórdoba
SevillaHuelva
CádizCórdoba
Sevilla
70
60
80
75
150
Huelva
Sevilla
Cádiz
Córdoba
G
Sevilla
Huelva Cádiz Córdoba
Huelva
HuelvaHuelva
SevillaSevilla
CádizCádiz
CórdobaCórdoba
G
SevillaSevilla
HuelvaHuelva CádizCádiz CórdobaCórdoba
HuelvaHuelva
60
70 75 80
150
Grafo Etiquetado con Pesos
Representación mediante
Listas de Adyacencia
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 29
Tema 4
2005 -2006
q Se utilizan para grafos dirigidos, si lo que queremos saber es, de forma eficiente, losantecesores de un determinado nodo
q Se utiliza otra tabla de listas cuya lista i-ésima contiene los vértices antecesores al vértice i.Dicha lista se conoce con el nombre de lista de antecesores
q Una lista múltiple de adyacencia es una estructura de datos que une ambas tablas en unaúnica estructura
q Hay un nodo por cada arista del grafo
q Cada nodo guarda la información de dos vértices (origen y destino de la arista) y dospunteros
§ el primero apunta al nodo que almacena la siguiente arista que tiene el mismo vértice destino
§ el segundo apunta al nodo que almacena la siguiente arista que tiene el mismo vértice origen
El TAD Grafo4.3.3 Listas múltiples de adyacencia
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 30
Tema 4
2005 -2006
El TAD Grafotemplate <typename T, typename U>class GrafoDirigido{
public:typedef NodoGM<T, U>* PtrNodoGM;// métodos de la interfaz informal
private:PtrNodoGM *adyacentes;PtrNodoGM *antecesores;
}
template <typename T, typename U>class nodoGM{
public:typedef NodoGM<T, U>* PtrNodoGM;// métodos tipo get/set
private:Vertice<T> origen, destino;// Para grafos etiquetados:// U etiqueta;PtrNodoGM sigAdy, sigAnt;
}
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 31
Tema 4
2005 -2006
El TAD Grafo1 3
4
2
5
1 3
4
2
5
1
2
3
4
5
1 2 3 4 5
1 2
2 1 2 3 2 4
5 2 5 3
listas deadyacencia
listas deadyacenciainversa
1
2
3
4
5
1 2 3 4 5
1 2
2 1 2 3 2 4
5 2 5 3
listas deadyacencia
listas deadyacenciainversa
listas deantecesores
origen destino
mismodestino
mismoorigen
origen destino
mismo
(sigAnt)
mismoorigen
(sigAdy)
ORIGEN
DESTINO
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 32
Tema 4
2005 -2006
El TAD Grafoq Algoritmo del método adyacentes:
Conjunto<int> adyacentes(int v) constvar
Conjunto<int> c;PtrNodoGM p;
fvar;inicio
p = adyacentes[v];mientras p ¹ NULO hacer
c.poner(p->getDestino());p = p->getSigAdy();
fpara;devolver c
fin;
Por ejemplo, en el grafo anterior:
Adyacentes (2) = { }
Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 33
Tema 4
2005 -2006
El TAD GrafoEficiencia de las operaciones
n: número de vértices
m: número de aristas
gE: grado máximo de entrada
gS: grado máximo de salida
eliminarVertice
insertarVertice
vertices
aristas
adyacentes
antecesores
estaArista
estaVertice
esVacio
eliminarArista
insertarArista
Grafo
Lista MúltipleLista Simple(1)MatrizOperación
(1) Se refiere a la versión en la que se usa unatabla para almacenar la información de los vértices