Clase 15 Vilca PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 77

Introducción a la Ingeniería del

Computador
EE-150

Arturo Vilca Román Ciclo 2019-1


[email protected] Clase 15
12
TIPOS DE DATOS
ABSTRACTOS
12.2
Foundations of Computer Science Cengage Learning
Objetivos
Después de estudiar este capítulo, el estudiante debe ser capaz de:
 Definir el concepto de un tipo de datos abstracto (ADT).

 Definir una pila, las operaciones básicas en las pilas, sus aplicaciones y cómo
se pueden implementar.

 Definir una cola, las operaciones básicas de las colas, sus aplicaciones y cómo
se pueden implementar.

 Definir una lista lineal general, las operaciones básicas en las listas, sus
aplicaciones y cómo se pueden implementar.

 Definir un árbol general y su aplicación.

 Definir un árbol binario, un tipo especial de árbol, y sus aplicaciones.

 Definir un árbol de búsqueda binario (BST) y sus aplicaciones.

 Definir un grafo y sus aplicaciones.

12.3
12-1 LA IDEA DE FONDO

Resolver problemas con una computadora significa


procesar datos. Para procesar los datos, necesitamos
definir el tipo de datos y la operación que se realizará en
los datos. La definición del tipo de datos y la definición
de la operación que se aplicará a los datos es parte de la
idea detrás de un tipo de dato abstracto —abstract
data type (ADT)— para ocultar cómo se realiza la
operación en los datos. En otras palabras, el usuario de
un ADT solo necesita saber que un conjunto de
operaciones está disponible para el tipo de datos, pero
no necesita saber cómo se aplican.

12.4
ADTs simples
Muchos lenguajes de programación ya definen algunos ADT
simples como partes integrales del lenguaje. Por ejemplo, el
lenguaje C define un ADT simple como un número entero.
El tipo de este ADT es un entero con rangos predefinidos. C
también define varias operaciones que pueden aplicarse a
este tipo de datos (suma, resta, multiplicación, división, etc.).
C define explícitamente estas operaciones en enteros y lo que
esperamos como resultados. Un programador que escribe un
programa en C para agregar dos enteros debe conocer el
ADT entero y las operaciones que se le pueden aplicar.

12.5
ADTs complejos
Aunque se han implementado varios ADT simples, como
enteros, reales, caracteres, punteros, etc., y están disponibles
para su uso en la mayoría de los idiomas, muchos ADT
complejos útiles no lo están. Como veremos en este capítulo,
necesitamos una lista ADT, una pila ADT, una cola ADT y
así sucesivamente. Para ser eficientes, estos ADT deben
crearse y almacenarse en la biblioteca de la computadora que
se utilizará.
i
El concepto de abstracción significa:
1. Sabemos lo que puede hacer un tipo de datos.
2. Se oculta cómo se hace.

12.6
Definición
Definamos ahora un ADT. Un tipo de datos abstracto es un
tipo de datos empaquetado con las operaciones que son
significativas para el tipo de datos. Luego, encapsulamos los
datos y las operaciones en los datos y los ocultamos al
usuario.

i
Tipo de datos abstractos:
1. Definición de los datos.
2. Definición de operaciones.
3. Encapsulación de datos y funcionamiento.

12.7
Modelo para un tipo de datos abstracto
El modelo ADT se muestra en la Figura 12.1. Dentro del
ADT hay dos partes diferentes del modelo: estructura de
datos y operaciones (públicas y privadas).

Figura 12.1 El modelo para un ADT


12.8
Implementación
Los lenguajes de computadora no proporcionan paquetes
complejos de ADT. Para crear un ADT complejo, primero se
implementa y se mantiene en una biblioteca. El propósito
principal de este capítulo es presentar algunos ADT comunes
definidos por el usuario y sus aplicaciones. Sin embargo,
también ofrecemos una breve discusión de cada
implementación de ADT para el lector interesado. Ofrecemos
los algoritmos de pseudocódigo de las implementaciones
como ejercicios desafiantes.

12.9
12-2 PILAS

Una pila (stack) es una lista lineal restringida en la que todas


las adiciones y eliminaciones se realizan en un extremo, la
parte superior. Si insertamos una serie de elementos de datos en
una pila y luego los eliminamos, se invierte el orden de los
datos. Este atributo de inversión es la razón por la que las pilas
se conocen como estructuras de datos de último en entrar,
primero en salir (LIFO).

