grafos y Árboles (algoritmo)

42
TEORÍA DE LOS GRAFOS Un grafo G es un par ordenado G (V,E), donde: V es un conjunto no vacio, cuyos elementos son llamados vértices. E es un conjunto de pares de elementos de V, que son llamados arcos Ej.: G1 G2 1 2 3 a b c

Upload: walter-sotelo

Post on 27-Oct-2015

45 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Grafos y Árboles (algoritmo)

TEORÍA DE LOS GRAFOS

Un grafo G es un par ordenado G (V,E), donde:V es un conjunto no vacio, cuyos elementos son llamados

vértices.E es un conjunto de pares de elementos de V, que son llamados

arcosEj.:

G1 G2

1

2

3

a

b c

Page 2: Grafos y Árboles (algoritmo)

TEORÍA DE LOS GRAFOS

Un arco es (no) orientado o (no) dirigido si (no) hay una dirección asignada a él. Un grafo es (no) orientado si todos sus arcos son (no) orientados

<i,j> denota el arco dirigido de i a j(i,j) denota el arco no dirigido

Ej.:G1 = (V1,E1) V1 = {1,2,3}

E1 = {(1,2),(2,3),(1,3)}

G2 = (v2,E2) V2 = {a,b,c}E2 = {<a,b>,<a,c>}

Page 3: Grafos y Árboles (algoritmo)

GRAFOS NO ORIENTADOS: G = (V,E)

1. Los vértices i y j son adyacentes si (i,j) ϵ E, y se dice que (i,j) es incidente sobre i y j. Por lo tanto es adyacente si existe un arco que los conecte.

2. El grado o valencia del vértice i (di) es el número de arcos incidentes sobre i.

Ej.: En G3.- d1 = 3, d2 = 2, d3 = 2, d4 = 1

2

3

4

1

G3 1 y 2 son adyacentes

1 y 3 son adyacentes

(1,4) es incidente sobre 1 y 4

Page 4: Grafos y Árboles (algoritmo)

GRAFO COMPLETO

G es completo si tiene n(n-1) 2 arcos (Kn)

Donde Kn = el grafo completo de n vérticesEj.:

SUBGRAFO: Dado un grafo G, el grafo no orientado H = (V1,E1) es un subgrafo de G = (V,E) si V1 ᴄ V, E1 ᴄ E

Ej.: Un subgrafo de K4 es:

1 2

3 4

n = 4Kn = 6

K4

1 2

3

K3

K3 es subgrafo de K4

Page 5: Grafos y Árboles (algoritmo)

CAMINO

CAMINO: Un camino del vértice i1 al vértice ik es una secuencia de vértices P = i1 i2 i3 i4……ik, tal que (ij, ij+1) ϵ E, j = 1,2, ….. , k-1

Ej.: En K4, P = 1,2,4 es un camino de 1 a 4.CAMINO SIMPLE: El camino P es simple si ningún vértice se repite, exceptuando posiblemente el primero y el último vértices, y los arcos son diferentes.Ej.: en K4, P = 1,2,1 (no es camino simple) P = 1,2,3,1 (si es simple y es un camino cerrado) P = 1,2,3,4 (es simple)

Page 6: Grafos y Árboles (algoritmo)

CICLO

Un ciclo es un camino simple y cerrado (los vértices extremos son idénticos)

Ej. En k4: P = 2,3,1,2 es ciclo P = 2,3,1,4,2 es ciclo

Page 7: Grafos y Árboles (algoritmo)

GRAFO CONEXO

Un grafo G = (V,E) es conexo (conectado), si para cada par de vértices distintos i,j, existe un camino de i a j.Ej.:

A D

B

E

F

G

C

A

B

C

D

E

FG8

G9

NO ES CONEXO

NO ES CONEXO

Page 8: Grafos y Árboles (algoritmo)

El subgrafo G1 = (V1,E1) del grafo G = (V,E) es una componente conexa, si G1 es un subgrafo conexo maximal, esto es, no existe un subgrafo G2 = (V2,E2) conexo tal que V1 ᴄ V2 y E1 ᴄ E2.

COMPONENTE CONEXO

A

B

C

D

E

FG8

Page 9: Grafos y Árboles (algoritmo)

BICONEXIDAD1. v es un punto de articulación para un grafo G si existen vértices

distintos x y w <> v, tal que v está en todo camino de x a w.2. G es biconexo si no tiene puntos de articulación.

3. Una componente biconexa de un grafo G es un subgrafo de G que es biconexo maximal.

A B

C D

G10

3

1 24

6

5

G11

3

1 24

6

52

4

Componentes básicas de G11

Page 10: Grafos y Árboles (algoritmo)

ÁRBOLES

Un grafo es acíclico, si no tiene ciclos.

Un árboles un grafo acíclico y conexo

A

B

C

D

A B

