Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arb Graf
Arb Graf
Tema 2:
Grafos y Arboles
Enrique Vidal Ruiz
evidal@iti.upv.es
Octubre, 2000
E. Vidal UPV
AD3-Grafos-Arboles-2
Octubre, 2000
Grafos y Arboles:
Indice
1. Deniciones
2. Arboles
3. Represemtacin de grafos y rboles
o
a
4. Recorridos bsicos de rboles
a
a
Bibliograf
a:
Cormen Leiserson y Rivest: Introduction to Algorithms, MIT press, 1990.
Aho, Hopcroft y Ullman: The Design and Analysis of Computer Algorithms,
AddisonWesley, 1974.
E. Vidal UPV
Pgina 2.1
a
AD3-Grafos-Arboles-2
Octubre, 2000
Grafos: Deniciones
Grafo Dirigido:
Es un par G = (V, A) donde V es un conjunto nito de elementos llamados
vrtices y A V V es un conjunto nito de pares ordenados de vrtices
e
e
llamados aristas. Si a = (u, v) es una arista de G, se dice que a entra o
incide en v y que a sale o emerge de u.
Grafo no Dirigido:
Es un par G = (A, V ) donde V es un conjunto nito de vrtices y
e
A {{u, v} | u, v V v = u} es un conjunto de pares no ordenados de
vrtices.
e
Equivalentemente, G es un Grafo no Dirigido si G es un Grafo Dirigido y
u, v V, (u, v) A (v, u) A. Si a = ({u, v} es un arco no dirigido,
se dice que a une a u y v y que a incide en u y en v. En lo que sigue nos
referiremos siempre a Grafos Dirigidos, a menos que se indique lo contrario.
E. Vidal UPV
Pgina 2.2
a
AD3-Grafos-Arboles-2
Octubre, 2000
Pgina 2.3
a
AD3-Grafos-Arboles-2
Octubre, 2000
Pgina 2.4
a
AD3-Grafos-Arboles-2
Octubre, 2000
Arboles
Bosque: Es un grafo no dirigido ac
clico.
Arbol Libre: Es un grafo no dirigido ac
clico conexo.
Teorema 1.
Si G es un grafo con M > 2 vrtices, entonces los
e
siguientes predicados son equivalentes:
1. G es un rbol libre
a
2. G es conexo y tiene M 1 aristas
3. Cualquier par de vrtices estn conectados por un unico camino
e
a
Pgina 2.5
a
AD3-Grafos-Arboles-2
Octubre, 2000
Arboles Enraizados
camino de la r a v:
Se dice que un vrtice u es Antecesor o Predecesor de v, si u est en C. En
e
a
este caso tambin se dice que v es Descendiente o Sucesor u,
e
Si (u, v) es la ultima arista de C, se dice que u es el (nico) Padre de v y se
u
denota como u = p(v). As
mismo, se dice que v es un Hijo de u. El conjunto de
hijos de un vrtice se denota como hijos().
e
Dos vrtices , de A son Hermanos, si p( ) = p().
e
Se dice que un vrtice es una Hoja si hijos() = . Nodos Internos son
e
aquellos vrtices que no son hojas.
e
La Profundidad de v en A es la longitud de del camino C desde la ra hasta v.
z
Altura de A, h(A), es la profundidad de la hoja de mxima profundidad.
a
El Grado de un vrtice se dene como la talla de hijos().
e
E. Vidal UPV
Pgina 2.6
a
AD3-Grafos-Arboles-2
Octubre, 2000
Arboles Binarios
E. Vidal UPV
Pgina 2.7
a
AD3-Grafos-Arboles-2
Octubre, 2000
Pgina 2.8
a
AD3-Grafos-Arboles-2
Octubre, 2000
Pgina 2.9
a
AD3-Grafos-Arboles-2
Octubre, 2000
Orden Simtrico
e
A
A
B
I
J
C
E
C
E
Orden Posterior
F
I
D
G
F
I
E. Vidal UPV
Pgina 2.10
a
AD3-Grafos-Arboles-2
Octubre, 2000
Representacin de Grafos
o
E. Vidal UPV
Pgina 2.11
a
AD3-Grafos-Arboles-2
Octubre, 2000
Matriz de Adyacencia
Grafo Dirigido
G
5
2
4
4
2
3
Grafo No Dirigido
G
1
E. Vidal UPV
2
3
Pgina 2.12
a
AD3-Grafos-Arboles-2
Octubre, 2000
Representaciones Espec
cas para Arboles: Ejemplos
hijoMasIzq(v)
p(v)
elem(v)
hermDer(v)
B
-
Q
-
E. Vidal UPV
B
-
B
-
W
- - - - - -
Q
- - - - - -
p(v)
elem(v)
hijos(v)
- -
A
- - - - - -
F
- -
B
- - - - - -
Pgina 2.13
a
AD3-Grafos-Arboles-2
Octubre, 2000
Representaciones Espec
cas para Arboles (cont.)
10
T:
2
j
6
8
h
E. Vidal UPV
4 5
c
10
i
7
2
Pgina 2.14
a
AD3-Grafos-Arboles-2
Octubre, 2000
p(v)
elem(v)
der(v)
izq(v)
A
-
Representacin espec
o
ca de un AB, A en un vector, V (particularmente util si A
es (Casi-)Completo): Un nodo es un
ndice i del vector, y V [i] almacena elem(i);
es decir, la informacin adicional convnienete para la aplicacin.
o
o
g
$%#201)'$%#"
! ( & !
$%#! 3
E. Vidal UPV
p(i) = i/2
izq(i) = 2 i
der(i) = 2 i + 1
raiz(A) = 1
Pgina 2.15
a
AD3-Grafos-Arboles-2
Octubre, 2000
/* Matriz de Adyacencia */
Pgina 2.16
a
AD3-Grafos-Arboles-2
Octubre, 2000
/* ====================================================================== */
void main(int argc, char *argv[]) {
Arista *a,*b;
oat grado=3.0; int i,j, fil,col, tll, semilla=1, talla=5,
lisDosGraf=0, listaMat=0, noDirigido=0, leerAris=0;
/* -------------------------------------------------------------------breve ayuda on-line */
#dene printHelp(mensaje) fprintf(stderr, "
Prueba de Estructuras de Datos para representacin de Grafos: Genera una
o
Matriz de Adyacencia aleatoria (o la lee de stdin), la convierte a Lista
de Adyacencia y produce listados de los grafos en formato grfico dot.\n
a
Uso: %s [Opciones]
Opciones:
-h
Muestra esta ayuda
-l
Lee las Aristas por la entrada standard (stdin)
-d
Lista dos grafos, el segundo a partir de la Lista de Adyacencia
-m
Lista la matriz de adyacencia (por stderr)
-N
Genera un Grafo No Dirigido
-s <num> Semilla para la generacin datos aleatorios {0..%d}[%d]
o
-t <num> Talla (nmero de vrtices) del Grafo a generar {1..%d}[%d]
u
e
-g <num> grado medio (aristas/nodos) del Grafo a generar {1..%d}[%3.1f]
%s\n", argv[0], maxSem,semilla, maxNodos,talla, talla,grado, mensaje);
E. Vidal UPV
Pgina 2.17
a
AD3-Grafos-Arboles-2
Octubre, 2000
Pgina 2.18
a
AD3-Grafos-Arboles-2
Octubre, 2000
*/
*/
*/
*/
Pgina 2.19
a
AD3-Grafos-Arboles-2
Octubre, 2000
E. Vidal UPV
Pgina 2.20
a
AD3-Grafos-Arboles-2
Octubre, 2000
E. Vidal UPV
Pgina 2.21
a
AD3-Grafos-Arboles-2
Octubre, 2000
Pgina 2.22
a
AD3-Grafos-Arboles-2
Octubre, 2000
0
0
0
1
0
1
0
1
0
1
1
0
1
0
0
0
1
1
0
1
1
1
0
1
0
E. Vidal UPV
V1
V3
V2
1
4
0
2
Pgina 2.23
a
AD3-Grafos-Arboles-2
Octubre, 2000
V4
2->1;
3->1;
5->1; 5->2;
7->3; 7->4; 7->6;
V2
V0
edge [dir=forward]
V0->V5; V0->V3; V0->V2;
V1->V5; V1->V3; V1->V2;
V2->V7; V2->V5; V2->V4; V2->V1; V2->V0;
V3->V7; V3->V1; V3->V0;
V4->V7; V4->V2;
V5->V2; V5->V1; V5->V0;
V6->V7;
V7->V6; V7->V4; V7->V3; V7->V2;
}
0: 0 0 1 1 0 1 0 0
1: 0 0 1 1 0 1 0 0
2: 1 1 0 0 1 1 0 1
7
3: 1 1 0 0 0 0 0 1
4: 0 0 1 0 0 0 0 1
5: 1 1 1 0 0 0 0 0
6: 0 0 0 0 0 0 0 1
7: 0 0 1 1 1 0 1 0
V7
V6
V5
V1
V3
5
1
4
2
0
3
Pgina 2.24
a