Está en la página 1de 81

ÍNDICE

1. Unidad 3: Pilas, colas y listas ..............................................................................3

Tema 1: Listas, pilas y colas .......................................................................................... 3

Objetivo: ........................................................................................................................ 3

Introducción: ................................................................................................................. 3

2. Información de los subtemas .............................................................................4

2.1 Subtema 1: Definiciones y conceptos ................................................................. 4

2.2 Subtema 2: Aplicación de POO (Programación Orientada a Objetos) para la


gestión de listas, pilas y colas. ...................................................................................... 9

2.3 Subtema 3: Métodos de gestión ...................................................................... 11

2.4 Subtema 4: Ejercicios de aplicación ................................................................. 13

3. Bibliografía ......................................................................................................14

2
Listas, pilas y colas

1. Unidad 3: Pilas, colas y listas


Tema 1: Listas, pilas y colas
Objetivo:

Aplicar técnicas de programación para la gestión de lista según su tipo: pilas y


colas.

Introducción:
Dentro de la programación nos encontramos con el término “estructuras de datos”,
estas pueden ser dinámicas o estáticas. Las estructuras dinámicas crecerán conforme
se vaya ejecutando el programa, y se la define como una colección de elementos que
toman el nombre nodos que normalmente son los registros (Sáez Pous, 2010).
La estructura de datos guarda diferencia entre lo que es un array. Los array tienen
espacio fijo ya definido para almacenar elementos, por lo contrario la estructura
dinámica de datos se va expandiendo y contrayendo en el periodo de ejecución del
programa (Joyanes Aguilar, 2008).

Las estructuras dinámicas se dividen en dos grandes grupos, lineales y no lineales


como se puede visualizar en la Imagen 1:

Imagen 1.- Estructura dinámica


Fuente: (Joyanes Aguilar, 2008)
© Universidad Estatal de Milagro – UNEMI

Debido a su facilidad de expansión las estructuras dinámicas son utilizadas para el


almacenamiento de datos del mundo real y que constantemente están cambiando
(Joyanes Aguilar, 2003). Estas estructuras son muy fáciles de crear, modificar y añadir
información.

Una estructura estática es definida desde el primer momento que se inicia a escribir el
programa y ésta no podrá ser modificada por el programa. Los valores de sus
elementos variarán, pero su estructura no cambiará ya que ésta es fija (Joyanes
Aguilar, 2008).

Como se muestra en la Imagen 1, las estructuras dinámicas pueden ser de dos tipos
lineales y no lineales, más adelante se conocerán las definiciones de esta clasificación.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 3


Listas, pilas y colas

2. Informacion de los subtemas


2.1 Subtema 1: Definiciones y conceptos
Listas
Es el conjunto de elementos con un mismo tipo de dato, el número de elementos de
las listas pueden variar, se debe considerar que cada elemento tendrá únicamente un
predecesor y sucesor, exceptuando claramente el primero y último elemento de la
lista. La definición dada ha sido general y también está inmerso los ficheros y vectores
(Sáez Pous, 2010).

Cada elemento de la lista se almacenará generalmente de manera continua, es decir


un elemento detrás de otro en posiciones consecutivas de la memoria (Cairó, 2006).

El almacenamiento de una lista lineal se dará en la memoria principal de la


computadora considerando ubicaciones consecutivas. La memoria que se asigne
tomará el nombre de almacenamiento secuencial, pero debemos considerar que no es
la única forma de almacenamiento ya que también existe el almacenamiento
encadenado o enlazado (Sáez Pous, 2010).

A continuación se detallan las operaciones que se pueden ejecutar sobre las listas
lineales contiguas (Joyanes Aguilar, 2008).
1. Inserción, eliminación o localización de un elemento
2. Identificar el tamaño que tiene la lista
3. Búsqueda de un determinado elemento
4. Clasificación de los elementos considerando un orden definido sea numérico
o alfabético
5. Unión de varias listas en una
6. División de una lista en varias se denominan sub listas
7. Copiado
© Universidad Estatal de Milagro – UNEMI

8. Borrado

El almacenamiento de una lista contigua se realizará en la memoria de la computadora


considerando posiciones sucesivas o adyacentes, su procesamiento se realizará de
igual forma que un array unidimensional. La adición y acceso a los elementos de una
lista es sumamente fácil; sin embargo, las operaciones de inserción o eliminación de
elementos requiere que los elementos existentes se desplacen de lugar (Joyanes
Aguilar, 2003).

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 4


Listas, pilas y colas

Ejemplos de listas

Se tiene una lista para realizar compras en un supermercado, cuando ya estamos en el


lugar para realizar dichas compras conforme se vayan encontrando los productos
requeridos estos van siendo tachados o eliminados de la lista, si nos damos cuenta el
encontrar los elementos de la lista no implica seguir un orden, es decir puedo
encontrar primero el último elemento descrito en la lista y esto no afectará el proceso
(Joyanes Aguilar, 2008).

Implementación de listas

Si deseamos implementar una lista, debemos conocer que esta acción se la puede
realizar de varias maneras (Sáez Pous, 2010):

Implementación secuencial

Los elementos que se almacene en la lista guardarán un orden consecutivo, para


ejecutar esta implementación se requiere tener los siguientes elementos (Sáez Pous,
2010):

1. Un vector
2. Un indicador con el cual se identifique el número de elementos que se
almacenarán en el vector, este indicador nos permitirá controlar que no
excedamos el número de elementos permitidos.
3. Un indicador con el elemento de interés

A continuación se muestra una imagen en la cual se aprecia la implementación de una


lista secuencial.

1 2 i-1 i I+1 n Max

A V1 V2 …. Vi-1 Vi Vi+1 …. Vn …..


© Universidad Estatal de Milagro – UNEMI

act
nelem = n

Imagen 2.- Implementación secuencial


Fuente: (Joyanes Aguilar, 2008)

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 5


Listas, pilas y colas

Implementación encadenada

A diferencia de la implementación secuencial, la encadenada, se basará en la relación


que guardará cada uno de los elementos en la posición en que se halle el elemento
sucesor (Sáez Pous, 2010).

En la Imagen 3 podemos observar un ejemplo de almacenamiento encadenado,


considerando que se almacena la ubicación del vector y que existe un indicador para la
posición en que se hallará el siguiente elemento (Joyanes Aguilar, 2008).

Imagen 3.- Implementación encadenada


Fuente: (Joyanes Aguilar, 2008)

La implementación encadenada es utilizada para resolver la secuencia en aquellas


operaciones como la inserción y borrado, ya que ésta evitará el desplazamiento de los
elementos en el vector, esto porque no se tendrá que guardar un orden secuencial
(Joyanes Aguilar, 2008). Sin embargo un punto muy importante a considerar es que el
uso de listas encadenadas conlleva que se almacene por cada elemento un campo
adicional, pero son útiles para listas volátiles y con elementos con dimensiones
enormes (Joyanes Aguilar, 2003).

Pilas
También conocida como stack, es un tipo especial de lista lineal, donde las operaciones
© Universidad Estatal de Milagro – UNEMI

de inserción y borrado de nuevos elementos se ejecutan considerando solo un


extremo de la lista, cuyo nombre será cima. Las pilas tienen una estructura con
numerosas analogías que a diario las palpamos en la vida real (Guardati Buemo, 2007):

Como se lo mencionó en el párrafo anterior, y considerando que las operaciones


comunes de inserción y eliminación que puedan se realicen sobre las pilas, debemos
recordar que siempre se considerará un extremo y éste será el superior, ya que los
elementos de la pila se podrán eliminar en orden inverso al que se insertan (Guardati
Buemo, 2007). Dicho de otra manera el último elemento que se guarde en la pila será

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 6


Listas, pilas y colas

el primero en sacarlo. Estas estructuras suelen tomar el nombre de LIFO, ultimo en


entrar, primero en salir.

A continuación se describen las operaciones asociadas a las pilas para su manejo:


1. Operación de inserción de un elemento en la pila (push)
2. Operación de eliminación de un elemento de la pila (pop)

En la Imagen 4 se representa gráficamente una pila.

Imagen 4.-Pila
Fuente: (Joyanes Aguilar, 2008)

Colas
Estas estructuras también son lineales y son muy similares a las pilas, las operaciones
inserción y eliminación de elementos las diferencian (Guardati Buemo, 2007). Como
por ejemplo cuando se desee eliminar un elemento de la cola se considerará siempre
aquel que esté en la primera posición de la lista, por el contrario, la inserción se
realizará en el otro extremo, es decir al final. En las colas el primer elemento que entró
será el primero elemento en salir; por ello toma el nombre de listas FIFO (Joyanes
Aguilar, 2003). En conclusión las colas se diferencias de las pilas en la forma en la cual
entran y salen los datos. Considerando esta estructura, se tiene claro que se utilizarán
para almacenar y procesar datos en función del orden de llegada de los mismos.
© Universidad Estatal de Milagro – UNEMI

Imagen 5.- Cola


Fuente: (Joyanes Aguilar, 2008)

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 7


Listas, pilas y colas

Cola Doble
Se la conoce como cola bidimensional, las operaciones de inserción y eliminación de
elementos pueden realizar en cualquiera de los dos extremos de la lista, es decir, al
inicio o al final de la lista (Guardati Buemo, 2007).

Imagen 6.- Cola doble


Fuente: (Guardati Buemo, 2007)

Se definen dos variantes que se deben considerar para las estructuras de doble cola:
1. Doble cola de entrada restringida
Estas solo aceptarán la inserción de datos al final de la cola, es decir tomarán
como base para la inserción la última posición de la estructura.

2. Doble cola de salida restringida


Estas solo permitirán la eliminación de datos sólo al frente o inicio de la cola.
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 8


Listas, pilas y colas