C D

Page 11: Grafos y Árboles (algoritmo)

GRAFOS ORIENTADOS

• El arco orientado <i,j> es incidente a j, incidente desde i. El vértice i es adyacente a j, y j es adyacente desde i.

in• INVALENCIA: El grado de entrada del vértice i (di ) es el

número de arcos incidentes a i.

out

• EXVALENCIA: El grado de salida del vértice i (di ) es el número de arcos incidentes desde i.

1

3

2

<1,2> es incidente a 2 es incidente desde 1

Page 12: Grafos y Árboles (algoritmo)

• G es completo, si tiene n(n-1) arcos K0n

• Un Subgrafo es otro grafo con un subconjunto de vértices del conjunto de vértices.

• Un camino orientado es una secuencia de vértices• Un ciclo orientado es un camino orientado, donde el vértice

inicial es a su vez el vértice final. El ciclo orientado a su vez se conoce como Circuito.

2

1

3

C

E

D

A

B

CDE no es un caminoABCD es un camino simpleABCEA es un ciclo orientado

Page 13: Grafos y Árboles (algoritmo)

• Un grafo es fuertemente conexo si para cada par de vértices distintos i ≠ j existe un circuito que los contiene.Ej.:

G20 G21Si es fuertemente conexo No es fuertemente conexo

• Una componente fuertemente conexa es un subgrafo fuertemente conexo maximal. Ej.:

1

2 3

4

4

32

1

1

2 3

4

1

2 3

4

G22 H1 y H2 son comp. fuertemente conexas de G22

H1

H2

Page 14: Grafos y Árboles (algoritmo)

• Una secuencia de vértices P = i1, i2, ……, ik, es un semicamino o

cadena en G si <ij, ij+1> ϵ E ó <ij+1, ij> ϵ E, ó ambos están en E.

P = 1,2,3,4 es un semicamino

• Semicamino simple: es un camino en el cual, ningún vértice o arco se repite.

• Semiciclo: es un semicamino simple cerrado

1

4

3

2G23

Page 15: Grafos y Árboles (algoritmo)

• Un grafo orientado G = (V,E) es débilmente conexo si para cada par de vértices distintos i ≠ j existe un semicamino en G de i a j.Ej.:

2

4

1

3

H1

H2

G24

G23 sí es débilmente conexoG24 no es débilmente conexo

H1 y H2 son las componentesdébilmente conexas de G24

Page 16: Grafos y Árboles (algoritmo)

ÁRBOL ORIENTADO

• Un árbol orientado es un grafo orientado que es débilmente conexo y que no posee semiciclos.Ej.: G23

• ÁRBOL CON RAIZ: Un árbol con raiz o enraizado es un árbol orientado en la que un solo vértice tiene grado de entrada 0 y los otros tienen grado de entrada 1.Ej.:

4

3

1

2Raíz

Page 17: Grafos y Árboles (algoritmo)

REPRESENTACIÓN DE GRAFOS

Page 18: Grafos y Árboles (algoritmo)

1. MATRIZ DE ADYACENCIA

A = [aij] ; A : n * n

A) CASO NO ORIENTADO.-

1: si existe el arco (i,j) ϵ Eaij =

0: de otro modoEj.:

1 2

3 4

5

0 1 1 0 01 0 1 1 01 1 0 0 10 1 0 0 10 0 1 1 0

A =

En general, A es simétrica, la diagonal principal es nula

Page 19: Grafos y Árboles (algoritmo)

1. MATRIZ DE ADYACENCIA

B) CASO ORIENTADO.-

1: si <i,j> ϵ Eaij =

0: de otro modoEj.:

21

34

0 1 0 00 0 1 00 0 0 00 1 0 0

A =

En general, A no es simétrica

Page 20: Grafos y Árboles (algoritmo)

C) GRAFO (ORIENTADO O NO) CON PESOS.-

W(i,j) : si (i,j) ϵ Eaij = <i,j> ϵ E

C : de otro modo (C: Constante)Ej.:

1. MATRIZ DE ADYACENCIA

1

3

2

5

4

5

25

10

6

3216

14C 25 C C CC C 10 14 C5 C C C 16C 6 C C CC C C 32 C

A =

C: Valor muy grande si es utilidad (M). Si W es costo, M es pequeño

G26

Page 21: Grafos y Árboles (algoritmo)

2. LISTAS ENLAZADAS DE ADYACENCIANIL

Vértice

Ej.: Lista de adyacencia de G25:

2

1

1

2

3NIL

4NIL3

2

5NIL

5NIL

4NIL3

1

2

3

4

5

Page 22: Grafos y Árboles (algoritmo)

2. LISTAS ENLAZADAS DE ADYACENCIA

Ej.: Lista de adyacencia de G26:

2

4

5

2

10

NIL

NIL3

NIL

NIL

NIL4

