Skip to Content

Contar grafos etiquetados

Grafos etiquetados

Sea nn el número de vértices de un grafo. Hay que calcular el número GnG_n de grafos etiquetados con nn vértices (etiquetados significa que los vértices están marcados con los números de 11 a nn). Las aristas de los grafos se consideran no dirigidas, y se prohíben bucles y aristas múltiples.

Consideramos el conjunto de todas las aristas posibles del grafo. Para cada arista (i,j)(i, j) podemos asumir que i<ji < j (porque el grafo es no dirigido, y no hay bucles). Por lo tanto el conjunto de todas las aristas tiene cardinalidad (n2)\binom{n}{2}, es decir n(n1)2\frac{n(n-1)}{2}.

Como cualquier grafo etiquetado queda unívocamente determinado por sus aristas, el número de grafos etiquetados con nn vértices es igual a:

Gn=2n(n1)2G_n = 2^{\frac{n(n-1)}{2}}

Grafos etiquetados conexos

Aquí, además imponemos la restricción de que el grafo tiene que ser conexo.

Denotemos el número pedido de grafos conexos con nn vértices como CnC_n.

Primero discutiremos cuántos grafos disconexos existen. Entonces el número de grafos conexos será GnG_n menos el número de grafos disconexos. Más aún, contaremos el número de grafos disconexos enraizados. Un grafo enraizado es un grafo en el que enfatizamos un vértice etiquetándolo como raíz. Obviamente tenemos nn posibilidades de enraizar un grafo con nn vértices etiquetados, por lo tanto al final necesitaremos dividir el número de grafos disconexos enraizados por nn para obtener el número de grafos disconexos.

El vértice raíz aparecerá en una componente conexa de tamaño 1,n11, \dots n-1. Hay k(nk)CkGnkk \binom{n}{k} C_k G_{n-k} grafos tales que el vértice raíz está en una componente conexa con kk vértices (hay (nk)\binom{n}{k} formas de elegir kk vértices para la componente, estos se conectan de una de CkC_k formas, el vértice raíz puede ser cualquiera de los kk vértices, y los nkn-k vértices restantes se pueden conectar/desconectar de cualquier manera, lo que da un factor de GnkG_{n-k}). Por lo tanto el número de grafos disconexos con nn vértices es:

1nk=1n1k(nk)CkGnk\frac{1}{n} \sum_{k=1}^{n-1} k \binom{n}{k} C_k G_{n-k}

Y por último el número de grafos conexos es:

Cn=Gn1nk=1n1k(nk)CkGnkC_n = G_n - \frac{1}{n} \sum_{k=1}^{n-1} k \binom{n}{k} C_k G_{n-k}

Grafos etiquetados con kk componentes conexas {data-toc-label=“Grafos etiquetados con k componentes conexas”}

Basándonos en la fórmula de la sección anterior, aprenderemos a contar el número de grafos etiquetados con nn vértices y kk componentes conexas.

Este número se puede calcular usando programación dinámica. Calcularemos D[i][j]D[i][j] — el número de grafos etiquetados con ii vértices y jj componentes — para cada ini \le n y jkj \le k.

Discutamos cómo calcular el siguiente elemento D[n][k]D[n][k] si ya conocemos los valores anteriores. Usamos un enfoque común: tomamos el último vértice (índice nn). Este vértice pertenece a alguna componente. Si el tamaño de esta componente es ss, entonces hay (n1s1)\binom{n-1}{s-1} formas de elegir tal conjunto de vértices, y CsC_s formas de conectarlos. Después de quitar esta componente del grafo nos quedan nsn-s vértices con k1k-1 componentes conexas. Por lo tanto obtenemos la siguiente relación de recurrencia:

D[n][k]=s=1n(n1s1)CsD[ns][k1]D[n][k] = \sum_{s=1}^{n} \binom{n-1}{s-1} C_s D[n-s][k-1]