2.2 Subtema 2: Aplicación de POO (Programación


Orientada a Objetos) para la gestión de listas, pilas
y colas.
Ejemplo de colas

El ejercicio plantea la inserción de datos o elementos en una cola, para lo cual se


proporcionará dos colas con elementos ya ordenados crecientemente como entradas;
pero esta operación deberá devolver la cola ordenada del mismo modo pero solo
considerando los elementos que muestran las dos colas de entrada (Sáez Pous, 2010).
En la imagen seguida se muestra el ejemplo de manera gráfica.

A 1 3 4 6 8 11

C
1 4 11
B
1 3 4 6 8 11

Imagen 7.- Ejemplo de cola


Fuente: (Guardati Buemo, 2007)

Explicación del ejercicio

Al contar con una cola ya ordenada, evitará que se recorra toda la cola si se
desea corroborar que la cola tiene el elemento que se busca. Si analizamos
© Universidad Estatal de Milagro – UNEMI

detalladamente podremos identificar que, si el primer elemento de la cola A es


el menor con el primer elemento de la cola B, tendremos por seguro que no se
encontrará otro igual en lo que resta de la cola B, ya que los demás elementos
de la cola serán mayores en comparación al primer elemento de la cola A (Sáez
Pous, 2010).

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 9


Listas, pilas y colas

Por consiguiente se realizarán las siguientes operaciones:

1. Se creará una cola nueva en la que se ubicarán los elementos que


sean comunes entre ambas colas de entrada A y B.
2. Se dará lectura a los primeros elementos de ambas colas.
3. Al dar lectura de los primeros elementos de cada cola se identifica
que son iguales, dicho elemento se encolará en la nueva cola y se
desencolará de las dos colas de entrada A y B. Por el contrario, si en
la lectura los elementos son diferentes, y solo se desencolará el
elemento más pequeño.
4. Mientras no se haya vaciado ninguna de las dos colas de entrada el
proceso se deberá repetir.
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 10


Listas, pilas y colas

2.3 Subtema 3: Métodos de gestión


Inserción de Listas
Para realizar la operación de inserción de un elemento en una lista, puede realizarse
de diferentes maneras, pero para ello debemos considerar lo siguiente: (Joyanes
Aguilar, 2008):
1. La cabeza de la lista, es decir el primer elemento.
2. El final de la lista, es decir último elemento.
3. El elemento que antecede, al especificado y,
4. El elemento que precede.

Búsqueda de listas

El método buscar Lista, de la clase Lista, se utilizará tomando en cuenta el índice para
así poder recorrer la lista de nodo a nodo. Por ello se utilizarán los bucles, mismo que
inicializará el valor del índice para que inicie en el primer nodo hasta que llegue al
último (Joyanes Aguilar, 2008).

El proceso de búsqueda terminará cuando se encuentra el nodo, o bien cuando se ha


recorrido la lista y entonces índice toma el valor null. Para realizar la comparación
entre el dato que se está buscando vs el dato que existe en el nodo, se utilizará el
operador lógico “==”; se utilizará este operador solo si los datos son de tipo simple
(Joyanes Aguilar, 2008).

Borrado de un nodo de una lista

Para la eliminación de un nodo de una lista enlazada, consiste en relacionar el


elemento del nodo anterior con el elemento del nodo siguiente del que se vaya a
eliminar, esto liberará la memoria que anteriormente ocupaba (Joyanes Aguilar, 2003).
A continuación se detallan los pasos para ejecutar un algoritmo de búsqueda:

1. Se realizará la búsqueda del nodo que tiene el dato, esto mediante la obtención
de la ubicación del nodo que se desea eliminar con la ubicación del elemento
anterior.
© Universidad Estatal de Milagro – UNEMI

2. Se creará un enlace del nodo anterior que apunta al nodo siguiente que se
desea eliminar.
3. Si el elemento del nodo que se desea eliminar es el primer elemento de la lista,
se deberá modificar primero con la finalidad que tenga la ubicación del
siguiente nodo.
4. Con la eliminación del nodo, automáticamente se liberará espacio de memoria.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 11


Listas, pilas y colas

Aplicaciones de las pilas


Se conoce bien que el uso de las pilas en la programación sirven para dar solución a
diferentes problemas, las pilas también son estructuras LIFO, último en entrar primero
en salir (Joyanes Aguilar, 2003). A continuación se definen las funciones de las pilas:
1. Push, agregará un elemento a la pila.
2. Pop y Pull o Int, quitará el elemento que está al final de la pila.
3. Vacía.

Llamadas a subprogramas

Para realizar llamadas dentro de un programa primero se deberá realizar el llamado a


subprogramas. Por ello el programa principal deberá tener presente desde donde se
realizó el llamado, con la finalidad de poder regresar a esa ubicación cuando haya
finalizado la ejecución del subprograma (Guardati Buemo, 2007).

Pondremos el siguiente ejemplo para mayor compresión de lo que consiste las


llamadas a subprogramas; se tienen tres subprogramas cada uno caracterizado por
una letra A, B y C, ahora vamos a plantear el escenario de invocación del subprograma
A hacia B y B hacia C. El primer subprograma que arrancaría con su ejecución sería el A,
sin embargo, a pesar de aquello también será el último en terminar, ya que dependerá
de la ejecución del subprograma B y C respectivamente (Guardati Buemo, 2007). Es
importante que se tenga claro que esta acción se puede ejecutar ya que se posee las
direcciones de retorno en una pila.

Colas

La Cola poseen las siguientes funciones (Sáez Pous, 2010):

1. Encolar
Acción de agregar un elemento a la cola.
2. Int decolar
Acción de sacar elementos de la cola que se sitúen al principio de la misma.
3. Int cabeza
© Universidad Estatal de Milagro – UNEMI

Acción de devolver devuelve el elemento que se sitúe al principio de la cola, sin


necesidad de extraerlo de la cola.
4. Vacía

Para eliminar un elemento de la cola es necesario que se verifique cada uno de los
elementos almacenados, esto con la finalidad de saber cuál es el menor o mayor. Esta
acción trae consigo problemas, el más importante será el tiempo que se tomará para
eliminar un elemento (Sáez Pous, 2010).

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 12


Listas, pilas y colas

2.4 Subtema 4: Ejercicios de aplicación


Ejercicio 1
Realizaremos un ejercicio de pilas en el lenguaje de programación Python donde se
verá el comportamiento LIFO utilizando el datetype “List” (Astudillo, 2013).

Ejercicio 2

Realizaremos un ejercicio donde se podrá visualizar el concepto de colas (Astudillo,


2013).
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 13


Listas, pilas y colas

3. Bibliografía

» Astudillo, J. (2013). Python Pilas y Colas. Retrieved from


https://es.slideshare.net/RoverOportunity2012/python-pilas-y-colas
» Cairó, O. (2006). Fundamentos de programación. Piensa en C. Pearson, 1, 392.
https://doi.org/10.1017/CBO9781107415324.004
» Guardati Buemo, S. (2007). Estructura de Datos Orientada a Objetos.
Algoritmos con C++. Retrieved from
https://www.academia.edu/6122916/Estructura_De_Datos_Oientada_A_Objet
os
» Joyanes Aguilar, L. (2003). Fundamentos de programación: Libro de problemas.
Algoritmos, estructuras de datos y objetos (2a. ed.). (C. Fernández Madrid, Ed.)
(Segunda ed). Retrieved from www.fullengineeringbook.net
» Joyanes Aguilar, L. (2008). Fundamentos de Programación. (J. L. G. y C.
Sánnchez, Ed.) (Cuarta). España: Mc Graww Hill. Retrieved from
https://combomix.net/wp-content/uploads/2017/03/Fundamentos-de-
programación-4ta-Edición-Luis-Joyanes-Aguilar-2.pdf
» Sáez Pous, X. (2010). Estructuras de datos básicas (Eureca Med). Retrieved from
http://openaccess.uoc.edu/webapps/o2/bitstream/10609/6922/6/Estructuras
de datos básicas.pdf
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 14


ÍNDICE

1. Unidad 3: Pilas, colas y listas ..............................................................................3

Tema 2: Estudio de Casos.............................................................................................. 3

Objetivo: ........................................................................................................................ 3

Introducción: ................................................................................................................. 3

2. Información de los subtemas .............................................................................4

2.1 Subtema 1: Planteamiento del caso .................................................................. 4

2.2 Subtema 2: Aplicación de correlación de Pearson ............................................. 5

2.3 Subtema 3: Aplicación de posicionamiento geo referencial .............................. 6

2.4 Subtema 4: Codificación de caso ....................................................................... 7

3. Bibliografía ......................................................................................................11

2
Estudio de Casos

1. Unidad 3: Pilas, colas y listas


Tema 2: Estudio de Casos
Objetivo:

Construir un modelo lineal a partir de datos de varias variables mediante el


lenguaje de programación Python.

Introducción:

Para realizar el análisis de datos de varias variables mediante la construcción de un


modelo lineal que permita identificar si dichas variables están relacionadas o no, para
ello utilizaremos los coeficientes como la correlación lineal de PEARSON.
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 3


Estudio de Casos

2. Informacion de los subtemas


2.1 Subtema 1: Planteamiento del caso
Utilizaremos un grupo de datos correspondiente a la recopilación de información sobre
las erupciones del géiser Old Faithful que se sitúa en el parque nacional Yellowstone de
los Estados Unidos de Norte América (López Briega, 2016).

Este grupo de datos tomará el nombre de “dataset faithful” y se encuentra en formato


csv. Para complementar el desarrollo del caso, utilizaremos la librería Panda de
Python.
El dataset solo contiene observaciones de dos variables; eruptions que contendrá
información sobre el tiempo de duración de la erupción del géiser; y waiting donde se
obtiene información sobre el tiempo que pasará para la siguiente erupción.
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 4