1

2

3

4

5

25

14

16

6

32

1 5

Page 23: Grafos y Árboles (algoritmo)

ÁRBOLES PARCIALES MÍNIMOS• Un árbol parcial para un grafo G = (V,E) es un subgrafo que es

árbol y contiene a todos los vértices de G.Sea G = (V,E,W) un grafo con pesos, el peso de un subgrafo es la suma de los pesos de los arcos del subgrafo.Un árbol parcial mínimo es un árbol parcial de peso mínimo o de costo mínimo.Ej.:

1

32

1

32

2

2

1

32

2 2

11

1

Sus árbolesParcialesMínimos: El árbol parcial

Mínimo no esúnico

Page 24: Grafos y Árboles (algoritmo)

ALGORITMO DIJKSTRA / PRIM1. Vértice de árbol: es un vértice que ya está en el árbol que se ha construido

hasta ese momento.2. Vértice vecino: es un vértice que no es del árbol, pero que es adyacente a

uno.3. Vértice no visto: es un vértice que no es del árbol y tampoco es vecino.

Un arco candidato del vértice vecino “y”, es el arco (x,y) con x vértice del árbol que es de peso mínimo.El algoritmo sería:

Seleccionar un vértice vecinoMientras hay vértices vecinos hacer:

Seleccionar un arco de peso mínimo entre un vértice de árbol y un vértice vecino.Añadir tal arco y vértice vecino al árbol

Fin Mientras

Page 25: Grafos y Árboles (algoritmo)

ALGORITMO DIJKSTRA / PRIM

Ej.: A B

F

I

G

H

C

7

2

3

5

4

6

21

4

3

A

B

G

F

2

37

Árbol Vecinos

A

B

G

F

3

72

C4

Page 26: Grafos y Árboles (algoritmo)

A

B

G

F

3

72

C4

I

H

1

3

A

B

G

F

3 5

2 C4

I

H

13

A

B

G F

3

5

2

C2

I

H

1

3

WT = 16

Page 27: Grafos y Árboles (algoritmo)
Page 28: Grafos y Árboles (algoritmo)
Page 29: Grafos y Árboles (algoritmo)

ALGORITMO VORAZ

• Un algoritmo voraz es un algoritmo para problemas de

optimización en la que se hacen elecciones óptimas

localmente en cada paso.

• El resultado final no es necesariamente óptimo.

• El algoritmo de Dijkstra / Prim es voraz.

• La solución del algoritmo de Dijkstra / Prim sí es óptima.

Page 30: Grafos y Árboles (algoritmo)

ÁRBOLES PARCIALES DE COSTO MÍNIMO

1. ALGORITMO DE DIJKSTRA / PRIM

Seleccionar un vértice vecino

Mientras hay vértices vecinos hacer:

Seleccionar un arco de peso mínimo entre un vértice de árbol y

un vértice vecino.

Añadir tal arco y vértice vecino al árbol

Fin Mientras

Page 31: Grafos y Árboles (algoritmo)

ÁRBOLES PARCIALES DE COSTO MÍNIMO

2. ALGORITMO DE KRUSKALProcedimiento Kruskal (G,T,n){G = (V,E), N = |V|}ET = 0 ; E´ = E ; i = 0

Mientras E´≠ 0 AND i ≠ n-1 hacerSea (u,w) un arco de costo mínimo de E´E´ = E´- {(u,w)}Si (u,w) no crea un ciclo en T entonces ET = ET U {(u,w)}

i = i + 1Fin Si

Fin MientrasFin Procedimiento Kruskal

Page 32: Grafos y Árboles (algoritmo)

ALGORITMO KRUSKAL

Ej.:A B

F

I

G

H

C

7

2

3

5

4

6

21

4

3

ARCOIGHCABAGGHBCIHFIGBFA

COSTO1223344567

A B

F

I

G

H

C

7

2

3

5

4

6

21

4

3

XX

XX

WT = 16 (1+2+2+3+3+5)

El algoritmo Kruskal es vorazLa solución que proporciona sí es óptima

Page 33: Grafos y Árboles (algoritmo)

PROBLEMA DE CAMINOS MÁS CORTOS

Sea G = (V,E,W) grafo orientado o no con pesos.Sea P = u1, u2, …., uk un camino de u1 al uk. El peso o longitud de P se define: k-1

W(P) = Ʃ W (ui, ui+1) i=1

PROBLEMA:Sea G = (V,E,W) un grafo con pesos, y sean v, w ϵ V. Hallar un camino más corto de v a w.

SOLUCIÓN:Utilizando el siguiente algoritmo de Dijkstra: Sea z un vértice vecino, tal que z es adyacente a por lo menos un vértice del árbol Vk, entonces existe un camino más corto de v a vk.

Sea P = v, v1, v2, …, vk un camino=> P´= v, v1, v2, …, vk, Z es un camino de v a z

