Vous êtes sur la page 1sur 9

20/11/2016 Representar grafos | Representación de grafos | Algoritmos | Ciencias de la computación | Khan Academy

Temas Nuevo usuario / Registro

CIENCIAS DE LA COMPUTACIÓN | ALGORITMOS | REPRESENTACIÓN


DE GRAFOS

Representar grafos
Compartir Tuitear Correo electrónico

Hay varias maneras de representar grafos, cada


uno con sus ventajas y desventajas. Algunas
situaciones, o algoritmos que queremos ejecutar
que tengan grafos como entrada, requieren un
representación, y otros requieren una
representación diferente. Aquí, veremos tres
formas de representar grafos.

Veremos tres criterios. Una es cuánta memoria, o


espacio, necesitamos en cada representación.
Usaremos notación asintótica para eso. ¡Sí,
podemos usar notación asintótica para otros fines
además de expresar tiempos de ejecución! En
realidad es una forma de caracterizar funciones, y
una función puede describir un tiempo de
ejecución, una cantidad de espacio requerido, o
algún otro recurso. Los otros dos criterios que
usaremos se relacionan con el tiempo. Uno es
cuánto se tarda en determinar si una arista dada
está en el grafo. El otro es cuánto se tarda en
CIENCIAS DE LA
COMPUTACIÓN ALGORITMOS
encontrar los vecinos de un vértice dado.

Representación de grafos

https://es.khanacademy.org/computing/computer-science/algorithms/graph-representation/a/representing-graphs 1/9
20/11/2016 Representar grafos | Representación de grafos | Algoritmos | Ciencias de la computación | Khan Academy

Es común identificar a los vértices no por nombre


Describir grafos
(como "Audrey", "Boston", o "suéter") sino por un
número. Es decir, típicamente numeramos los ∣V ∣
Practica: Cuestionario:
describir grafos vértices de 0 a ∣V ∣ − 1. Aquí está el grafo de la
red social con sus 10 vértices identificados por
Representar grafos números en lugar de nombres:

Practica: Cuestionario:
representar grafos

Desafío: almacena un
grafo

Siguiente lección
Búsqueda en anchura

Listas de aristas
Una forma sencilla de representar un grafo es solo
una lista, o un arreglo, de ∣E∣ aristas, a la que
llamamos una lista de aristas. Para representar una
arista, solo tenemos un arreglo de dos números de
vértices, o un arreglo de objetos que contienen los
números de vértices sobre los que inciden las
aristas. Si las aristas tienen pesos, agrega ya sea un
tercer elemento al arreglo o más información al
objeto, que dé el peso de la arista. Como cada
arista contiene solo dos o tres números, el espacio
total para una lista de aristas es Θ(E). Por
ejemplo, aquí está cómo representamos una lista
de aristas en JavaScript para el grafo de la red
CIENCIAS DE LA
COMPUTACIÓN ALGORITMOS social:
Representación de grafos

https://es.khanacademy.org/computing/computer-science/algorithms/graph-representation/a/representing-graphs 2/9
20/11/2016 Representar grafos | Representación de grafos | Algoritmos | Ciencias de la computación | Khan Academy