Figura 12.2 Tres representaciones de pilas


12.10
Operaciones en pilas
Hay cuatro operaciones básicas: apilar, insertar, extraer y
verificar vacío (stack, push, pop y empty), que definimos en
este capitulo.
La operación stack
La operación stack crea una pila vacía. A continuación se
muestra el formato.

Figura 12.3 Operación stack


12.11
La operación push
La operación push inserta un elemento en la parte superior
de la pila. A continuación se muestra el formato.

Figura 12.4 Operación push


12.12
La operación pop
La operación pop elimina el elemento en la parte superior de
la pila. A continuación se muestra el formato.

Figura 12.5 Operación pop


12.13
La operación empty
La operación empty comprueba el estado de la pila. A
continuación se muestra el formato.

Esta operación devuelve true si la pila está vacía y false si la


pila no está vacía.

12.14
Stack ADT
Definimos un stack como un ADT tal como se muestra a
continuación:

12.15
Ejemplo 12.1

La Figura 12.6 muestra un segmento de un algoritmo que aplica


las operaciones definidas previamente en un pila S.

Figura 12.6 Ejemplo 12.1


12.16
Aplicaciones de una pila
Las aplicaciones de una pila se pueden clasificar en cuatro
categorías amplias: inversión de datos, datos de
emparejamiento, aplazamiento del uso de datos, y pasos de
retroceso. Discutimos los dos primeros en las secciones que
siguen.
Invertir elementos de datos
La inversión de elementos de datos requiere que un conjunto
dado de elementos de datos se reordene de modo que el
primer y el último elemento se intercambien, y todas las
posiciones entre el primero y el último también se
intercambien relativamente. Por ejemplo, la lista (2, 4, 7, 1,
6, 8) se convierte en (8, 6, 1, 7, 4, 2).

12.17
Ejemplo 12.2
En el Capítulo 2 (Figura 2.6 en la página 27) proporcionamos un
simple diagrama UML para convertir un número entero de decimal
a cualquier base. Aunque el algoritmo es muy simple, si
imprimimos los dígitos del número entero convertido a medida que
se crean, obtendremos los dígitos en orden inverso. La instrucción
de impresión en cualquier lenguaje de computadora imprime
caracteres de izquierda a derecha, pero el algoritmo crea los dígitos
de derecha a izquierda. Podemos usar la característica de inversión
de una pila (estructura LIFO) para resolver el problema.
El algoritmo 12.1 muestra el pseudocódigo para convertir un entero
decimal a binario e imprimir el resultado. Primero creamos una pila
vacía. Luego usamos un bucle while para crear los bits, pero en
lugar de imprimirlos, los colocamos en la pila. Cuando todos los
bits son creados, salimos del bucle. Ahora usamos otro bucle para
sacar los bits de la pila e imprimirlos. Tenga en cuenta que los bits
se imprimen en el orden inverso al que se han creado.
12.18
Ejemplo 12.2 (continúa…)

12.19
Ejemplo 12.2 (…continuación)

12.20
Emparejamiento de elementos de datos
A menudo necesitamos emparejar algunos caracteres en una
expresión. Por ejemplo, cuando escribimos una expresión
matemática en un lenguaje de computadora, a menudo
necesitamos usar paréntesis para cambiar la precedencia de los
operadores. Las siguientes dos expresiones se evalúan de manera
diferente debido a los paréntesis en la segunda expresión:

Cuando escribimos una expresión con muchos paréntesis, a


menudo olvidamos emparejar los paréntesis. Uno de los deberes
de un compilador es hacer la verificación por nosotros. El
compilador usa una pila para verificar que todos los paréntesis de
apertura estén emparejados con un paréntesis de cierre.
12.21
Ejemplo 12.3 (continúa…)
El algoritmo 12.2 muestra cómo podemos verificar si todos los
paréntesis de apertura están emparejados con un paréntesis de cierre.

12.22
Example 12.3 (…continuación)

Algorithm 12.2 Continued