Estudio de Casos

2.2 Subtema 2: Aplicación de correlación de Pearson


Como primer punto visualizaremos la información contenida en el “dataset faithful”
como se muestra en la imagen 1.

Dividiremos la información en grupos, esto nos permitirá analizar el número de casos


que estarían dentro de cada grupo en los cuales se dividió inicialmente toda la
información. Cada grupo nos proporcionarán una visión de cómo está distribuida la
variable cuantitativa que se utilizará, esto será la base para graficar un histograma el
cual nos dará una primera visualización de los datos.

Para realizar el histograma utilizaremos el método hist del DataFrame de Pandas la


variable a visualizar será eruptions, como se visualiza en el código de la imagen 2.

Como se aprecia en el gráfico de la imagen 3 ya podemos emitir un primer análisis, en


el cual se evidencia que las erupciones del géiser rondan en cuatro minutos y medio.

Distribución de frecuencia
Para armar la distribución de frecuencia de la variable eruptions misma que ha sido
utilizada para elaborar el histograma, se realizar las siguiente manipulaciones con
Pandas, ver imagen 4.

Como visualizamos en la tabla de distribución de frecuencia de la imagen 5, se


evidencia que la duración de erupciones que más ocurre, se encuentran en el rango de
4 a 4.5 minutos.
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 5


Estudio de Casos

2.3 Subtema 3: Aplicación de posicionamiento geo


referencial
El diagrama de dispersión nos permitirá emparejar los datos de las dos variables
cuantitativas que hemos seleccionado para el análisis para posteriormente
representarlos como puntos geométricos en el diagrama o plano cartesiano.

Con el ejemplo planteado y los datos contenidos en el “dataset faithful”, vamos a


emparejar las dos variables con las cuales contamos variables eruptions y waiting, ver
imagen 6.

Como podemos observar en el gráfico de dispersión de los datos en la imagen 7 se


aprecia claramente la relación lineal entre los datos que se utilizaron del dataset.

Correlación

Partiendo de los datos hasta ahora analizados, se podrán realizar cualquier tipo de
cálculos como medidas de dispersión y tendencia central, en este caso se realizará la
correlación, considerando que esta oscila entre -1 y 1. Y se lo calcularemos utilizando
el método “corr” como se lo visualiza en la imagen 8.

Como podemos ver en la imagen 9 las dos variables analizadas guardan una
correlación alta, lo cual evidencia su relación.
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 6


Estudio de Casos

2.4 Subtema 4: Codificación de caso

Imagen 1.- Presentación de datos


Fuente: (López Briega, 2016)

Imagen 2.- Código para elaboración de histograma


© Universidad Estatal de Milagro – UNEMI

Fuente: (López Briega, 2016)

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 7


Estudio de Casos

Imagen 3.- Histograma


Fuente: (López Briega, 2016)
© Universidad Estatal de Milagro – UNEMI

Imagen 4.- Código para distribución de frecuencia


Fuente: (López Briega, 2016)

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 8


Estudio de Casos

Imagen 5.- Distribución de frecuencia


Fuente: (López Briega, 2016)

Imagen 6.- Código para diagrama de dispersión


Fuente: (López Briega, 2016)
© Universidad Estatal de Milagro – UNEMI

Imagen 7.- Diagrama de dispersión


Fuente: (López Briega, 2016)

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 9


Estudio de Casos

Imagen 8.- Código de correlación


Fuente: (López Briega, 2016)

Imagen 9.- Correlación del ejercicio


Fuente: (López Briega, 2016)
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 10


Estudio de Casos

3. Bibliografía

» López Briega, R. (2016). Análisis de datos cuantitativos con Python. Retrieved


April 9, 2020, from https://relopezbriega.github.io/blog/2016/03/13/analisis-
de-datos-cuantitativos-con-python/
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 11


ÍNDICE

1. Unidad 4: Árboles y Grafos .................................................................................3

Tema 2: Estudio de Casos.............................................................................................. 3

Objetivo: ........................................................................................................................ 3

2. Información de los subtemas .............................................................................4

2.1 Subtema 1: Planteamiento del caso .................................................................. 4

2.2 Subtema 2: Aplicación de correlación de Pearson ............................................. 4

2.3 Subtema 3: Aplicación de posicionamiento geo referencial caso ...................... 5

2.4 Subtema 4: Codificación de caso ....................................................................... 6

3. Bibliografía ........................................................................................................7

2
Estudio de Casos

1. Unidad 4: Árboles y Grafos


Tema 2: Estudio de Casos
Objetivo:

Construir un modelo lineal a partir de datos de varias variables mediante el lenguaje de


programación Python.
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 3


Estudio de Casos

2. Informacion de los subtemas


2.1 Subtema 1: Planteamiento del caso
Para la resolución del ejercicio se utilizará un dataset disponible en la librería sckit-
learn y es el correspondiente al de Boston Housing o las casas de Boston.

2.2 Subtema 2: Aplicación de correlación de Pearson


Como primer paso para la resolución del ejercicio se importarán las librerías numpy,
ver imagen 1.

Seguidamente importaremos los datos, para lo cual utilizaremos la instrucción


datasets punto load_boston(), ver imagen 2.

Se verificará la información que contiene el dataset, ver imagen 3

El dataset contiene la información que se describe a continuación:


1.- “data”,
2.- “target” hace referencia a las columnas con las etiquetas o respuestas,
3.- feature_names contiene las descripciones de las columnas del dataset, y por
ultimo tenemos.
4.- DESCR que contiene la descripción general (total) del dataset.

Veremos las etiquetas de cada columna de feature_names, ver la imagen 4.

Para el análisis que se desea realizar se considerará la columna que lleva por nombre
“RM” la cual tendrá como información del número de cuartos (habitaciones) que
posee la vivienda.
© Universidad Estatal de Milagro – UNEMI

Para este caso consideraremos el número de habitaciones, sin embargo también


podemos considerar utilizar otras columnas como los años de construcción que tiene
la casa u otra columna que se desee.

Para este ejercicio se debe considerar que los datos están almacenados como numpy,
y que al querer utilizarlos los deberemos tratar como tales, ver imagen 5.

También visualizaremos los datos contenidos en target, ver imagen 6.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 4


Estudio de Casos

2.3 Subtema 3: Aplicación de posicionamiento geo


referencial caso
Gráfica de dispersión de distribución de los datos.

Imagen 7.- Código para grafico de dispersión


Fuente: (Gonzalez, 2018)

Imagen 8.- Código para grafico de dispersión


Fuente: (Gonzalez, 2018)
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 5


Estudio de Casos

2.4 Subtema 4: Codificación de caso

Imagen 1.- Código de importación de librerías


Fuente: (Gonzalez, 2018)

Imagen 2.- Código de importación de datos


Fuente: (Gonzalez, 2018)

Imagen 3.- Código para verificación de información del dataset


Fuente: (Gonzalez, 2018)

Imagen 4.- Código verificación de información de las columnas


Fuente: (Gonzalez, 2018)
© Universidad Estatal de Milagro – UNEMI

Imagen 5.- Código selección de columna


Fuente: (Gonzalez, 2018)

Imagen 6.- Código visualización de etiquetas


Fuente: (Gonzalez, 2018)

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 6


Estudio de Casos

3. Bibliografía

» Gonzalez, L. (2018). Regresión lineal simple - Práctica con Python. Retrieved


April 11, 2020, from https://ligdigonzalez.com/algoritmo-regresion-lineal-
simple-machine-learning-practica-con-python/
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 7


ÍNDICE

1. Unidad 4: Árboles y Grafos .................................................................................3

Tema 2: Estudio de Casos.............................................................................................. 3

Objetivo: ........................................................................................................................ 3

2. Información de los subtemas .............................................................................4

2.1 Subtema 1: Planteamiento del caso .................................................................. 4

2.2 Subtema 2: Aplicación de correlación de Pearson ............................................. 4

2.3 Subtema 3: Aplicación de posicionamiento geo referencial caso ...................... 5

2.4 Subtema 4: Codificación de caso ....................................................................... 6

3. Bibliografía ........................................................................................................7

2
Estudio de Casos

1. Unidad 4: Árboles y Grafos


Tema 2: Estudio de Casos
Objetivo:

Construir un modelo lineal a partir de datos de varias variables mediante el lenguaje de


programación Python.
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 3


Estudio de Casos

2. Informacion de los subtemas


2.1 Subtema 1: Planteamiento del caso
Para la resolución del ejercicio se utilizará un dataset disponible en la librería sckit-
learn y es el correspondiente al de Boston Housing o las casas de Boston.

2.2 Subtema 2: Aplicación de correlación de Pearson


Como primer paso para la resolución del ejercicio se importarán las librerías numpy,
ver imagen 1.

Seguidamente importaremos los datos, para lo cual utilizaremos la instrucción


datasets punto load_boston(), ver imagen 2.

Se verificará la información que contiene el dataset, ver imagen 3

El dataset contiene la información que se describe a continuación:


1.- “data”,
2.- “target” hace referencia a las columnas con las etiquetas o respuestas,
3.- feature_names contiene las descripciones de las columnas del dataset, y por
ultimo tenemos.
4.- DESCR que contiene la descripción general (total) del dataset.

Veremos las etiquetas de cada columna de feature_names, ver la imagen 4.

Para el análisis que se desea realizar se considerará la columna que lleva por nombre
“RM” la cual tendrá como información del número de cuartos (habitaciones) que
posee la vivienda.
© Universidad Estatal de Milagro – UNEMI

Para este caso consideraremos el número de habitaciones, sin embargo también


podemos considerar utilizar otras columnas como los años de construcción que tiene
la casa u otra columna que se desee.

