Está en la página 1de 3

1. ¿Qué algoritmo aplicar?

Havel-Hakimi: Comprobar si una secuencia es gráfica. (o sea si puede que la


secuencia corresponda a un grafo).
DFS y BFS: test de conectividad. Para comprobar si un grafo es conexo. También se
puede utilizar para averiguar la distancia entre dos vértices en un grafo no
ponderado.
Dijkstra y Floyd: Busca el recorrido de peso mínimo.
Dijkstra: entre dos vértices. (De un vértice de origen al resto)
Floyd: entre todos los pares de vértices.
Kruskal y Prim: árbol generador minimal.
TSP (problema del viajante de comercio): circuito de menor peso.

2. ¿Cómo aplicarlos?

Havel-Hakimi:
La secuencia de números se debe corresponder con el grado de cada vértice:
Eje.: 5,4,4,2,2 ->no es una secuencia gráfica pq hay 5 vértices y el de grado
mayor es 5. O sea que el de grado mayor, como mucho debe de ser n-1.

Ej. 5,4,4,2,2,1 Si no estuviesen ordenados decrecientemente, pues se hace. Quitamos el


cinco y a los cinco siguientes le restamos 1. Nos queda:
3,3,1,1,0 Ahora quitamos el tres y a los tres siguientes le restamos 1.
2,0,0,0 Ya no hace falta seguir. No es una seq. Gráfica pq en la siguiente
iteración tendríamos valores “-1”

Ej. 2,2,4,3,3,2,3,5 ->Lo tenemos que ordenar


5,4,3,3,3,2,2,2 quitamos el 5 y a los cinco siguientes les restamos 1.
3,2,2,2,1,2,2 ->tenemos que volver a ordenarla
3,2,2,2,2,2,1 ->ahora quitaremos el 3 y a los tres siguientes -1.
1,1,1,2,2,1 ->tenemos que volver a ordenarla.
2,2,1,1,1,1 ->quitamos el dos y a los dos siguientes -1.
1,0,1,1,1->lo ordenamos
1,1,1,1,0 ->quitamos el 1 y restamos 1 al siguiente
0,1,1,0->ordenamos
1,1,0,0 ->quitamos 1 y restamos 1 al siguiente.
0,0,0 -> es una secuencia gráfica.

DFS: Si no nos dan el vértice de origen, escogemos uno. Si estuviesen ordenados (por
letras o números) es mejor escoger el primero en la secuencia (no es imprescindible,
solo es ”más estético” a mi gusto). A partir de ese vértice se visita otro vértice
adyacente, de éste vértice adyacente a otro vértice adyacente. Cuando no se puede
seguir para adelante, se va retrocediendo vértices hasta que encuentras uno que tenía
más de un vértice adyacente y continuas el recorrido por ahí. Se acaba cuando ya no
quedan más vértices para visitar. Si queda algún vértice y no has llegado hasta a él,
significa que ése vértice es aislado (cosa tonta pq se ve claro en el dibujo.....)
Este recorrido se va apuntando en forma de tabla. En mi libro hay un buen ejemplo en el
módulo Recorridos y conectividad, el ejemplo 6-19 Simulación del algoritmo.

1
BFS: El procedimiento consiste en coger un vértice y visitar primero (en orden
alfabético o de menor a mayor) todos los vértices adyacentes a éste vértice. Luego se
elimina éste y se hace lo mismo con el siguiente.... hasta haber visitado todos. Si no se
puede visitar todos los vértices.... tonces no es conexo. Pági.19 Ejemplo 6-24