dist (v,z) = d (v,vk) + w(vkz) distancia distancia temporal permanente

Page 34: Grafos y Árboles (algoritmo)

El algoritmo:x = vMientras x ≠ w hacer Seleccionar un arco candidato xy tal que dist (v,y) = d (v,x) + w(xy) es mínimo entre todos los vértices vecinos añadir y, (x,y) al árbol d (v,y) = d(v,x) + w(xy) x = yFin Mientras

Ejemplo:

2A B

F

I

G

H

C

9 5

1

4

6

52

4

5

Hallar un camino más corto de A a F

Page 35: Grafos y Árboles (algoritmo)

A

B

F

G

2

95

Árbol Vecinos

dist (A,B) = 2

dist (A,F) = 9

dist (A,G) = 5

A

B

F

G

9

52

C4

6

dist (A,F) = 9

dist (A,G) = 5

dist (A,C) = 6

Vecinos

Iteración 1:

Iteración 2:

SOLUCIÓN:

A

G

B

I

2

25

H5

C

F

4

9

dist (A,C) = 6

dist (A,F) = 9

dist (A,I) = 7

dist (A,H) = 10

Iteración 3:

Page 36: Grafos y Árboles (algoritmo)

A

G

BI2

2

5 H5

C

F49 dist (A,F) = 9

dist (A,I) = 7

dist (A,H) = 10

A

G

B

F2

1

5H5

C

I

4

2

dist (A,F) = 8

dist (A,H) = 10

Iteración 4:

Iteración 5:

Page 37: Grafos y Árboles (algoritmo)

Hallar los caminos más cortos entre todos los pares de vértices i, j, tal que i ≠ j, utilizando el algoritmo de Warshall.

Ck(i,j) = longitud de un camino más corto de i a j que no pasa por vértices intermedios con índices mayor que k

∞ i = jC0(i,j) = ∞ (i,j) ϵ E (<i,j> ϵ E)

W(i,j) (i,j) ϵ E (<i,j> ϵ E)

Supongamos que ya se generó Ck-1, para generar Ck se consideran dos casos:1. El camino más corto de i a j que no pasa por ningún vértice intermedio mayor a k, tampoco pasa por k, entonces su costo es Ck-1(i,j)2. El camino más corto de i a j que no pasa por ningún vértice intermedio mayor a k, sí pasa por k, entonces su costo es Ck-1(i,k) + Ck-1(k,j)

Entonces:Ck(i,j) = min (Ck-1(i,j), Ck-1(i,k) + Ck-1(k,j) k >= 1

Page 38: Grafos y Árboles (algoritmo)

ALGORITMO DE WARSHALL:FOR K = 1, N FOR I = 1, N FOR J = 1, N

C (i,j) = min {C(i,j), C(i,k) + C(k,j)} END

ENDEND

V1

V3

V2

6

2

4

11

3

∞ 4 116 ∞ 23 ∞ ∞

∞ 4 116 10 23 7 14

10 4 6 6 10 2 3 7 9

9 4 65 9 23 7 9

C0 =

C2 =

C1 =

C3 =

Page 39: Grafos y Árboles (algoritmo)

RECORRIDO DE GRAFOSRecorrer significa visitar cada vértice del grafoEsto implica examinar, visitar o procesar todos los vértices y arcos del grafo

A. BÚSQUEDA PRIMERO A LO ANCHOSe realiza una búsqueda por niveles. Se visitan los vértices que están máscerca al vértice de partida, luego, los vértices que estén a continuacióndel vértice de partida, y así, sucesivamente.Los vértices son visitados en el orden de su distancia del vértice de partida.

Procedure BFS (v) [Breadth First Search){Q es una cola inicializada en 0}Visitar, marcar vInsertar v en QMientras Q ≠ 0 hacer

x = valor en el frente de la cola eliminar x de Q Para cada vértice w adyacente a x no marcado hacer

visitar y marcar winsertar w en Q

Fin ParaFin Mientras

Page 40: Grafos y Árboles (algoritmo)

A B

F

I

G

H

C

BFS (A)

Q : A F B I G C H

X = A F B I G C H

(H: Vértice más alejado del origen A)

Page 41: Grafos y Árboles (algoritmo)

B. BÚSQUEDA PRIMERO EN PROFUNDIDAD

PROCEDURE DFS (v) [Depth First Search] Visitar y marcar v Mientras hay un vértice w no marcado adyacente a v hacer

DFS (w) Fin Mientras

C GNILB

F BNILA

Page 42: Grafos y Árboles (algoritmo)

A B

F

I

G

H

C

DFS (A) v, mA DFS (B) v, mB DFS (C)

v, mC DFS (H) v, mH

DFS (I) v, mI DFS (G) v,mG FinFin

FinFin

Fin DFS (F) v, mF