[ [0,1], [0,6], [0,8], [1,4], [1,6], [1,9], [2,4], [2,6], [


Describir grafos [3,8], [4,5], [4,9], [7,8], [7,9] ]

Practica: Cuestionario:
describir grafos Las listas de aristas son sencillas, pero si queremos
encontrar si el grafo contiene una arista en
Representar grafos particular, tenemos que buscar en la lista de aristas.
Si las aristas aparecen en la lista de aristas sin
Practica: Cuestionario: ningún orden en particular, eso es una búsqueda
representar grafos
lineal sobre ∣E∣ aristas. Pregunta para pensar al
respecto: ¿cómo puedes organizar una lista de
Desafío: almacena un
grafo aristas para hacer que la búsqueda de una arista en
particular tarde un tiempo O(lg E)? La respuesta
Siguiente lección es un poco complicada.
Búsqueda en anchura

Matrices de adyacencia
Para un grafo con ∣V ∣ vértices, una matriz de
adyacencia es una matriz de ∣V ∣ × ∣V ∣ de ceros y
unos, donde la entrada en la fila i y la columna j es
1 si y solo si la arista (i, j) está en el grafo. Si
quieres indicar un peso de la arista, ponlo en la
entrada de la fila i, columna j y reserva un valor
especial (tal vez null) para indicar una arista
ausente. Aquí está la matriz de adyacencia para el
grafo de la red social:

CIENCIAS DE LA
COMPUTACIÓN ALGORITMOS

Representación de grafos

https://es.khanacademy.org/computing/computer-science/algorithms/graph-representation/a/representing-graphs 3/9
20/11/2016 Representar grafos | Representación de grafos | Algoritmos | Ciencias de la computación | Khan Academy

Describir grafos

Practica: Cuestionario:
describir grafos

Representar grafos

Practica: Cuestionario:
representar grafos

Desafío: almacena un En JavaScript, representamos esta matriz como:


grafo

[ [0, 1, 0, 0, 0, 0, 1, 0, 1, 0],
Siguiente lección [1, 0, 0, 0, 1, 0, 1, 0, 0, 1],
Búsqueda en anchura [0, 0, 0, 0, 1, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 0, 0, 1, 0],
[0, 1, 1, 1, 0, 1, 0, 0, 0, 1],
[0, 0, 0, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 1, 1],
[1, 0, 0, 1, 0, 0, 0, 1, 0, 0],
[0, 1, 0, 0, 1, 0, 0, 1, 0, 0] ]

Con una matriz de adyacencia, podemos averiguar


si una arista está presente en un tiempo constante,
solo buscando la entrada correspondiente en la
matriz. Por ejemplo, si la matriz de adyacencia se
llama graph, entonces podemos consultar si la
arista (i, j) se encuentra en el grafo mirando
graph[i][j]. ¿Así que cuál es la desventaja de
una matriz de adyacencia? Dos cosas, en realidad.
En primer lugar, ocupa un espacio Θ(V 2 ), incluso
si el grafo es disperso: relativamente pocas aristas.
CIENCIAS DE LA En otras palabras, para un grafo disperso, la matriz
COMPUTACIÓN ALGORITMOS
de adyacencia es en su mayoría 0s, y utilizamos
Representación de grafos mucho espacio para representar solo algunas
https://es.khanacademy.org/computing/computer-science/algorithms/graph-representation/a/representing-graphs 4/9
20/11/2016 Representar grafos | Representación de grafos | Algoritmos | Ciencias de la computación | Khan Academy

aristas. En segundo lugar, si quieres averiguar


Describir grafos
cuáles vértices son adyacentes a un vértice dado i,
tienes que mirar en todas las entradas ∣V ∣ en la fila
Practica: Cuestionario:
describir grafos i, incluso si solo un pequeño número de vértices
son adyacentes al vértice i.
Representar grafos

Para un grafo no dirigido, la matriz de adyacencia


Practica: Cuestionario: es simétrica: la entrada de la fila i, columna j es 1 si
representar grafos
y solo si la entrada de la fila j , columna i es 1. Para
Desafío: almacena un un grafo dirigido, la matriz de adyacencia no
grafo
necesita ser simétrica.

Siguiente lección
Búsqueda en anchura
Listas de adyacencia
Representar un grafo con listas de adyacencia
combina las matrices de adyacencia con listas de
aristas. Para cada vértice i, almacena un arreglo de
los vértices adyacentes a él. Típicamente tenemos
un arreglo de ∣V ∣ listas de adyacencia, una lista de
adyacencia por vértice. Aquí está una
representación de una lista de adyacencia del grafo
de la red social:

CIENCIAS DE LA
COMPUTACIÓN ALGORITMOS

Representación de grafos

https://es.khanacademy.org/computing/computer-science/algorithms/graph-representation/a/representing-graphs 5/9
20/11/2016 Representar grafos | Representación de grafos | Algoritmos | Ciencias de la computación | Khan Academy

En JavaScript, representamos estas listas de


Describir grafos
adyacencia como:

Practica: Cuestionario:
describir grafos [ [1, 6, 8],
[0, 4, 6, 9],
[4, 6],
Representar grafos [4, 5, 8],
[1, 2, 3, 5, 9],
[3, 4],
Practica: Cuestionario: [0, 1, 2],
representar grafos [8, 9],
[0, 3, 7],
[1, 4, 7] ]
Desafío: almacena un
grafo

Los números de vértice en una lista de adyacencia


Siguiente lección no están obligados a aparecer en ningún orden en
Búsqueda en anchura
particular, aunque a menudo es conveniente
enumerarlos en orden ascendente, como en este
ejemplo.

Podemos llegar a la lista de adyacencia de cada


vértice en un tiempo constante, porque solo
tenemos que indexar en un arreglo. Para averiguar
si una arista (i, j) está presente en el grafo, vamos
a la lista de adyacencia de i en un tiempo
constante y luego buscamos a j en la lista de
adyacencia de i. ¿Cuánto tarda eso en el peor de
los casos? La respuesta es Θ(d), donde d es el
grado del vértice i, porque eso es qué tan larga es
la lista de adyacencia de i. El grado del vértice i
puede ser tan alto como ∣V ∣ − 1 (si i es adyacente
a todos los demás ∣V ∣ − 1 vértices) o tan bajo
CIENCIAS DE LA como 0 (si i está aislado, sin aristas incidentes). En
COMPUTACIÓN ALGORITMOS
un grafo no dirigido, el vértice j está en la lista de
Representación de grafos
adyacencia del vértice i si y solo si i está en la lista
https://es.khanacademy.org/computing/computer-science/algorithms/graph-representation/a/representing-graphs 6/9
20/11/2016 Representar grafos | Representación de grafos | Algoritmos | Ciencias de la computación | Khan Academy

de adyacencia de j . Si el grafo está ponderado,


Describir grafos
entonces cada elemento en cada lista de
adyacencia es o un arreglo de dos elementos o un
Practica: Cuestionario:
describir grafos objeto, que da el número de vértice y el peso de la
arista.
Representar grafos
Puedes usar un bucle for para iterar sobre los
Practica: Cuestionario: vértices en una lista de adyacencia. Por ejemplo,
representar grafos
supón que tienes una representación de lista de
Desafío: almacena un
adyacencia de un grafo en la variable graph, de
grafo modo que graph[i] es un arreglo que contiene a
los vecinos del vértice i. Entonces, para llamar a
Siguiente lección una función doStuff en cada vértice adyacente al
Búsqueda en anchura
vértice i, podrías utilizar el siguiente código
JavaScript:

for (var j = 0; j < graph[i].length; j++) {


doStuff(graph[i][j]);
}

Si la notación de doble subíndice te confunde,


puedes pensarlo de esta manera:

var vertex = graph[i];


for (var j = 0; j < vertex.length; j++) {
doStuff(vertex[j]);
}

¿Cuánto espacio ocupan las listas de adyacencia?


Tenemos ∣V ∣ listas, y aunque cada lista podría

CIENCIAS DE LA
tener hasta ∣V ∣ − 1 vértices, las listas de
COMPUTACIÓN ALGORITMOS adyacencia para un grafo no dirigido en total
Representación de grafos contienen 2∣E∣ elementos. ¿Por qué 2∣E∣? Cada
https://es.khanacademy.org/computing/computer-science/algorithms/graph-representation/a/representing-graphs 7/9
20/11/2016 Representar grafos | Representación de grafos | Algoritmos | Ciencias de la computación | Khan Academy

arista (i, j) aparece exactamente dos veces en las


Describir grafos
listas de adyacencia, una vez en la lista de i y una
vez en la lista de j , y hay ∣E∣ aristas. Para un grafo
Practica: Cuestionario:
describir grafos dirigido, las listas de adyacencia contienen un total
de ∣E∣ elementos, un elemento por cada arista
Representar grafos dirigida.

Practica: Cuestionario:  
representar grafos

Desafío: almacena un
grafo
Este contenido es una colaboración de los
profesores de Dartmouth Computer Science
Siguiente lección
Búsqueda en anchura Thomas Cormen y Devin Balkcom, con el equipo de
contenidos de computación de Khan Academy. El
contenido está bajo licencia CC-BY-NC-SA.

Haz una pregunta...

Preguntas Sugerencias y agradecimientos


Los mejores Recientes

En el caso de la lista de Adyacencia, como haría si el id de


los vértices son strings y no int y ademas cada vértice tiene
un peso asignado? Sucediendo lo mismo con los lados,
tienen un peso tambien asignado
1 voto • Comentario • Marca
hace un mes de Juan Carlos Viña Bello

CIENCIAS DE LA
COMPUTACIÓN ALGORITMOS
¿Sabes inglés? Haz clic aquí para ver más discusiones en el sitio en inglés
Representación de grafos de Khan Academy.

https://es.khanacademy.org/computing/computer-science/algorithms/graph-representation/a/representing-graphs 8/9
20/11/2016 Representar grafos | Representación de grafos | Algoritmos | Ciencias de la computación | Khan Academy

Describir grafos
Cuestionario: describir grafos
Cuestionario: representar grafos
Practica: Cuestionario:
describir grafos

ACERCA DE
Representar grafos
APOYO TUTORÍA BOLSA DE INTERNACIONAL

Nuestra misión Centro de ayuda Recursos del


TRABAJO
español
Tú puedes
Practica: Cuestionario:
Comunidad de
profesor y del De tiempo
Traduce nuestros contenidos
representar grafos tutor completo
aprender apoyo
cualquier cosa Comunidad del Internados
profesor y tutor REDES SOCIALES
Desafío:
Nuestro equipo almacena un
CONTÁCTANOS
grafo Facebook
Nuestros internos CONTRIBUYE
Comparte tu
Twitter
Nuestros historia Donar
Siguienteen
especialistas lección Prensa Blog
Voluntarios
Búsqueda
contenido en anchura La vida en Khan Academy
Nuestros
Nuestra junta patrocinadores
directiva

Términos de uso Aviso de privacidad © 2016 Khan Academy


Todos los derechos reservados, excepto que se indique lo contrario.
Clases y cursos gratuitos disponibles para el aprendizaje en línea en todos los niveles: básico, medio superior y universitario.

CIENCIAS DE LA
COMPUTACIÓN ALGORITMOS

Representación de grafos

https://es.khanacademy.org/computing/computer-science/algorithms/graph-representation/a/representing-graphs 9/9

Vous aimerez peut-être aussi