Para este ejercicio se debe considerar que los datos están almacenados como numpy,
y que al querer utilizarlos los deberemos tratar como tales, ver imagen 5.

También visualizaremos los datos contenidos en target, ver imagen 6.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 4


Estudio de Casos

2.3 Subtema 3: Aplicación de posicionamiento geo


referencial caso
Gráfica de dispersión de distribución de los datos.

Imagen 7.- Código para grafico de dispersión


Fuente: (Gonzalez, 2018)

Imagen 8.- Código para grafico de dispersión


Fuente: (Gonzalez, 2018)
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 5


Estudio de Casos

2.4 Subtema 4: Codificación de caso

Imagen 1.- Código de importación de librerías


Fuente: (Gonzalez, 2018)

Imagen 2.- Código de importación de datos


Fuente: (Gonzalez, 2018)

Imagen 3.- Código para verificación de información del dataset


Fuente: (Gonzalez, 2018)

Imagen 4.- Código verificación de información de las columnas


Fuente: (Gonzalez, 2018)
© Universidad Estatal de Milagro – UNEMI

Imagen 5.- Código selección de columna


Fuente: (Gonzalez, 2018)

Imagen 6.- Código visualización de etiquetas


Fuente: (Gonzalez, 2018)

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 6


Estudio de Casos

3. Bibliografía

» Gonzalez, L. (2018). Regresión lineal simple - Práctica con Python. Retrieved


April 11, 2020, from https://ligdigonzalez.com/algoritmo-regresion-lineal-
simple-machine-learning-practica-con-python/
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 7


ÍNDICE

1. Unidad 4: Pilas, colas y listas ..............................................................................3

Tema 1: Árboles y grafos .............................................................................................. 3

Objetivo: ........................................................................................................................ 3

Introducción: ................................................................................................................. 3

2. Información de los subtemas .............................................................................4

2.1 Subtema 1: Definiciones y conceptos ................................................................. 4

2.2 Subtema 2: Aplicación de POO........................................................................... 8

2.3 Subtema 3: Métodos de gestión ...................................................................... 10

2.4 Subtema 4: Ejercicios de aplicación ................................................................. 14

3. Bibliografía ......................................................................................................21

2
Árboles y grafos

1. Unidad 4: Pilas, colas y listas


Tema 1: Árboles y grafos
Objetivo:
Identificar y aplicar técnicas de programación para la gestión de árboles y grafos según
su tipo y aplicación.

Introducción:
Las estructuras de datos hasta ahora vistas han sido estructuras lineales (listas, pilas y
colas) estas se caracterizan entorno a que cada uno de los elementos tendrá
solamente un elemento anterior y posterior (Creutzburg, 2015). Mientras que en las
estructuras no lineales, los elementos podrán tener varios elementos anteriores y
posteriores cambiando claramente los conceptos hasta ahora vistos en las estructuras
lineales (Creutzburg, 2015).

Estas estructuras se clasifican en árboles y grafos o también llamadas estructuras


multi-enlazadas. Los términos comunes utilizados en los árboles y grafos serán nodos y
raíz (Guardati Buemo, 2007).
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 3


Árboles y grafos

2. Informacion de los subtemas


2.1 Subtema 1: Definiciones y conceptos
Árboles

Como se mencionó en líneas anteriores los árboles pertenecen a las estructuras no


lineales, sin embargo brindaran una homogeneidad en los datos que en ellos se
almacenen, estas estructuras podrán tener más de un elemento posterior, sin
embargo solo podrán tener un elemento que le anteceda. En términos generales, un
árbol es definido como una gran serie de nodos, en los cuales se guardará información
y por consiguiente también se almacenará la ubicación de los elementos sucesores
(Guardati Buemo, 2007).

Estas estructuras se usan para representar aquellos datos que tengan una relación de
jerarquía entre sus elementos, como por ejemplo un árbol genealógico de una
persona.

La estructura de un árbol implica una recursividad. Si un árbol no tiene nodos este se


define como un árbol nulo que no posee raíz (Joyanes Aguilar, 2003).

A continuación se describen las partes que conforman un árbol


Nodo hijo
Este nodo siempre tendrá un nodo antecesor o superior, el cual tomará el
nombre de padre.
Nodo padre
Será aquel nodo del cual se desprendan varios nodos llamados hijos, se debe
considerar que los nodos padre pueden tener antecesores.
Nodo hermano
Se dice que los nodos toman el nombre de hermano si se desprenden del
mismo nodo padre.
Raíz
© Universidad Estatal de Milagro – UNEMI

Esta será el nodo principal de todo árbol, por ende no tendrá nodos que le
antecedan.
Hoja o terminal
Estos nodos son denominados así debido a que no se desprenderán de ellos
ningún otro, también son considerados nodos hoja aquellos que se encuentran
al finales del árbol.
Interior
Toman este nombre aquellos nodos que no son raíz ni hoja.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 4


Árboles y grafos

Terminología y representación de árbol general

Como se mencionó en líneas anteriores los árboles se representarán tal cual como un
árbol genealógico familiar, además de utilizar la terminología detallada en líneas
anteriores: padre, hijo, hermano, entre otros. A continuación se presenta un gráfico de
un árbol (Joyanes Aguilar, 2003).

Imagen 1.- Representación de un árbol


Fuente: (Joyanes Aguilar, 2003)

Un árbol tiene una altura o profundidad la cual es definida por el número máximo de
nodos que tenga la rama. El peso de un árbol por lo contrario se representará por el
número de nodos terminales que este tenga (Joyanes Aguilar, 2003). Se conocerá
como bosque al conjunto de varios árboles.

Tipos de arboles

Árbol Binario
Se define como un conjunto finito cero o más nodos, y puede ser Puede ser
implementado con facilidad en cualquier computadora (Joyanes Aguilar, 2008). Se
debe considerar que cada nodo podrá tener de 0, 1 o 2 subárboles izquierdo y
© Universidad Estatal de Milagro – UNEMI

derecho.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 5


Árboles y grafos

Imagen 2.- Representación árbol binario


Fuente: (Joyanes Aguilar, 2008)

Cuando dos árboles binarios poseen la misma estructura, y son equivalentes se dice
que estos árboles son similares, pero también se debe considerar que ambos
contengan la misma información dentro de su estructura (Joyanes Aguilar, 2008).

Un árbol binario está equilibrado si las alturas de los dos subárboles de cada nodo del
árbol se diferencian en una unidad como máximo.
© Universidad Estatal de Milagro – UNEMI

Imagen 3.- Árboles binarios (a) similar (b) equivalentes


Fuente: (Joyanes Aguilar, 2008)

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 6


Árboles y grafos

Árboles binarios completos

Los árboles binarios son completos si los nodos tienen exactamente dos subárboles,
claro está que aquellos nodos que se encuentren en los niveles inferiores o más bajos
no tendrán. Si el árbol binario está completamente lleno completo, este árbol toma
ese nombre “árbol lleno”. Mientras que aquel árbol que solo tenga un subárbol
tomará el nombre de árbol degenerado.

Imagen 4.- Árbol binario lleno


Fuente: (Joyanes Aguilar, 2008)
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 7


Árboles y grafos

2.2 Subtema 2: Aplicación de POO


Conversión de un árbol general en árbol binario

Para la conversión de un árbol a un binario es necesario que se disponga de


mecanismos útiles para dicha conversión, ya que debido a su dinamismo y la no
linealidad de sus elementos son considerados muy importantes (Joyanes Aguilar,
2008).

Para realizar esta conversión es necesario se realicen los siguientes pasos que se
detallan a continuación:

1. Enlazar los nodos hijos de forma horizontal.


2. Enlazar los nodos padres con los nodos hijos de forma vertical, que tengan
proximidad hacia el lado izquierdo, el vínculo entre los hijos de la derecha debe
desaparecer.
3. Se deberá rotar el diagrama 45° grados hacia la izquierda, esto permitirá
obtener el respectivo árbol binario.

Recorrido a un árbol binario


Será el proceso mediante el cual se accederá a cada nodo del árbol pero solo una única
vez por cada uno. Dentro de un árbol binario existirán muchos nodos por los cuales se
tendrá que recorrer. Para realizar el recorrido del árbol binario se realizan tres
actividades mismas que a continuación mencionaremos:

1. Visita al nodo principal del árbol es decir a la raíz.


2. Se recorrerá el subárbol izquierdo y luego,
3. Se recorrerá el subárbol derecho.

Recorrido Preorden

Este recorrido pasará por la raíz para luego recorrer en preorden cada uno de los
nodos de los subárboles, este recorrido es recursivo.
© Universidad Estatal de Milagro – UNEMI

Recorrido Postorden

Este recorrido es contrario al proceso que se realiza en preorden, ya que iniciará


recorriendo los subárboles para llegar finalmente a la raíz del árbol, este recorrido es
recursivo.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 8


Árboles y grafos

Recorrido Inorden

Generalmente es aplicable en los arboles binarios, y consiste en recorrer el primer


subárbol para luego pasar por la raíz, esto se lo realiza por cada subárbol que exista,
este recorrido es recursivo.

Recorrido por niveles

Este recorrido es de menor a mayor nivel, de izquierda a derecha. Para realizar este
recorrido es necesario que se conozca la profundidad de los nodos, y así identificar
cual es el menor o mayor. A diferencia de los tres tipos de recorridos que preceden
este no es recursivo.

Métodos para almacenar arboles binarios

Para la construcción de los árboles binarios, se utilizan diferentes lenguajes de


programación, por ejemplo un lenguaje que tenga registros y referencias, los árboles
que se construyan teniendo su típica estructura conformada por nodos y punteros.
Esta estructura tendrá la función de almacenar los datos, pero es necesario que
consideremos que cada nodo del árbol guardará una referencia a un nodo izquierdo y
derecho los cuales se denominaran hijos. También se debe considerar que el árbol
podrá contener un único nodo.