12.23
Implementación de la pila
En el nivel ADT, usamos la pila y sus cuatro operaciones; a
nivel de implementación, necesitamos elegir una estructura de
datos para implementarla. Los ADT de pila se pueden
implementar utilizando un arreglo o una lista enlazada. La
figura 12.7 muestra un ejemplo de una pila ADT con cinco
elementos. La figura también muestra cómo podemos
implementar la pila.
En nuestra implementación de arreglo, tenemos un registro que
tiene dos campos. El primer campo se puede utilizar para
almacenar información sobre el arreglo. La implementación de
la lista vinculada es similar: tenemos un nodo adicional que
tiene el nombre de la pila. Este nodo también tiene dos
campos: un contador y un puntero que apunta al elemento
superior.
12.24
Figura 12.7 Implementaciones de pila
12.25
12-3 COLAS

Una cola –queue- es una lista lineal en la que los datos


solo se pueden insertar en un extremo, llamado parte
trasera –rear-, y eliminar en el otro extremo, llamado
parte delantera –front-. Estas restricciones aseguran
que los datos se procesen a través de la cola en el orden
en que se reciben. En otras palabras, una cola es una
estructura first in, first out (FIFO).

Figura 12.8 Dos representaciones de colas


12.26
Operaciones en colas
Aunque podemos definir muchas operaciones para una cola,
cuatro son básicas: crear cola, ponerse en cola, salir de la
cola y verificar vacío, como se define a continuación.
La operación queue
La operación queue crea una cola vacía. A continuación se
muestra el formato.

Figura 12.9 La operación queue


12.27
La operación enqueue
La operación enqueue inserta un elemento en la parte
posterior de la cola. A continuación se muestra el formato.

Figura 12.10 La operación enqueue


12.28
La operación dequeue
La operación dequeue elimina el elemento en la parte
delantera de la cola. A continuación se muestra el formato.

Figura 12.11 La operación dequeue


12.29
La operación empty
La operación empty comprueba el estado de la cola. A
continuación se muestra el formato.

Esta operación devuelve true si la cola está vacía y false si la


cola no está vacía.

12.30
Cola ADT
Definimos una cola como un ADT como se muestra a
continuación:

12.31
Ejemplo 12.4

La Figura 12.12 muestra un segmento de un algoritmo que aplica


las operaciones definidas previamente en una cola Q.

Figura 12.12 Ejemplo 12.4


12.32
Aplicaciones de la cola
Las colas son una de las estructuras de procesamiento de
datos más comunes. Se encuentran en prácticamente todos
los sistemas operativos y redes y en muchas otras áreas. Por
ejemplo, las colas se utilizan en aplicaciones comerciales en
línea, como el procesamiento de solicitudes de clientes,
trabajos y pedidos. En un sistema de computadoras, se
necesita una cola para procesar los trabajos y para los
servicios del sistema, como los spools de impresión.

12.33
Ejemplo 12.5

Las colas pueden usarse para organizar bases de datos por alguna
característica de los datos. Por ejemplo, imagine que tenemos una
lista de datos ordenados almacenados en la computadora que
pertenecen a dos categorías: menos de 1000 y más de 1000.
Podemos usar dos colas para separar las categorías y al mismo
tiempo mantener el orden de los datos en sus categoría propia. El
algoritmo 12.3 muestra el pseudocódigo para esta operación.

12.34
Ejemplo 12.5 (continúa…)

12.35
Ejemplo 12.5 (…continuación)

Algorithm 12.3 Continued

12.36
Ejemplo 12.6
Otra aplicación común de una cola es ajustar y crear un equilibrio
entre un productor rápido de datos y un consumidor lento de
datos. Por ejemplo, suponga que una CPU está conectada a una
impresora. La velocidad de una impresora no es comparable con
la velocidad de una CPU. Si la CPU espera a que la impresora
imprima algunos datos creados por la CPU, la CPU estará
inactiva durante mucho tiempo. La solución es una cola. La CPU
crea tantos trozos de datos como la cola puede contener y los
envía a la cola. La CPU ahora es libre de hacer otros trabajos. Los
trozos se retiran lentamente e imprimen en la impresora. La cola
utilizada para este propósito se conoce normalmente como una
cola de cola de impresión.

