que algoritmo aplicar

5
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. 1

Upload: belcedub

Post on 11-Jun-2015

1.206 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Que Algoritmo Aplicar

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

Page 2: Que Algoritmo Aplicar

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 columnasUna 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

Page 3: Que Algoritmo Aplicar

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.

3