Si el árbol binario es completo, este podrá se almacenado en una estructura de


vectores implícitamente, el realizar esta acción ayuda a un mejor aprovechamiento de
la memoria.
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 9


Árboles y grafos

2.3 Subtema 3: Métodos de gestión


Operaciones con árboles

Sobre los árboles binarios se puede aplicar varias operaciones, la búsqueda en especial
se basadas en la comparación de los elementos, para ello será necesario que realicen
subrutinas, misma que puede ser definida previamente en el lenguaje que se esté
usando, para luego compararles y establecer una relación de orden entre ellos.

Búsqueda

Mediante el proceso de búsqueda se accederá a la raíz del árbol, una vez hallado el
elemento objeto de la búsqueda el proceso llega a su fin, pero si el elemento es menor
se buscará en el subárbol izquierdo, pero si es mayor se buscará en el derecho
respectivamente. Si en el proceso se llega hasta el último nodo y no se ha encontrado
el elemento se entiende que no existe en el árbol. El proceso de búsqueda en los
arboles es mucho más eficiente de lo que normalmente se acostumbra.

Inserción

La operación de inserción es muy parecida a la búsqueda, para esta operación se


puede aplicar una solución iterativa o recursiva. Para realizar la búsqueda es necesario
que los parámetros estén correctamente definidos ejemplo si contamos como
parámetros se creará un árbol vacío y creará un nodo nuevo el cual contendrá el
elemento a insertar como único.

Borrado
La operación de borrado debe ser considerada como difícil, ya que se deben considerar
varios casos que se deben considerar:
1. Borrado de un nodo sin hijos o nodo hoja
Al borrar un nodo automáticamente se establecerá a nulo el apuntador de su
nodo padre.
2. Borrado de un nodo haciendo uso de un subárbol hijo
Al borrar el nodo el subárbol hijo será asignado como subárbol de su padre.
© Universidad Estatal de Milagro – UNEMI

3. Borrar un nodo con dos subárboles hijo


Al realizar este proceso de borrado se reemplazará el valor del nodo borrado
por el nodo predecesor o por lo contrario por su sucesor en “inorden” para
luego borrar este nodo.

Recorridos
Los recorridos a los árboles se pueden realizar en función de la profundidad o anchura
del árbol. A continuación se describen ambos recorridos:

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 10


Árboles y grafos

1. Los recorridos en anchura se realizarán sobre los niveles, e iniciará de manera


horizontal que parte de la raíz hacia los nodos hijos antes de llegar a los nodos
de alguno de los otros nodos hijos.

2. Los recorridos en profundidad están orientados a seguir el camino que va


desde la raíz hacia el nodo que más lejos se encuentre del primer nodo hijo y
luego continuará con el nodo hijo que le sigue. Para realizar estos recorridos de
profundidad podremos aplicar los siguientes tipos de recorridos inorden,
preorden y postorden.

Grafos
Es el conjunto de nodos o vértices, los vértices son el conjunto de líneas que se unirá a
un punto con otro, esta relación permite representar relaciones binarias entre los
elementos que conforman el conjunto.
Además permitirán estudiar las interrelaciones que existen entre las unidades que
interactuaran con otras. Además cualquier problema podrá ser representado por
medio de los grafos.

Terminología de grafos
Nodos
Un nodo será la unidad sobre la cual se construirá el árbol y podrá tener de cero o más
nodos hijos que se conectan a él.

Aristas
Son formadas de la unión de las líneas, estas aristas se definen también como caminos,
existen varios tipos de aristas, mismas que se mencionan a continuación.
Aristas Adyacentes
Serán aristas adyacentes aquella que coincidan en el mismo vértice formado de
la unión las líneas.
Aristas Paralelas
Serán vértices paralelas si el vértice inicial y el final son el mismo.
© Universidad Estatal de Milagro – UNEMI

Aristas Cíclicas
Las aristas cíclicas son aquellas que partirán desde un vértice para poder
acceder en el mismo.
Cruce
Es el cruce de dos aristas en un mismo punto.

Vértices
Serán los puntos o nodos que conforman al grafo. Los vértices tendrán grados y estos
serán identificados por el número de aristas de la cual es extremo, además existen
vértices pares e impares y esto dependerá de su grado.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 11


Árboles y grafos

Vértices Adyacentes
Si se tiene un par de vértices en el grafo y además se tiene una arista que los
une, se dice que dicho vértice es adyacentes.
Vértice Aislado
Este vértice será aquel que su grado sea cero (0).
Vértice Terminal
Este vértice será aquel que su grado sea uno (1).

Representación de grafos

Los grafos se podrán representar de mucha formas, estas permitirán identificar en


mayor o menor medida ciertas características que tenga los grafos. Las formas más
comunes de representación son:

1. Simbólicamente
2. Gráficamente
3. Numéricamente

Habiendo hablado en párrafos anteriores sobre las aristas, a continuación se


mencionan los dos tipos de grafos existentes según sus aristas

1. Dirigidos.
Se da cuando todas las aristas del grafo son dirigidas. Los grafos se representan
con un arco que es representado por un par ordenado de vértices, de tal forma
que representan dos arcos diferentes.
2. No dirigidos
En este tipo de grafos el par de vértices que representará un arco no estará
ordenado, por ello toma el nombre de grafos no dirigidos.

Representación numérica de grafos

La estructura de datos que se utilice dependerá de las características que posea el


© Universidad Estatal de Milagro – UNEMI

grafo y como complemento el algoritmo que ha sido usado para su manipulación. Las
estructuras más simple y comunes de usar en los grafos son las listas y las matrices,
aunque comúnmente se usan ambas mediante una combinación. Por lo general las
listas son las más usadas para los grafos dispersos ya que el uso de la memoria será
mucho más eficiente. Mientras que las matrices proveerán un acceso más rápido, pero
esto conlleva un consuma más elevado de memoria.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 12


Árboles y grafos

Estructura de lista
1. Lista de incidencia
Todas las aristas del grafo se representarán mediante un vector que tenga
pares ordenados, siempre que el grafo es de tipo dirigido. Cada uno de los
pares representará las aristas de dicho grafo.
2. Lista de adyacencia
Con una lista de vértices adyacentes al grafo, esto causará una redundancia
dentro de un grafo no dirigido, lo cual ayudará a que las búsquedas sean más
veloz.
3. Lista de grados
Se conocen como la secuencia de grados referenciado al tipo de grafo no
dirigido, esto corresponderá a una secuencia de números que hará referencia
a los grados que corresponde al vértice del grafo.

Estructuras matriciales
1. Matriz de adyacencia
Se representará mediante una matriz cuadrada (tendrá mismo número de filas
y de columnas), el número de filas y columnas hará referencia a los vértices del
grafo.
2. Matriz de incidencia
Se representará por una matriz que tiene aristas y vértices, en dichas aristas y
vértices se contendrá la información de la arista.

Recorridos de un Grafo
Recorrido en anchura

Recorrerá el grafo, considerando un nodo determinado, y los niveles, dicho de otra


manera, primero serán aquellos que se encuentren a una distancia de un arco hacia al
nodo de salida, para posteriormente por aquellos que estén a una distancia de dos
arcos, y así continuamente hasta que se alcancen todos los nodos.

Recorrido en profundidad
© Universidad Estatal de Milagro – UNEMI

Este recorrido buscará todos los posibles caminos o alternativas que partirán desde el
nodo de salida hasta que ya no pueda continuar y se finalice el proceso, retornando
para buscar varios caminos que sirvan como alternativa, y que quizás no fueron
considerados en primera instancia.

Aplicaciones de los grafos

Con la aplicación de grafos se puede dar solución a diversos problemas en todas las
áreas de Ingeniería, además de modelar trayectos como por ejemplo la ruta que sigue
una línea de autobús para cruzar toda la ciudad.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 13


Árboles y grafos

2.4 Subtema 4: Ejercicios de aplicación


Ejercicio 1

Realizaremos Como ejercicio se realizará una clase llamada árbol, esto para mostrar el
funcionamiento y estructura de un árbol binario (Fernandez, Gassman, & Tesone,

class Arbol(object):
def __init__(self):
self.der = None # Rama derecha del árbol
self.izq = None # Rama izquierda del árbol
self.dato = None # Dato del nodo del árbol

raiz = Arbol()
raiz.dato = 'Raiz'
raiz.izq = Arbol()
raiz.izq.dato = 'Izquierda'
raiz.der = Arbol()
raiz.der.dato = 'Derecha'
print(raiz.izq.dato)

2013).

De esta misma forma se puede ir aumentando el tamaño del árbol y agregándole más
información:

class Arbol(object):
def __init__(self):
self.der = None
self.izq = None
self.dato = None

raiz = Arbol()
raiz.dato = 'Raiz'
© Universidad Estatal de Milagro – UNEMI

raiz.izq = Arbol()
raiz.izq.dato = 'Izquierda'
raiz.der = Arbol()
raiz.der.dato = 'Derecha'
raiz.izq.izq = Arbol()
raiz.izq.izq.dato = 'Izquierda 2'
raiz.izq.der = Arbol()
raiz.izq.der.dato = 'Izquierda - Derecha'

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 14


Árboles y grafos

Ejercicio 2

Se representará un árbol gráficamente para luego describirlo paso a paso mediante


código fuente.

Raíz

Abuela - María Romero

Rosa Rita Reina


Pilco Pilco Pilco

Sam
Pilco

Luis Luz Lis


Clar Clar Clar
Considerando la definición de la recursividad de un árbol, definiremos a un árbol como
la unión de un elemento y sus ramas.

A continuación veremos una de las formas para agregar elementos en el árbol


© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 15


Árboles y grafos

Para esto es necesario que utilicemos un método el cual tomará el nombre


“agregarElemento” este método lo recibirá el árbol, el elemento a agregar, y el padre
de dicho elemento. El método que se está usando obtendrá el sub-árbol que
contendrá al elemento padre y por ende le permitirá agregar una nueva rama con el
elemento nuevo.

La búsqueda que se realiza del sub-árbol debe ser recursiva, y se debe considerar que
la condición de búsqueda se basará en encontrar si el elemento está en el árbol actual,
caso contrario se comenzará la búsqueda en cada uno de los hijos que tenga ese árbol.

Profundidad y grado del árbol

Ya habiendo conocido los conceptos sobre profundidad y grado de un árbol, en el


siguiente gráfico se muestra el proceso de cada uno de los términos antes
mencionados.
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 16


Árboles y grafos

Recorridos

Profundidad Primero

Se explorará rama por rama considerando cada uno de sus nodos hijos, se muestra un
diagrama donde se aprecia el orden de recorrido sobre el árbol:

A continuación se muestra un ejemplo de una función de orden superior que se


ejecuta sobre cada elemento del árbol, para ello utilizaremos el método visto
anteriormente “buscarSubArbol” y así encontrar el elemento.

Posteriormente utilizarnos una función que imprimirá el elemento:


© Universidad Estatal de Milagro – UNEMI

Podemos ver el siguiente resultado:

1. María Romero
2. Rosa Pilco
3. Rita Pilco
4. Sam Pilco

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 17


Árboles y grafos

5. Reina Pilco
6. Luis Clar
7. Luz Clar
8. Lis Clar

Ancho Primero

Como se visualiza en el ejemplo con este método se recorrerá generación a


generación: se iniciará con la raíz del árbol (abuela), para luego continuar con sus
ramas (hijas). En la gráfica se muestra un diagrama a modo de esquema:

La ejecución de la función de recorrido del árbol será sobre cada uno de los hijos hasta
que se llegue al último nivel de cada uno de ellos. Cuando se visite uno de los nodos, se
ejecutará la función, y agrega sus hijos a la cola, para posteriormente llamar a la
función recursiva que se ejecutará sobre el próximo elemento de la cola.
© Universidad Estatal de Milagro – UNEMI

Se usa de la siguiente manera:

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 18


Árboles y grafos

A continuación se podrá visualizar paso a paso el proceso.


Elemento: María
Consola Cola
María Romero Rosa Pilco
Rita Pilco
Reina Pilco

Invocación: 2
Elemento: Rosa
No tiene hijos, por lo tanto no agrega elementos a la cola
Consola Cola
María Romero Rita Pilco
Rosa Pilco Reina Pilco

Invocación: 3
Elemento: Rita
Agrega a Sam a la cola

Consola Cola
María Romero Reina Pilco
Rosa Pilco Sam Pilco
Rita Pilco

Invocación: 4
Elemento: Reina
Agrega a Luis, Luz y Lis

Consola Cola
© Universidad Estatal de Milagro – UNEMI

María Romero Sam Pilco


Rosa Pilco Luis Clar
Rita Pilco Luz Clar
Reina Pilco Lis Clar

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 19


Árboles y grafos

Invocación: 5
Elemento: Sam
Consola Cola
María Romero Luis Clar
Rosa Pilco Luz Clar
Rita Pilco Lis Clar
Reina Pilco
Sam Pilco

Invocación: 6
Elemento: Luis
Consola Cola
María Romero Luz Clar
Rosa Pilco Lis Clar
Rita Pilco
Reina Pilco
Sam Pilco
Luis Clar

Invocación: 7
Elemento: Luz
Consola Cola
María Romero Lis Clar
Rosa Pilco
Rita Pilco
Reina Pilco
Sam Pilco
Luis Clar
Luz Clar
Invocación: 8
Elemento: Lis
Consola Cola
© Universidad Estatal de Milagro – UNEMI

María Romero
Rosa Pilco
Rita Pilco
Reina Pilco
Sam Pilco
Luis Clar
Luz Clar
Lis Clar

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 20


Árboles y grafos

3. Bibliografía

» Creutzburg, R. (2015). Árboles y Gráficas Algoritmos y Estructura de Datos. In


ResearchGate (p. 111). Retrieved from
https://www.researchgate.net/publication/277814853_Algoritmos_y_Estructura_
de_Datos_Parte_7_Arboles_y_Graficas
» Fernandez, J., Gassman, L., & Tesone, P. (2013). Arboles. Retrieved March 24,
2020, from https://sites.google.com/site/programacioniiuno/temario/unidad-5---
grafos/rboles?tmpl=%2Fsystem%2Fapp%2Ftemplates%2Fprint%2F&showPrintDial
og=1
» Guardati Buemo, S. (2007). Estructura de Datos Orientada a Objetos. Algoritmos
con C++. Retrieved from
https://www.academia.edu/6122916/Estructura_De_Datos_Oientada_A_Objetos
» Joyanes Aguilar, L. (2003). Fundamentos de programación: Libro de problemas.
Algoritmos, estructuras de datos y objetos (2a. ed.). (C. Fernández Madrid, Ed.)
(Segunda ed). Retrieved from www.fullengineeringbook.net
» Joyanes Aguilar, L. (2008). Fundamentos de Programación. (J. L. G. y C. Sánnchez,
Ed.) (Cuarta). España: Mc Graww Hill. Retrieved from https://combomix.net/wp-
content/uploads/2017/03/Fundamentos-de-programación-4ta-Edición-Luis-
Joyanes-Aguilar-2.pdf
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 21


ÍNDICE

1. Unidad 4: Pilas, colas y listas ..............................................................................3

Tema 1: Árboles y grafos .............................................................................................. 3

Objetivo: ........................................................................................................................ 3

Introducción: ................................................................................................................. 3

2. Información de los subtemas .............................................................................4

2.1 Subtema 1: Definiciones y conceptos ................................................................. 4

2.2 Subtema 2: Aplicación de POO........................................................................... 8

2.3 Subtema 3: Métodos de gestión ...................................................................... 10

2.4 Subtema 4: Ejercicios de aplicación ................................................................. 14

3. Bibliografía ......................................................................................................21

2
Árboles y grafos

1. Unidad 4: Pilas, colas y listas


Tema 1: Árboles y grafos
Objetivo:
Identificar y aplicar técnicas de programación para la gestión de árboles y grafos según
su tipo y aplicación.

Introducción:
Las estructuras de datos hasta ahora vistas han sido estructuras lineales (listas, pilas y
colas) estas se caracterizan entorno a que cada uno de los elementos tendrá
solamente un elemento anterior y posterior (Creutzburg, 2015). Mientras que en las
estructuras no lineales, los elementos podrán tener varios elementos anteriores y
posteriores cambiando claramente los conceptos hasta ahora vistos en las estructuras
lineales (Creutzburg, 2015).

Estas estructuras se clasifican en árboles y grafos o también llamadas estructuras


multi-enlazadas. Los términos comunes utilizados en los árboles y grafos serán nodos y
raíz (Guardati Buemo, 2007).
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 3


Árboles y grafos

2. Informacion de los subtemas


2.1 Subtema 1: Definiciones y conceptos
Árboles

Como se mencionó en líneas anteriores los árboles pertenecen a las estructuras no


lineales, sin embargo brindaran una homogeneidad en los datos que en ellos se
almacenen, estas estructuras podrán tener más de un elemento posterior, sin
embargo solo podrán tener un elemento que le anteceda. En términos generales, un
árbol es definido como una gran serie de nodos, en los cuales se guardará información
y por consiguiente también se almacenará la ubicación de los elementos sucesores
(Guardati Buemo, 2007).

Estas estructuras se usan para representar aquellos datos que tengan una relación de
jerarquía entre sus elementos, como por ejemplo un árbol genealógico de una
persona.

La estructura de un árbol implica una recursividad. Si un árbol no tiene nodos este se


define como un árbol nulo que no posee raíz (Joyanes Aguilar, 2003).

A continuación se describen las partes que conforman un árbol


Nodo hijo
Este nodo siempre tendrá un nodo antecesor o superior, el cual tomará el
nombre de padre.
Nodo padre
Será aquel nodo del cual se desprendan varios nodos llamados hijos, se debe
considerar que los nodos padre pueden tener antecesores.
Nodo hermano
Se dice que los nodos toman el nombre de hermano si se desprenden del
mismo nodo padre.
Raíz
© Universidad Estatal de Milagro – UNEMI

Esta será el nodo principal de todo árbol, por ende no tendrá nodos que le
antecedan.
Hoja o terminal
Estos nodos son denominados así debido a que no se desprenderán de ellos
ningún otro, también son considerados nodos hoja aquellos que se encuentran
al finales del árbol.
Interior
Toman este nombre aquellos nodos que no son raíz ni hoja.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 4


Árboles y grafos

Terminología y representación de árbol general

Como se mencionó en líneas anteriores los árboles se representarán tal cual como un
árbol genealógico familiar, además de utilizar la terminología detallada en líneas
anteriores: padre, hijo, hermano, entre otros. A continuación se presenta un gráfico de
un árbol (Joyanes Aguilar, 2003).

Imagen 1.- Representación de un árbol


Fuente: (Joyanes Aguilar, 2003)

Un árbol tiene una altura o profundidad la cual es definida por el número máximo de
nodos que tenga la rama. El peso de un árbol por lo contrario se representará por el
número de nodos terminales que este tenga (Joyanes Aguilar, 2003). Se conocerá
como bosque al conjunto de varios árboles.

Tipos de arboles

