Saltar al contenido

Diario de clases

Clases de Jesús Soto

Menú
  • Fórmulas
Menú

MAD: Representación matricial de un grafo

Posted on 15 de abril de 2026

Matriz de adyacencia

Si tenemos un grafo \(G=(V,E)\) donde \(V=\{v_1,…,v_n\}\), llamamos matriz de adyacencia del grafo a la matriz cuadrada nxn, \(A=[a_{ij}]\), donde
\[a_{ij}=\left\{\begin{matrix}1 & \mbox{si } \{v_i,v_j\}\in E\\ 0 & \mbox{si } \{v_i,v_j\}\not\in E\end{matrix}\right.\]

Si tenemos un digrafo \(G=(V,E)\) donde \(V=\{v_1,…,v_n\}\), llamamos matriz de adyacencia del digrafo a la matriz cuadrada nxn, \(A=[a_{ij}]\), donde \[a_{ij}=\left\{\begin{matrix}1 & \mbox{si } (v_i,v_j)\in E\\ 0 & \mbox{si } (v_i,v_j)\not\in E\end{matrix}\right.\]

Para ambos casos, si hubiera un bucle en \(v_i\) \(a_{ii}\) es 1 (dependiendo de la convención usada, también puede aparecer 2).

Ejercicio: Determinar la matriz de adyacencia del grafo

(%i4) load(«graphs»)$
v:[1,2,3,4,5]$
g:create_graph(v,
  [[1,2],[1,5],
      [1,4],[2,3],
      [3,5],[3,4],
      [4,5]])$
adjacency_matrix( g);

0 errores, 0 advertencias0 errores, 0 advertencias(%o4) (0101110100010111010110110)


Ejercicio: Crear una función en maxima que, dada una lista de aristas, nos devuelva su matriz de adyacencia.

(%i1) /* Definición de la función */
matriz_adyacencia(n,aristas,dirigido):=block(
   [M,i,j],
   /* 1. Creamos una matriz de ceros de tamaño n x n */
   M:zeromatrix(n,n),
  
   /* 2. Recorremos la lista de aristas para marcar las conexiones */
   for k in aristas do (
       i:k[1],
       j:k[2],
       M[i,j]:M[i,j]+1,
       if not dirigido then (
           if i#j then M[j,i]:M[j,i]+1 else M[i,i]:M[i,i]+1
       )
   ),
   return(M)
)$

Veamos algunas propiedades interesantes

Propiedades: La matriz de adyacencia, \(A\), verifica:

  • es simétrica para un grafo no dirigido;
  • Depende del etiquetado del grafo. Existe una correspondencia biyectiva entre los grafos simples etiquetados con \(n\) vértices y las matrices \(n\times n\) simétricas binarias con ceros en la diagonal.
  • no es binaria para un multigrafo.
  • para un pseudografo, la diagonal principal no está formada únicamente por ceros.
  • si un grafo tiene un vértice \(v_i\) aislado, tanto la columna \(i-ésima\) de \(A\) como la fila \(i-ésima\) estarán formadas por ceros.
  • si \(G\) es un grafo no dirigido, la suma de los elementos de la fila (o columna) \(i-ésima\) de \(A\) coincide con el grado del vértice \(v_i\).
  • en un grafo no dirigido sin lazos, la suma de todos los elementos es el doble del tamaño del grafo, es decir, el doble del número de aristas del grafo. En grafos dirigidos, la suma de todos los elementos de \(A\) da exactamente el tamaño del grafo

Observar que una de las propiedades nos decía que, en un grafo no dirigido, la suma de los elementos de la fila (o columna) \(i-ésima\) de \(A\) coincide con el grado del vértice \(v_i\). En general, podríamos decir que si \(A\) es la matriz de adyacencia de un grafo y \(\mathbf{1}\) es la matriz columna de tantas filas como orden tiene \(A\), el producto \[\mathbf{d}=A.\mathbf{1}\] nos proporciona los grados de cada uno de los vértices del grafo.

Si tenemos un digrafo \[\mathbf{d}_{out}=A.\mathbf{1}\] el vector de grados de salida.

Caminos y distancia

Otra propiedad interesante es la posibilidad de conocer los caminos de un vértice a otro. Si llamamos \(C_{ij}(k)\) el número de caminos de longitud \(k\) entre los vértices \(v_i\) y \(v_j\), este se puede determinar mediante la potencia \(k\)-ésima de la matriz de adyacencia. Es decir, si \(\mathbf {A}=[a_{ij}]\) es la matriz de adyacencia, \[C_{i,j}(k)=[\mathbf{A}^{k}]_{ij}.\]

Ejercicio: Cuántos caminos de longitud 4 parten del vértice 1 del grafo anterior

(%i6) c4:m^^4$
sum(row(c4,1)[1][i],i,1,5);

(%o6) 66


Ejercicio: Sea \(G(V,E)\), siendo \(E:\{\{1,4\},\{1,2\},\{2,2\},\{1,3\},\{2,3\}\}\) ¿Qué dos vértices no están conectados por una camino de longitud 2?

Es suficiente con ver que, si \(A\) es la matriz de adyacencia, solo necesitamos ver \(A^2\).

Ejercicio: Sea \(G(V,E)\), siendo \(E:\{\{1,4\},\{1,2\},\{2,2\},\{1,3\},\{2,3\}\}\) ¿Cuántos caminos de longitud 3 hay?

Es suficiente con ver que si \(A\) es la matriz de adyacencia, entonces \[A^3=\begin{bmatrix}3 & 6 & 5 & 3\\
6 & 7 & 5 & 2\\
5 & 5 & 3 & 1\\
3 & 2 & 1 & 0\end{bmatrix}\] Ahora solo nos resta sumar todas las componentes.

Cuando el grafo es simple, esta potencia nos sirve para ver el grado de cada vértice:
\[grado(v_i)=[\mathbf{A}^{2}]_{ii}.\]

Y como sabemos que \(\sum_{v\in V} grado(v)=2|E|\), tendremos \[|E|=\frac{1}{2}traza(\mathbf{A}^{2}).\]

La tercera potencia también nos proporciona datos curiosos.

Propiedad: Si \(\mathbf {A}=[a_{ij}]\) es la matriz de adyacencia de un grafo \(G\), el número de triángulos (circuitos de longitud 3)

  • del grafo es \[\frac{1}{6}traza(\mathbf{A}^{3})\]
  • que tienen a \(v_i\) como vértice es \[\frac{1}{2}\left[\mathbf{A}^{3}\right]_{ii}\]

Ejercicio: Cuántos triángulos tiene el grafo completo \(K_5\)

(%i5) load(«graphs»)$
v:[1,2,3,4,5]$
a:create_list([v[i],v[j]],i,1,4,j,i+1,5)$
g:create_graph(v,a)$
draw_graph(g,
  show_id=true,
  show_vertices=v,
  show_vertex_size=3,    
  edge_width=1)$

0 errores, 0 advertencias0 errores, 0 advertencias(%t5)  (Gráficos)

(%i7) m:adjacency_matrix(g)$
mat_trace(m^^3)/6;

0 errores, 0 advertencias(%o7) 10


Ejercicio: ¿Cuántos caminos de longitud 5 tiene el digrafo?

Observemos que la matriz de adyacencia es \[A=\begin{bmatrix}0 & 1 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 1 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 1 & 0 & 0 & 1 & 0\\
0 & 0 & 1 & 0 & 0 & 0 & 0 & 1\\
1 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\
0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0\\
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\end{bmatrix}\]
Si hacemos la quinta potencia tendremos:
\[A^5=[\alpha_{ij}]=\begin{bmatrix}0 & 0 & 0 & 2 & 0 & 0 & 2 & 0\\
0 & 0 & 2 & 0 & 0 & 2 & 0 & 2\\
0 & 0 & 0 & 4 & 0 & 0 & 4 & 0\\
0 & 0 & 4 & 0 & 0 & 3 & 0 & 4\\
0 & 0 & 1 & 0 & 0 & 1 & 0 & 1\\
0 & 0 & 0 & 0 & 0 & 0 & 1 & 0\\
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0\\
0 & 0 & 0 & 4 & 0 & 0 & 3 & 0\end{bmatrix}\]
Ahora solo necesitamos sumar todos los valores de la matriz \[\sum_{i=1}^8\sum_{j=1}^8\alpha_{ij}\]

Proposición: El diámetro de un grafo es el valor $k$ más pequeño necesario para que la matriz sumatoria de potencias, de su matriz de adyacencia, no tenga ceros.

Isomorfismos y adyacencia

Propiedad: Sean \(\mathbf {A}\) y \(\mathbf {A^\prime}\) las matrices de adyacencia de los grafos \(G\) y \(G^\prime\), entonces las siguientes condiciones son equivalentes:

  • \(G\equiv G^\prime\) (isomorfos)
  • Existe una matriz \(P\), matriz de permutaciones, tal que \(A^\prime=PAP^{t}\)

Propiedad: Sea \(\mathbf {A}\) la matriz de adyacencia de un grafo \(G(V,E)\), con \(|V|=n\), entonces las siguientes condiciones son equivalentes:

  • \(G\) es conexo
  • son mayores que cero las entradas de la matriz \[I_{n}+A+A^{2}+A^{3}+\ldots+A^{n-1}\]

Propiedad: Sea \(\mathbf {A}\) la matriz de adyacencia de un grafo \(G\), y \(P\), una matriz de permutaciones, tal que \(PAP^{t}\) es una matriz diagonal por bloques; entonces:

  1. El número de componentes conexas del grafo es igual número de bloques.
  2. \(G\) es conexo si, y solo si, el número de bloques es 1.

Matriz de incidencia

Del mismo modo podemos construir la matriz de incidencia, donde las columnas de la matriz representan las aristas del grafo y las filas representan a los distintos nodos.

Grafo no dirigido

Utilizando la terminología anterior, llamamos matriz de incidencia del grafo no dirigido a la matriz \(|V|\times |E|\), \(M=[m_{ij}]\), donde
\[m_{ij}=\left\{\begin{array}{ll}0 & \mbox{si } \not\exists v\in V|\ e_j=\{v_i,v\}\in E\\ 1 & \mbox{si } \exists v\in V|\ e_j=\{v_i,v\}\in E\\ 2 & \mbox{si } \ e_j=\{v_i,v_i\}\in E\end{array}\right.\]

Grafo dirigido

\[m_{ij}=\left\{\begin{array}{ll}0 & \mbox{si } \not\exists v\in V|\ e_j=(v_i,v)\in E\\ 1 & \mbox{si } \exists v\in V|\ e_j=(v_i,v)\in E\\ -1 & \mbox{si } \exists v\in V|\ e_j=(v,v_i)\in E\end{array}\right.\]
Observar que un bucle entra y sale del mismo vértice, luego contribuye +1 y −1, por tanto es cero.

Ejercicio: ¿Cuál es la norma de la matriz de incidencia del digrafo?

(%i5) n:8$
E:[[1,2],[2,3],[3,4],[3,7],[4,3],[4,8],[5,1],[6,7],[7,6],[8,4]]$
m:zeromatrix(n,length(E))$
fori:1thrulength(E)do(
   m[E[i][1],i]:−1,
   m[E[i][2],i]:1
)$
m;

\[\begin{pmatrix}-1 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0\\1 & -1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\0 & 1 & -1 & -1 & 1 & 0 & 0 & 0 & 0 & 0\\0 & 0 & 1 & 0 & -1 & -1 & 0 & 0 & 0 & 1\\0 & 0 & 0 & 0 & 0 & 0 & -1 & 0 & 0 & 0\\0 & 0 & 0 & 0 & 0 & 0 & 0 & -1 & 1 & 0\\0 & 0 & 0 & 1 & 0 & 0 & 0 & 1 & -1 & 0\\0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & -1\end{pmatrix}\]

(%i6) sqrt(mat_trace(m.transpose(m))),numer;

\[4.47213595499958\]

Recordad que la norma de una matriz es independiente del orden en el que coloquemos las columnas.


Ejercicio: Crear una función en maxima que, dada una lista de aristas, nos devuelva su matriz de incidencia.

(%i1) m_inc(E):=block([n,m],
   n:0,
   for i:1 thru length(E) do (
       n:max(n,max(E[i][1],E[i][2]))
   ),
   m:zeromatrix(n,length(E)),
   for i:1 thru length(E) do (
       m[E[i][1],i]:−1,
       m[E[i][2],i]:1,
       if (E[i][1]=E[i][2]) then m[E[i][1],i]:2
   ),
   m
)$

Si el grafo fuese dirigido, entonces el bucle contaría como cero y tendríamos una columna de ceros en la arista correspondiente.


Matriz de incidencia y conexión

La matriz de incidencia nos permite conocer las componentes conexas de un grafo.

Propiedad: Sea \(\mathbf{M}\) la matriz de incidencia de un digrafo \(G(V,E)\), con \(|V|=n\), entonces \[\mathbf{rang}(M)=n-c\] siendo \(c\) el número de componentes conexas del digrafo.

Observar que hemos dado esta propiedad para un digrafo. Del mismo modo podemos establecerla para un grafo no dirigido, pero en este caso es más sencillo si orientamos artificialmente el grafo.

Definición: \(G(V,E)\) un grafo no dirigido; llamaremos matriz de incidencia orientada B del grafo \(G(V,E)\) a la matriz de incidencia resultante de darle una orientación a las aristas del grafo. Es decir, lo transformamos en un digrafo.

Esta orientación es arbitraria, no modifica las propiedades algebraicas que nos interesan del grafo y nos permite interpretarlas de una forma más sencilla. Por ejemplo, ahora podemos repetir la propiedad anterior:

Propiedad: Sea \(\mathbf{B}\) la matriz de incidencia orientada de un grafo \(G(V,E)\), con \(|V|=n\), entonces \[\mathbf{rang}(B)=n-c\] siendo \(c\) el número de componentes conexas del grafo.

Si tenemos un digrafo, la matriz \(\mathbf{B}\) (matriz de incidencia orientada) es la misma, ya que el digrafo está orientado.

Matriz de incidencia y adyacencia

Propiedad: Sean \(\mathbf {A}\) y \(\mathbf {B}\) las matrices de adyacencia e incidencia (orientada) de un grafo o digrafo \(G(V,E)\), entonces \[D-A=BB^t,\] siendo \(D\) una matriz diagonal cuyos elementos de la diagonal son los grados de los vértices correspondientes.

Para obtener la matriz de grados ($D$) a partir de la matriz de adyacencia ($A$), la forma más eficiente y universal, válida tanto para grafos dirigidos como no dirigidos, es multiplicar la matriz $A$ por un vector columna de unos ($\mathbf{1}$), el resultado es un vector donde cada componente es la suma de la fila correspondiente.

Para un grafo de $n$ nodos, sea $\mathbf{1} = [1, 1, \dots, 1]^T$:$$\mathbf{d} = A\mathbf{1}$$ donde $\mathbf{d}$ es el vector de grados. Para convertir este vector en la matriz diagonal $D$, usamos el operador $\text{diag}$: $$D = \text{diag}(A\mathbf{1})$$

Tipo de Grafo Definición de \( D \) Requisito / Nota
Cualquiera \( D = \text{diag}(A\mathbf{1}) \) Método universal (el más robusto).
No dirigido \( D = \text{diag}(\text{diag}(A^2)) \) Debe ser un grafo simple (sin bucles).
Dirigido (Out-degree) \( D_{out} = \text{diag}(A\mathbf{1}) \) Suma por filas (aristas que salen).
Dirigido (In-degree) \( D_{in} = \text{diag}(\mathbf{1}^T A) \) Suma por columnas (aristas que entran).

Ejercicio: Dado el grafo adjunto, verificar la relación anterior.


Utilizaremos la funciones para determinar las matrices de adyacencia e incidencia anteriores.
Demos una orientación arbitraria y calculamos la matriz de incidencia orientada:

(%i4) E:[[1,2],[1,3],[2,3],[2,4],[2,4],[4,4]]$
B:m_inc(E);

\[\operatorname{ }\begin{bmatrix}-1 & -1 & 0 & 0 & 0 & 0\\1 & 0 & -1 & -1 & -1 & 0\\0 & 1 & 1 & 0 & 0 & 0\\0 & 0 & 0 & 1 & 1 & 0\end{bmatrix}\]

(%i5) B.transpose(B);

\[\operatorname{ }\begin{bmatrix}2 & -1 & -1 & 0\\-1 & 4 & -1 & -2\\-1 & -1 & 2 & 0\\0 & -2 & 0 & 2\end{bmatrix}\]

(%i8) m_grados(n,E):=block([D,I1],
   D:zeromatrix(n,n),
   I1:matriz_adyacencia(n,E,false).makelist(1,i,1,n),  
   for i:1 thru n do D[i,i]:I1[i][1],
   return(D)
)$
A:matriz_adyacencia(4,E,false);
D:m_grados(4,E);

\[\operatorname{ }\begin{bmatrix}0 & 1 & 1 & 0\\1 & 0 & 1 & 2\\1 & 1 & 0 & 0\\0 & 2 & 0 & 2\end{bmatrix}\]

\[\operatorname{ }\begin{bmatrix}2 & 0 & 0 & 0\\0 & 4 & 0 & 0\\0 & 0 & 2 & 0\\0 & 0 & 0 & 4\end{bmatrix}\]

(%i9) D−A;

\[\operatorname{ }\begin{bmatrix}2 & -1 & -1 & 0\\-1 & 4 & -1 & -2\\-1 & -1 & 2 & 0\\0 & -2 & 0 & 2\end{bmatrix}\]


Si el grafo es simple, tendríamos:

Propiedad: Sean \(\mathbf {A}\) y \(\mathbf {M}\) las matrices de adyacencia e incidencia (no orientada) de un grafo simple \(G(V,E)\), entonces \[A+D=MM^t,\] siendo \(D\) una matriz diagonal cuyos elementos de la diagonal son los grados de los vértices correspondientes.

Ejercicio: Valore la afirmación:

Todo grafo bipartido es conexo

  • Verdadero
  • Falso

Hay que trabajarla un poco más antes de que veas la respuesta.

MAD: Subgrafos, distancia, conexión, conectividad e isomorfismos.

Posted on 13 de abril de 2026

Subgrafos y Operaciones Elementales Un grafo $G’ = (V’, E’)$ es un subgrafo de $G = (V, E)$ si $V’ \subseteq V$ y $E’ \subseteq E$. Subgrafo Inducido: Es aquel que, al…

MAD: graphs: grafos con maxima

Posted on 25 de marzo de 2026

graphs El paquete graphs proporciona estructuras de datos de grafos y dígrafos para Maxima. Los grafos y dígrafos son simples (no tienen aristas múltiples ni bucles), aunque los dígrafos pueden tener una…

MAD: Teoría de Grafos

Posted on 17 de marzo de 2026

Comenzamos con la teoría de grafos. Para adentrarnos en este tema, hablamos de dos ejemplos que nos ilustran perfectamente nuestro contenido: El problema de los puentes de Königsberg El problema matemático que…

MAD: Ecuaciones diofánticas y de congruencias con maxima

Posted on 11 de marzo de 2026

Ecuación de congruencias Recordemos, para resolver la ecuación \(aX\equiv b {\pmod {n}}\), \((aX \equiv b (n))\), cuando \(\mathbf{mcd}(a,n)=1\), utilizamos bien solución de Bézout, bien la función \(\varphi\) de Euler. Ejemplo: Resolver la…

MAD: Anexo a la Teoría de números

Posted on 9 de marzo de 2026

Para terminar la Unidad de Teoría de Números abordaremos dos problemas: Test de primalidad y los sistemas de congruencias. Test de Primalidad El segundo problema de los que añadimos como apéndice a…

MAD: Ecuación diofántica

Posted on 2 de marzo de 2026

Ecuación diofántica Observemos que \[aX\equiv b \pmod{n}\Leftrightarrow aX-b=kn,\] para algún \(k\in\mathbb{Z}\). Es decir, las soluciones de \(aX\equiv b \pmod{n}\), están relacionadas con las soluciones de la ecuación lineal \[ax+ny=b.\] Esta última ecuación…

MAD: Congruencias con maxima

Posted on 25 de febrero de 2026

Restos potenciales Veamos el siguiente ejercicio: Ejemplo: Dado \(n=71\cdots 71\), donde la pareja 71 se repite 10 veces, ¿cuál es su resto al dividirlo por 17? Solución: El número en cuestión es…

MAD: Números primos y congruencias

Posted on 23 de febrero de 2026

En la clase de hoy trataremos los números primos. Llamaremos número primo a todo número entero \(p\in\mathbb{Z}\), \(p>1\), que no tiene divisores más que el 1 y el mismo. El siguiente resultado…

MAD: El mcd con maxima

Posted on 18 de febrero de 2026

El pasado día vimos que el algoritmo de Euclides se fundamenta en el teorema: Teorema: Si \(a\) y \(b\) son números enteros, \[\mathbf{mcd}(a,b)=\mathbf{mcd}(b,r),\] donde \(r\) es el resto del algoritmo de la…

Paginación de entradas

1 2 … 8 Siguientes

Novela

La Loba, la lucha fraticida por un reino

La Loba, la lucha fratricida por un reino.

Urraca, señora de Zamora, acusada de instigar la muerte de su hermano, el rey Sancho de Castilla, deberá defenderse de la acusación, al tiempo que luchará por mantener la cohesión entre los hermanos y los reinos cristianos: una lobera de fieros lobeznos.

👉 En amazon

Entradas recientes

  • MAD: Representación matricial de un grafo
  • MAD: Subgrafos, distancia, conexión, conectividad e isomorfismos.
  • MAD: graphs: grafos con maxima
  • MAD: Teoría de Grafos
  • MAD: Ecuaciones diofánticas y de congruencias con maxima
abril 2026
L M X J V S D
 12345
6789101112
13141516171819
20212223242526
27282930  
« Mar    

Categorías

  • Álgebra Lineal
  • general
  • Matemática Discreta
  • MathBio

Etiquetas

Prácticas MAD Prácticas MathBio Prácticas Álgebra

Meta

  • Acceder
  • Feed de entradas
  • Feed de comentarios
  • WordPress.org
©2026 Diario de clases | Diseño: Tema de WordPress Newspaperly