Materia: #técnicas_y_diseños_de_algoritmos
Tags: Tipos abstractos de datos, Grafos, Dígrafos
Representación de grafos
Existen múltiples formas de representar grafos en la computadora. En particular, vamos a ver tres de ellas: la lista de aristas, la lista de adyacencias y la matriz de adyacencias.
Una lista de aristas consiste en un array de vectores de dos dimensiones, donde cada vector representa una arista del grafo. Por ejemplo, el grafo:
flowchart LR id1((1)) id2((2)) id3((3)) id4((4)) id5((5)) id6((6)) id1 --- id4 id4 --- id2 id4 --- id5 id5 --- id2 id5 --- id6
Podríamos representarlo como
Por otro lado, la lista de adyacencia es un vector donde cada elemento es una lista de tamaño
Esta es una forma de escribir la lista de adyacencia, ya que podríamos ordenarla de distintas formas. Las listas dentro del vector, podrían ser arrays convencionales, o listas enlazadas, o quizás nos interese mantener el orden entre los nodos. Eso ya dependerá del contexto.
Finalmente, tenemos la matriz de adyacencia. Consiste en una matriz de tamaño
Esta representación podría optimizarse de muchas formas. Para empezar, podemos notar que la matriz se encuentra espejada. Esto sucede porque en la definición de grafo se cumple que
Las distintas complejidades de cada operación según la representación usada se pueden ver comparadas en la siguiente tabla:
Lista de aristas | Lista de adyacencias | Matriz de adyacencias | |
---|---|---|---|
Construcción | |||
Adyacentes | |||
Vecinos | |||
agregar arista | |||
remover arista | |||
agregar vértice | |||
remover vértice |