Árbol Binario
Se define como un conjunto finito cero o más nodos, y puede ser Puede ser
implementado con facilidad en cualquier computadora (Joyanes Aguilar, 2008). Se
debe considerar que cada nodo podrá tener de 0, 1 o 2 subárboles izquierdo y
© Universidad Estatal de Milagro – UNEMI

derecho.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 5


Árboles y grafos

Imagen 2.- Representación árbol binario


Fuente: (Joyanes Aguilar, 2008)

Cuando dos árboles binarios poseen la misma estructura, y son equivalentes se dice
que estos árboles son similares, pero también se debe considerar que ambos
contengan la misma información dentro de su estructura (Joyanes Aguilar, 2008).

Un árbol binario está equilibrado si las alturas de los dos subárboles de cada nodo del
árbol se diferencian en una unidad como máximo.
© Universidad Estatal de Milagro – UNEMI

Imagen 3.- Árboles binarios (a) similar (b) equivalentes


Fuente: (Joyanes Aguilar, 2008)

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 6


Árboles y grafos

Árboles binarios completos

Los árboles binarios son completos si los nodos tienen exactamente dos subárboles,
claro está que aquellos nodos que se encuentren en los niveles inferiores o más bajos
no tendrán. Si el árbol binario está completamente lleno completo, este árbol toma
ese nombre “árbol lleno”. Mientras que aquel árbol que solo tenga un subárbol
tomará el nombre de árbol degenerado.

Imagen 4.- Árbol binario lleno


Fuente: (Joyanes Aguilar, 2008)
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 7


Árboles y grafos

2.2 Subtema 2: Aplicación de POO


Conversión de un árbol general en árbol binario

Para la conversión de un árbol a un binario es necesario que se disponga de


mecanismos útiles para dicha conversión, ya que debido a su dinamismo y la no
linealidad de sus elementos son considerados muy importantes (Joyanes Aguilar,
2008).

Para realizar esta conversión es necesario se realicen los siguientes pasos que se
detallan a continuación:

1. Enlazar los nodos hijos de forma horizontal.


2. Enlazar los nodos padres con los nodos hijos de forma vertical, que tengan
proximidad hacia el lado izquierdo, el vínculo entre los hijos de la derecha debe
desaparecer.
3. Se deberá rotar el diagrama 45° grados hacia la izquierda, esto permitirá
obtener el respectivo árbol binario.

Recorrido a un árbol binario


Será el proceso mediante el cual se accederá a cada nodo del árbol pero solo una única
vez por cada uno. Dentro de un árbol binario existirán muchos nodos por los cuales se
tendrá que recorrer. Para realizar el recorrido del árbol binario se realizan tres
actividades mismas que a continuación mencionaremos:

1. Visita al nodo principal del árbol es decir a la raíz.


2. Se recorrerá el subárbol izquierdo y luego,
3. Se recorrerá el subárbol derecho.

Recorrido Preorden

Este recorrido pasará por la raíz para luego recorrer en preorden cada uno de los
nodos de los subárboles, este recorrido es recursivo.
© Universidad Estatal de Milagro – UNEMI

Recorrido Postorden

Este recorrido es contrario al proceso que se realiza en preorden, ya que iniciará


recorriendo los subárboles para llegar finalmente a la raíz del árbol, este recorrido es
recursivo.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 8


Árboles y grafos

Recorrido Inorden

Generalmente es aplicable en los arboles binarios, y consiste en recorrer el primer


subárbol para luego pasar por la raíz, esto se lo realiza por cada subárbol que exista,
este recorrido es recursivo.

Recorrido por niveles

Este recorrido es de menor a mayor nivel, de izquierda a derecha. Para realizar este
recorrido es necesario que se conozca la profundidad de los nodos, y así identificar
cual es el menor o mayor. A diferencia de los tres tipos de recorridos que preceden
este no es recursivo.

Métodos para almacenar arboles binarios

Para la construcción de los árboles binarios, se utilizan diferentes lenguajes de


programación, por ejemplo un lenguaje que tenga registros y referencias, los árboles
que se construyan teniendo su típica estructura conformada por nodos y punteros.
Esta estructura tendrá la función de almacenar los datos, pero es necesario que
consideremos que cada nodo del árbol guardará una referencia a un nodo izquierdo y
derecho los cuales se denominaran hijos. También se debe considerar que el árbol
podrá contener un único nodo.

Si el árbol binario es completo, este podrá se almacenado en una estructura de


vectores implícitamente, el realizar esta acción ayuda a un mejor aprovechamiento de
la memoria.
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 9


Árboles y grafos

2.3 Subtema 3: Métodos de gestión


Operaciones con árboles

Sobre los árboles binarios se puede aplicar varias operaciones, la búsqueda en especial
se basadas en la comparación de los elementos, para ello será necesario que realicen
subrutinas, misma que puede ser definida previamente en el lenguaje que se esté
usando, para luego compararles y establecer una relación de orden entre ellos.

Búsqueda

Mediante el proceso de búsqueda se accederá a la raíz del árbol, una vez hallado el
elemento objeto de la búsqueda el proceso llega a su fin, pero si el elemento es menor
se buscará en el subárbol izquierdo, pero si es mayor se buscará en el derecho
respectivamente. Si en el proceso se llega hasta el último nodo y no se ha encontrado
el elemento se entiende que no existe en el árbol. El proceso de búsqueda en los
arboles es mucho más eficiente de lo que normalmente se acostumbra.

Inserción

La operación de inserción es muy parecida a la búsqueda, para esta operación se


puede aplicar una solución iterativa o recursiva. Para realizar la búsqueda es necesario
que los parámetros estén correctamente definidos ejemplo si contamos como
parámetros se creará un árbol vacío y creará un nodo nuevo el cual contendrá el
elemento a insertar como único.

Borrado
La operación de borrado debe ser considerada como difícil, ya que se deben considerar
varios casos que se deben considerar:
1. Borrado de un nodo sin hijos o nodo hoja
Al borrar un nodo automáticamente se establecerá a nulo el apuntador de su
nodo padre.
2. Borrado de un nodo haciendo uso de un subárbol hijo
Al borrar el nodo el subárbol hijo será asignado como subárbol de su padre.
© Universidad Estatal de Milagro – UNEMI

3. Borrar un nodo con dos subárboles hijo


Al realizar este proceso de borrado se reemplazará el valor del nodo borrado
por el nodo predecesor o por lo contrario por su sucesor en “inorden” para
luego borrar este nodo.

Recorridos
Los recorridos a los árboles se pueden realizar en función de la profundidad o anchura
del árbol. A continuación se describen ambos recorridos:

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 10


Árboles y grafos

1. Los recorridos en anchura se realizarán sobre los niveles, e iniciará de manera


horizontal que parte de la raíz hacia los nodos hijos antes de llegar a los nodos
de alguno de los otros nodos hijos.

2. Los recorridos en profundidad están orientados a seguir el camino que va


desde la raíz hacia el nodo que más lejos se encuentre del primer nodo hijo y
luego continuará con el nodo hijo que le sigue. Para realizar estos recorridos de
profundidad podremos aplicar los siguientes tipos de recorridos inorden,
preorden y postorden.

Grafos
Es el conjunto de nodos o vértices, los vértices son el conjunto de líneas que se unirá a
un punto con otro, esta relación permite representar relaciones binarias entre los
elementos que conforman el conjunto.
Además permitirán estudiar las interrelaciones que existen entre las unidades que
interactuaran con otras. Además cualquier problema podrá ser representado por
medio de los grafos.

Terminología de grafos
Nodos
Un nodo será la unidad sobre la cual se construirá el árbol y podrá tener de cero o más
nodos hijos que se conectan a él.

Aristas
Son formadas de la unión de las líneas, estas aristas se definen también como caminos,
existen varios tipos de aristas, mismas que se mencionan a continuación.
Aristas Adyacentes
Serán aristas adyacentes aquella que coincidan en el mismo vértice formado de
la unión las líneas.
Aristas Paralelas
Serán vértices paralelas si el vértice inicial y el final son el mismo.
© Universidad Estatal de Milagro – UNEMI

Aristas Cíclicas
Las aristas cíclicas son aquellas que partirán desde un vértice para poder
acceder en el mismo.
Cruce
Es el cruce de dos aristas en un mismo punto.

Vértices
Serán los puntos o nodos que conforman al grafo. Los vértices tendrán grados y estos
serán identificados por el número de aristas de la cual es extremo, además existen
vértices pares e impares y esto dependerá de su grado.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 11


Árboles y grafos

Vértices Adyacentes
Si se tiene un par de vértices en el grafo y además se tiene una arista que los
une, se dice que dicho vértice es adyacentes.
Vértice Aislado
Este vértice será aquel que su grado sea cero (0).
Vértice Terminal
Este vértice será aquel que su grado sea uno (1).

Representación de grafos

Los grafos se podrán representar de mucha formas, estas permitirán identificar en


mayor o menor medida ciertas características que tenga los grafos. Las formas más
comunes de representación son:

1. Simbólicamente
2. Gráficamente
3. Numéricamente

Habiendo hablado en párrafos anteriores sobre las aristas, a continuación se


mencionan los dos tipos de grafos existentes según sus aristas

1. Dirigidos.
Se da cuando todas las aristas del grafo son dirigidas. Los grafos se representan
con un arco que es representado por un par ordenado de vértices, de tal forma
que representan dos arcos diferentes.
2. No dirigidos
En este tipo de grafos el par de vértices que representará un arco no estará
ordenado, por ello toma el nombre de grafos no dirigidos.

Representación numérica de grafos

La estructura de datos que se utilice dependerá de las características que posea el


© Universidad Estatal de Milagro – UNEMI