12.37
Implementación de la cola
En el nivel ADT, usamos la cola y sus cuatro operaciones en el
nivel de implementación. Necesitamos elegir una estructura de
datos para implementarla. Una cola ADT se puede implementar
utilizando un arreglo o una lista enlazada. La Figura 12.13 en
la página 329 muestra un ejemplo de una cola ADT con cinco
elementos. La figura también muestra cómo podemos
implementarla. En la implementación de arreglo tenemos un
registro con tres campos. El primer campo se puede utilizar
para almacenar información sobre la cola.
La implementación de la lista enlazada es similar:
tenemos un nodo adicional que tiene el nombre de la cola. Este
nodo también tiene tres campos: una cuenta, un puntero que
apunta al elemento frontal y un puntero que apunta al elemento
posterior.
12.38
Figura 12.13 Implementación de la cola
12.39
12-4 LISTAS LINEALES GENERALES

Las pilas y colas definidas en las dos secciones


anteriores son listas lineales restringidas. Una lista
lineal general es una lista en la que las operaciones,
como la inserción y la eliminación, se pueden realizar
en cualquier lugar de la lista: al principio, en el medio o
al final. La figura 12.14 muestra una lista lineal general.

Figura 12.14 Lista lineal general


12.40
Operaciones en listas lineales generales.
Aunque podemos definir muchas operaciones en una lista
lineal general, en este capítulo analizamos solo seis
operaciones comunes: list, insert, delete, retrieve, traverse
and empty.
La operación list
La operación list crea una lista vacía. A continuación se
muestra el formato:

12.41
La operación insert
Como suponemos que los datos en una lista lineal general están
ordenados, la inserción debe hacerse de tal manera que se
mantenga el orden de los elementos. Para determinar dónde se
colocará el elemento, se necesita buscar. Sin embargo, la
búsqueda se realiza en el nivel de implementación, no en el
nivel ADT.

Figura 12.15 La operación insert


12.42
La operación delete
La eliminación de una lista general (Figura 12.16) también
requiere que se busque en la lista para ubicar los datos que se
eliminarán. Una vez que se encuentra la ubicación de los datos,
se puede realizar la eliminación. A continuación se muestra el
formato:

Figura 12.16 La operación delete


12.43
La operación retrieve
Por recuperación –retrieval-, nos referimos al acceso de un
solo elemento. Al igual que la inserción y la eliminación,
primero se debe buscar en la lista general y, si se encuentran
los datos, se pueden recuperar. El formato de la operación de
recuperación es:

Figura 12.17 La operación retrieve


12.44
La operación traverse
Cada una de las operaciones anteriores involucra un solo
elemento en la lista, accediendo aleatoriamente a la lista. El
recorrido de la lista, por otro lado, implica el acceso
secuencial. Es una operación en la que todos los elementos
de la lista se procesan uno por uno. A continuación se
muestra el formato:

12.45
La operación empty
La operación empty comprueba el estado de la lista. A
continuación se muestra el formato:

Esta operación devuelve verdadero si la lista está vacía, o


falso si la lista no está vacía.

12.46
Lista lineal general ADT
Definimos una lista lineal general como un ADT como se
muestra a continuación:

12.47
Ejemplo 12.7
La Figura 12.18 muestra un segmento de un algoritmo que aplica
las operaciones previamente definidas en una lista L. Tenga en
cuenta que la tercera y quinta operación insertan los nuevos datos
en la posición correcta, porque la operación de inserción llama al
algoritmo de búsqueda en el nivel de implementación para
encontrar dónde Los nuevos datos deben ser insertados. La cuarta
operación no elimina el elemento con el valor 3 porque no está en
la lista.

12.48
Figura 12. 18 Ejemplo 12.7
Aplicaciones de la lista lineal general
Las listas lineales generales se utilizan en situaciones en las
que se accede a los elementos de forma aleatoria o
secuencial. Por ejemplo, en una universidad se puede usar
una lista lineal para almacenar información sobre los
estudiantes que están matriculados en cada semestre.

12.49
Ejemplo 12.8
Supongamos que una universidad tiene una lista lineal general
que contiene información sobre los estudiantes y que cada
elemento de datos es un registro con tres campos: ID, Nombre y
Nota. El algoritmo 12.4 muestra un algoritmo que ayuda a un
profesor a cambiar la calificación de un estudiante. La operación
de eliminación elimina un elemento de la lista, pero lo pone a
disposición del programa para permitir que se cambie la
calificación. La operación de inserción inserta el elemento
modificado de nuevo en la lista. El elemento contiene todo el
registro para el estudiante, y el objetivo es la ID utilizada para
buscar en la lista.

12.50
Ejemplo 12.8 (continúa…)