Dijkstra. (Recomiendo mirar la tabla del ejemplo 6-53 pag. 38 a la vez que vas leyendo
los pasos)
Primero se monta una tabla en la que el encabezado de cada fila es el nombre de cada
vértice.
Primera fila: se rellena la celda correspondiente al vértice de origen con
(0, nombredelverticeorigen), donde el 0 es la distancia del vértice de origen ..en este
caso al vértice de origen. Las demas celtas se rellenan con (infinito,
nombreverticeorigen).... hasta ahora sólo hemos preparado la tabla, no hemos mirado
distancias ni nada.
Segunda fila:
1. Marcamos con un * el vértice que vamos a explorar.
2. Ponemos un dedito u otra cosa (a gusto del consumidor) en ese vértice y
miramos la distancia al siguiente vértice/columna.
a. Si no tiene adyacencia con ese vértice ->copiamos lo de la celda
superior.
b. Si tiene adyacencia y además podemos mejorar la distancia (sumando
la distancia del vértice que estamos explorando con el peso de la
arista que nos lleva a ese vértice) ponemos el valor de la distancia x y
el vértice que estamos explorando (x, vérticequeexploramos).
3. Repetimos hasta haber explorado todos los vértices/columna.
4. De todas las distáncias que tenemos rellenas en esa fila, escogemos la de
menor valor que no se haya explorado ese vértice (de ahí viene marcar con
asterisco.
5. Ponemos en una nueva fila los valores (x,nombre) del vértice escogido tal y
como está en la fila anterior, y repetimos todo desde el punto 2.

El algoritmo se acaba cuando ya han sido “escogidos” todos los vértices. Los valores de
la fila final nos proporciona la menor distancia del vértice de origen a todos los demás.
Para ver el recorrido seguido para llegar del vértice de origen hasta el/los vértice/s que
queremos averiguar, hay que seguir la columna hacia arriba y mirar el nombre del
vértice que nos ha llevado hasta ahí, te paras cuando cambie de nombre y saltas al
vértice que indica el nombre. Haces lo mismo en ese vértice, hasta que encuentres que
el nombre coincide con el nombre del vértice origen. Dependiendo del grafo puede
haber varios saltos. Suena más complicado de lo que es... ya lo comentaremos.

Floyd. El ejemplo que ponen es horrible y a mi entender está mal.... pero bueno. En
teoría es lo mismo que Dijkstra pero se lleva mediante matrices y lo que se busca es la
distancia mínima entre todos los pares de vértices. Es demasiado largo para que lo
pongan en el examen

Kruskal.. Ejemplo 7-22 página 20 modulo Árboles.


Se ordenan las aristas de menor a mayor peso. Se monta una tabla con dos columnas
Una columna es para las aristas visitadas, la otra para los pesos acumulados.
Se escoge la arista de menor peso (si hay mas de una, la que el “nombre” sea menor). Se
pone en la tabla, y se va a la siguiente arista de menor peso. Hay que vigilar que no se

2
escogen aristas que formen algún ciclo con otra anterior (consejo: ir haciendo un
dibujito con los vértices/aristas que vas incorporando). Se acaba cuando se han
incorporado tantas aristas como vértices-1.

Prim. Ejemplo Aquí no me han numerado los apartados, pero sigue al de kruskal, en el
mío, pag.23.
Se lleva una tabla similar a la de Dijkstra.
El procedimiento es se escoge un vértice de pártida.
Se visitan todos los vértices adyacentes a éste vértice y se registra en la tabla la
distancia.
Se escoge el siguiente vértice adyacente de menor peso y se repite la operación hasta
haber visitado todos los vértices, actualizando la tabla si se encuentra un peso menor
que el de la fila anterior. (ojo por que en éste no se van sumando los pesos para conocer
la distancia, si no que nos vamos “quedando” con las aristas que encontramos de menor
peso, siempre manteniendo la conectividad)

TSP- El objetivo es encontrar un circuito/recorrido que visite todos los vértices sin
repetición y de coste mínimo. Pág. 23 Grafos eulerianos y hamiltonianos.
Se representan los vértices en una gráfica de dos ejes. Los (x,y) son las distancias entre
vértices....... este creo que está mejor explicado en el libro de lo que yo puedo explicar.
De todos modos, considero que no es buen “candidato” a que caiga.

También podría gustarte