Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Objetivo: ........................................................................................................................ 3
Introducción: ................................................................................................................. 3
3. Bibliografía ......................................................................................................14
2
Listas, 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).
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.
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
Ejemplos de listas
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
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
act
nelem = n
Implementación encadenada
Pilas
También conocida como stack, es un tipo especial de lista lineal, donde las operaciones
© Universidad Estatal de Milagro – UNEMI
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
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).
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.
A 1 3 4 6 8 11
C
1 4 11
B
1 3 4 6 8 11
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
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).
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.
Llamadas a subprogramas
Colas
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
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).
Ejercicio 2
3. Bibliografía
Objetivo: ........................................................................................................................ 3
Introducción: ................................................................................................................. 3
3. Bibliografía ......................................................................................................11
2
Estudio de Casos
Introducción:
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.
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
3. Bibliografía
Objetivo: ........................................................................................................................ 3
3. Bibliografía ........................................................................................................7
2
Estudio de Casos
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 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.
3. Bibliografía
Objetivo: ........................................................................................................................ 3
3. Bibliografía ........................................................................................................7
2
Estudio de Casos
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 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.
3. Bibliografía
Objetivo: ........................................................................................................................ 3
Introducción: ................................................................................................................. 3
3. Bibliografía ......................................................................................................21
2
Árboles y grafos
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 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.
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.
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).
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.
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
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.
Para realizar esta conversión es necesario se realicen los siguientes pasos que se
detallan a continuación:
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
Recorrido Inorden
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.
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
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
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:
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.
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
1. Simbólicamente
2. Gráficamente
3. Numéricamente
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.
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.
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
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.
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.
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'
Ejercicio 2
Raíz
Sam
Pilco
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.
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:
1. María Romero
2. Rosa Pilco
3. Rita Pilco
4. Sam Pilco
5. Reina Pilco
6. Luis Clar
7. Luz Clar
8. Lis Clar
Ancho Primero
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
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
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
3. Bibliografía
Objetivo: ........................................................................................................................ 3
Introducción: ................................................................................................................. 3
3. Bibliografía ......................................................................................................21
2
Árboles y grafos
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 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.
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.
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).
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.
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
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.
Para realizar esta conversión es necesario se realicen los siguientes pasos que se
detallan a continuación:
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
Recorrido Inorden
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.
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
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
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:
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.
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
1. Simbólicamente
2. Gráficamente
3. Numéricamente
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.
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.
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
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.
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.
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'
Ejercicio 2
Raíz
Sam
Pilco
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.
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:
1. María Romero
2. Rosa Pilco
3. Rita Pilco
4. Sam Pilco
5. Reina Pilco
6. Luis Clar
7. Luz Clar
8. Lis Clar
Ancho Primero
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
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
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
3. Bibliografía