12.51
Example 12.9
Continuing with Example 12.8, assume that the tutor wants to
print the record of all students at the end of the semester.
Algorithm 12.5 can do this job. We assume that there is an
algorithm called Print that prints the contents of the record. For
each node, the list traverse calls the Print algorithm and passes
the data to be printed to it.

12.52
Ejemplo 12.9 (…continuación)

12.53
Implementación de la lista lineal general
A nivel de ADT, utilizamos la lista y sus seis operaciones,
pero a nivel de implementación necesitamos elegir una
estructura de datos para implementarla. Una lista general de
ADT se puede implementar utilizando un arreglo o una lista
enlazada. La figura 12.19 muestra un ejemplo de una lista
ADT con cinco elementos. La figura también muestra cómo
podemos implementarla.

La implementación de la lista enlazada es similar: tenemos


un nodo adicional que tiene el nombre de la lista. Este nodo
también tiene dos campos, un contador y un puntero que
apunta al primer elemento.

12.54
Figura 12.19 Implementación de la lista lineal general
12.55
12-5 ÁRBOLES

Un árbol –tree- consiste en un conjunto finito de


elementos, llamados nodos (o vértices) y un conjunto
finito de lineas dirigidas, llamadas arcos, que conectan
los pares de nodos.

Figura 12.20 Representación de un árbol


12.56
Podemos dividir los vértices en un árbol en tres categorías:
raiz, hojas y los nodos internos. La Tabla 12.1 muestra el
número de arcos de entrada y salida permitidos para cada
tipo de nodo.

12.57
Cada nodo en un árbol puede tener un sub-árbol. El
subárbol de cada nodo incluye uno de sus hijos y todos los
descendientes de ese niño. La Figura 12.21 muestra todos los
subárboles para el árbol en la Figura 12.20.

Figura 12.21 Subárboles


12.58
12-6 ÁRBOLES BINARIOS

Un árbol binario es un árbol en el que ningún nodo


puede tener más de dos subárboles. En otras palabras,
un nodo puede tener cero, uno o dos subárboles.

Figura 12.22 Un árbol binario


12.59
Definición recursiva de árboles binarios
En el Capítulo 8 introducimos la definición recursiva de un
algoritmo. También podemos definir una estructura o un
ADT recursivamente. Lo siguiente da la definición recursiva
de un árbol binario. Tenga en cuenta que, según esta
definición, un árbol binario puede tener una raíz, pero cada
subárbol también puede tener una raíz.

12.60
La Figura 12.23 muestra ocho árboles, el primero de los
cuales es un árbol binario vacío (a veces llamado árbol
binario nulo).

Figura 12.23 Ejemplos de árboles binarios


12.61
Operaciones sobre árboles binarios
Las seis operaciones más comunes definidas para un árbol
binario son tree (crea un árbol vacío), insert, delete, retrieve,
empty y traversal. Las primeros cinco son complejas y están
fuera del alcance de este libro. Discutimos el recorrido del
árbol binario en esta sección.

12.62
Recorridos de árboles binarios
Un recorrido de árbol binario requiere que cada nodo del
árbol se procese una vez y solo una vez en una secuencia
predeterminada. Los dos enfoques generales de la secuencia
transversal son recorrido en profundidad-primero depth-first
y amplitud-primero breadth-first.

Figura 12.24 Recorrido en profundidad-primero de un árbol binario


12.63
Ejemplo 12.10
La Figura 12.25 muestra cómo visitamos cada nodo en un árbol
usando el recorrido de preorden. La figura también muestra el
orden de caminar. En el recorrido de la preorden, visitamos un
nodo cuando pasamos por su lado izquierdo. Los nodos son
visitados en este orden: A, B, C, D, E, F.

Figure 12.25 Example 12.10


12.64
Ejemplo 12.11
La Figura 12.26 muestra cómo visitamos cada nodo en un árbol
usando el recorrido transversal en amplitud primero. La figura
también muestra el orden de caminar. El orden de recorrido es A,
B, E, C, D, F.

Figura 12.26 Ejemplo 12.11


12.65
Aplicaciones de un árbol binario
Los árboles binarios tienen muchas aplicaciones en Ciencias
de la Computación. En esta sección mencionamos solo dos
de ellos: la codificación de Huffman y los árboles de
expresión.

Codificación Huffman
La codificación de Huffman es una técnica de compresión
que utiliza árboles binarios para generar un código binario de
longitud variable a partir de una cadena de símbolos.
Discutimos la codificación de Huffman en detalle en el
Capítulo 15.