grafo y como complemento el algoritmo que ha sido usado para su manipulación. Las
estructuras más simple y comunes de usar en los grafos son las listas y las matrices,
aunque comúnmente se usan ambas mediante una combinación. Por lo general las
listas son las más usadas para los grafos dispersos ya que el uso de la memoria será
mucho más eficiente. Mientras que las matrices proveerán un acceso más rápido, pero
esto conlleva un consuma más elevado de memoria.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 12


Árboles y grafos

Estructura de lista
1. Lista de incidencia
Todas las aristas del grafo se representarán mediante un vector que tenga
pares ordenados, siempre que el grafo es de tipo dirigido. Cada uno de los
pares representará las aristas de dicho grafo.
2. Lista de adyacencia
Con una lista de vértices adyacentes al grafo, esto causará una redundancia
dentro de un grafo no dirigido, lo cual ayudará a que las búsquedas sean más
veloz.
3. Lista de grados
Se conocen como la secuencia de grados referenciado al tipo de grafo no
dirigido, esto corresponderá a una secuencia de números que hará referencia
a los grados que corresponde al vértice del grafo.

Estructuras matriciales
1. Matriz de adyacencia
Se representará mediante una matriz cuadrada (tendrá mismo número de filas
y de columnas), el número de filas y columnas hará referencia a los vértices del
grafo.
2. Matriz de incidencia
Se representará por una matriz que tiene aristas y vértices, en dichas aristas y
vértices se contendrá la información de la arista.

Recorridos de un Grafo
Recorrido en anchura

Recorrerá el grafo, considerando un nodo determinado, y los niveles, dicho de otra


manera, primero serán aquellos que se encuentren a una distancia de un arco hacia al
nodo de salida, para posteriormente por aquellos que estén a una distancia de dos
arcos, y así continuamente hasta que se alcancen todos los nodos.

Recorrido en profundidad
© Universidad Estatal de Milagro – UNEMI

Este recorrido buscará todos los posibles caminos o alternativas que partirán desde el
nodo de salida hasta que ya no pueda continuar y se finalice el proceso, retornando
para buscar varios caminos que sirvan como alternativa, y que quizás no fueron
considerados en primera instancia.

Aplicaciones de los grafos

Con la aplicación de grafos se puede dar solución a diversos problemas en todas las
áreas de Ingeniería, además de modelar trayectos como por ejemplo la ruta que sigue
una línea de autobús para cruzar toda la ciudad.

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 13


Árboles y grafos

2.4 Subtema 4: Ejercicios de aplicación


Ejercicio 1

Realizaremos Como ejercicio se realizará una clase llamada árbol, esto para mostrar el
funcionamiento y estructura de un árbol binario (Fernandez, Gassman, & Tesone,

class Arbol(object):
def __init__(self):
self.der = None # Rama derecha del árbol
self.izq = None # Rama izquierda del árbol
self.dato = None # Dato del nodo del árbol

raiz = Arbol()
raiz.dato = 'Raiz'
raiz.izq = Arbol()
raiz.izq.dato = 'Izquierda'
raiz.der = Arbol()
raiz.der.dato = 'Derecha'
print(raiz.izq.dato)

2013).

De esta misma forma se puede ir aumentando el tamaño del árbol y agregándole más
información:

class Arbol(object):
def __init__(self):
self.der = None
self.izq = None
self.dato = None

raiz = Arbol()
raiz.dato = 'Raiz'
© Universidad Estatal de Milagro – UNEMI

raiz.izq = Arbol()
raiz.izq.dato = 'Izquierda'
raiz.der = Arbol()
raiz.der.dato = 'Derecha'
raiz.izq.izq = Arbol()
raiz.izq.izq.dato = 'Izquierda 2'
raiz.izq.der = Arbol()
raiz.izq.der.dato = 'Izquierda - Derecha'

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 14


Árboles y grafos

Ejercicio 2

Se representará un árbol gráficamente para luego describirlo paso a paso mediante


código fuente.

Raíz

Abuela - María Romero

Rosa Rita Reina


Pilco Pilco Pilco

Sam
Pilco

Luis Luz Lis


Clar Clar Clar
Considerando la definición de la recursividad de un árbol, definiremos a un árbol como
la unión de un elemento y sus ramas.

A continuación veremos una de las formas para agregar elementos en el árbol


© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 15


Árboles y grafos

Para esto es necesario que utilicemos un método el cual tomará el nombre


“agregarElemento” este método lo recibirá el árbol, el elemento a agregar, y el padre
de dicho elemento. El método que se está usando obtendrá el sub-árbol que
contendrá al elemento padre y por ende le permitirá agregar una nueva rama con el
elemento nuevo.

La búsqueda que se realiza del sub-árbol debe ser recursiva, y se debe considerar que
la condición de búsqueda se basará en encontrar si el elemento está en el árbol actual,
caso contrario se comenzará la búsqueda en cada uno de los hijos que tenga ese árbol.

Profundidad y grado del árbol

Ya habiendo conocido los conceptos sobre profundidad y grado de un árbol, en el


siguiente gráfico se muestra el proceso de cada uno de los términos antes
mencionados.
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 16


Árboles y grafos

Recorridos

Profundidad Primero

Se explorará rama por rama considerando cada uno de sus nodos hijos, se muestra un
diagrama donde se aprecia el orden de recorrido sobre el árbol:

A continuación se muestra un ejemplo de una función de orden superior que se


ejecuta sobre cada elemento del árbol, para ello utilizaremos el método visto
anteriormente “buscarSubArbol” y así encontrar el elemento.

Posteriormente utilizarnos una función que imprimirá el elemento:


© Universidad Estatal de Milagro – UNEMI

Podemos ver el siguiente resultado:

1. María Romero
2. Rosa Pilco
3. Rita Pilco
4. Sam Pilco

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 17


Árboles y grafos

5. Reina Pilco
6. Luis Clar
7. Luz Clar
8. Lis Clar

Ancho Primero

Como se visualiza en el ejemplo con este método se recorrerá generación a


generación: se iniciará con la raíz del árbol (abuela), para luego continuar con sus
ramas (hijas). En la gráfica se muestra un diagrama a modo de esquema:

La ejecución de la función de recorrido del árbol será sobre cada uno de los hijos hasta
que se llegue al último nivel de cada uno de ellos. Cuando se visite uno de los nodos, se
ejecutará la función, y agrega sus hijos a la cola, para posteriormente llamar a la
función recursiva que se ejecutará sobre el próximo elemento de la cola.
© Universidad Estatal de Milagro – UNEMI

Se usa de la siguiente manera:

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 18


Árboles y grafos

A continuación se podrá visualizar paso a paso el proceso.


Elemento: María
Consola Cola
María Romero Rosa Pilco
Rita Pilco
Reina Pilco

Invocación: 2
Elemento: Rosa
No tiene hijos, por lo tanto no agrega elementos a la cola
Consola Cola
María Romero Rita Pilco
Rosa Pilco Reina Pilco

Invocación: 3
Elemento: Rita
Agrega a Sam a la cola

Consola Cola
María Romero Reina Pilco
Rosa Pilco Sam Pilco
Rita Pilco

Invocación: 4
Elemento: Reina
Agrega a Luis, Luz y Lis

Consola Cola
© Universidad Estatal de Milagro – UNEMI

María Romero Sam Pilco


Rosa Pilco Luis Clar
Rita Pilco Luz Clar
Reina Pilco Lis Clar

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 19


Árboles y grafos

Invocación: 5
Elemento: Sam
Consola Cola
María Romero Luis Clar
Rosa Pilco Luz Clar
Rita Pilco Lis Clar
Reina Pilco
Sam Pilco

Invocación: 6
Elemento: Luis
Consola Cola
María Romero Luz Clar
Rosa Pilco Lis Clar
Rita Pilco
Reina Pilco
Sam Pilco
Luis Clar

Invocación: 7
Elemento: Luz
Consola Cola
María Romero Lis Clar
Rosa Pilco
Rita Pilco
Reina Pilco
Sam Pilco
Luis Clar
Luz Clar
Invocación: 8
Elemento: Lis
Consola Cola
© Universidad Estatal de Milagro – UNEMI

María Romero
Rosa Pilco
Rita Pilco
Reina Pilco
Sam Pilco
Luis Clar
Luz Clar
Lis Clar

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 20


Árboles y grafos

3. Bibliografía

» Creutzburg, R. (2015). Árboles y Gráficas Algoritmos y Estructura de Datos. In


ResearchGate (p. 111). Retrieved from
https://www.researchgate.net/publication/277814853_Algoritmos_y_Estructura_
de_Datos_Parte_7_Arboles_y_Graficas
» Fernandez, J., Gassman, L., & Tesone, P. (2013). Arboles. Retrieved March 24,
2020, from https://sites.google.com/site/programacioniiuno/temario/unidad-5---
grafos/rboles?tmpl=%2Fsystem%2Fapp%2Ftemplates%2Fprint%2F&showPrintDial
og=1
» Guardati Buemo, S. (2007). Estructura de Datos Orientada a Objetos. Algoritmos
con C++. Retrieved from
https://www.academia.edu/6122916/Estructura_De_Datos_Oientada_A_Objetos
» Joyanes Aguilar, L. (2003). Fundamentos de programación: Libro de problemas.
Algoritmos, estructuras de datos y objetos (2a. ed.). (C. Fernández Madrid, Ed.)
(Segunda ed). Retrieved from www.fullengineeringbook.net
» Joyanes Aguilar, L. (2008). Fundamentos de Programación. (J. L. G. y C. Sánnchez,
Ed.) (Cuarta). España: Mc Graww Hill. Retrieved from https://combomix.net/wp-
content/uploads/2017/03/Fundamentos-de-programación-4ta-Edición-Luis-
Joyanes-Aguilar-2.pdf
© Universidad Estatal de Milagro – UNEMI

FORMATO CONTROLADO: FR0018/ v1.0 / 18-11-2019 21

También podría gustarte