12.66
Árboles de expresión
Una expresión aritmética se puede representar en tres
formatos diferentes: infijo, posfijo and prefijo. En una
notación de infijo, el operador se encuentra entre los dos
operandos. En la notación postfix, el operador viene después
de sus dos operandos, y en la notación prefijo aparece antes
de los dos operandos. Estos formatos se muestran a
continuación para agregar dos operandos A y B.

12.67
Figura 12.27 Árbol de expresión
12.68
12-7 ÁRBOLES DE BÚSQUEDA BINARIA

Un binary search tree (BST) es un árbol binario con una


propiedad adicional: el valor clave de cada nodo es
mayor que los valores clave de todos los nodos en cada
subárbol izquierdo y más pequeño que el valor de todos
los nodos en cada subárbol derecho. La figura 12.28
muestra la idea.

Figure 12.28 Binary search tree (BST)


12.69
Ejemplo 12.12
La figura 12.29 muestra algunos árboles binarios que son BST y
otros que no lo son. Tenga en cuenta que un árbol es un BST si
todos sus subárboles son BST y todo el árbol es también un BST.

Figura 12.29 Ejemplo 12.12


12.70
Una propiedad muy interesante de un BST es que si
aplicamos el recorrido inorder de un árbol binario, los
elementos que se visitan se ordenan en orden ascendente. Por
ejemplo, las tres BST en la Figura 12.29, cuando se recorren
en orden, dan las listas (3, 6, 17), (17, 19) y (3, 6, 14, 17,
19).

i
Un recorrido en orden de un BST crea una lista que
está ordenada en orden ascendente

12.71
Otra característica que hace que una BST sea interesante es
que podemos usar una versión de la búsqueda binaria que
usamos en el Capítulo 8 para un árbol de búsqueda binaria.
La Figura 12.30 muestra el UML para una búsqueda BST.

Figura 12.30 Travesía ignorada de un árbol de búsqueda binario


12.72
Árbol binario de búsqueda ADTs
El ADT para un árbol de búsqueda binario es similar al que
definimos para una lista lineal general con la misma
operación. De hecho, vemos más listas BST que listas
lineales generales en la actualidad. La razón es que buscar
una BST es más eficiente que buscar una lista lineal: una
lista lineal general utiliza la búsqueda secuencial, pero las
BST usan una versión de la búsqueda binaria.

12.73
Implementación de un BST
Los BST se pueden implementar utilizando matrices o listas
vinculadas. Sin embargo, las estructuras de listas enlazadas
son más comunes y más eficientes. La implementación
utiliza nodos con dos punteros, izquierdo y derecho.

Figura 12.31 Una implementación BST


12.74
12-8 GRAFOS

Un grafo es un ADT hecho de un conjunto de nodos,


llamado vértices, y conjunto de líneas que conectan los
vértices, llamadas aristas o arcos. Mientras que un
árbol define una estructura jerárquica en la que un nodo
puede tener un solo padre, cada nodo en un gráfico
puede tener uno o más padres. Los grafos pueden ser
dirigidos o no-dirigidos. En un grafo dirigido, o
digrafo, cada borde, que conecta dos vértices, tiene una
dirección de un vértice al otro. En un grafo no dirigido,
no hay dirección. La Figura 12.32 muestra un ejemplo
de un grafo dirigido (a) y un grafo no dirigido (b).
12.75
Figura 12.32 Grafos
12.76
Ejemplo 12.13
Un mapa de ciudades y las carreteras que conectan las ciudades
se puede representar en una computadora usando un grafo no
dirigido. Las ciudades son vértices y los bordes no dirigidos son
los caminos que los conectan. Si queremos mostrar las distancias
entre las ciudades, podemos usar grafos ponderados, en los que
cada borde tiene un peso que representa la distancia entre dos
ciudades conectadas por ese borde.
Ejemplo 12.14
Otra aplicación de grafos es en redes informáticas (Capítulo 6).
Los vértices pueden representar los nodos o hubs, los bordes
pueden representar la ruta. Cada borde puede tener un peso que
define el costo de llegar desde un concentrador a un concentrador
adyacente. Un enrutador puede usar algoritmos de grafos para
encontrar la ruta más corta entre sí y el destino final de un
paquete.
12.77

También podría gustarte