Está en la página 1de 56

ESTRUCTURA

DE DATOS
GRUPO 03
Se les llama estructuras dinámicas, porque las mismas
pueden cambiar tanto de forma como de tamaño
durante la ejecución del programa. Y estructuras no
lineales porque cada elemento del árbol puede tener
más de un sucesor.
Por definicion, es una estructura recursiva
01 ya que cada subárbol es, en sí mismo, un
árbol binario.

Son contenedores que permiten organizar


02 un conjunto de objetos en forma
jerarquica(niveles).

Una de las propiedades mas llamativas de


los arboles es la capacidad de acceder a
03 muchìsimos objetos desde un punto de
partida o raiz en unos pocos pasos.
Los árboles binarios son estructuras de datos en informática y matemáticas que se utilizan para
organizar y almacenar información de manera jerárquica. Están compuestos por nodos que se
conectan entre sí mediante enlaces o aristas. Cada nodo puede tener como máximo dos hijos,
uno izquierdo y uno derecho, lo que da origen al término "binario". El nodo en la parte superior del
árbol se llama "nodo raíz", y los nodos que no tienen hijos se denominan "nodos hoja". Los nodos
pueden contener datos y se organizan de manera que cada nodo es mayor o menor que sus
nodos hijos, dependiendo de si es un árbol binario de búsqueda.
EN RELACION CON OTROS NODOS
Nodos. Se le llamanodo a cada elemento que contiene el árbol
Nodo padre. Se utiliza este término para llamar a todos aquellos
nodos que tienen al menos un hijo.
Nodo hijo. Los hijos son todos aquellos nodos que tienen un padre.
Nodo hermano. Los . nodos hermanos son aquellos nodos que
comparten un mismo padre en común dentro de la estructura.

EN RELACION A LA POSICION DENTRO DEL ARBOL


Nodo Raíz: Se refiere al primer nodo de un Árbol, Solo un nodo del
Árbol puede ser la Raíz.
Nodo Hoja: Son todos aquellos nodos que no tienen hijos, los
cuales siempre se encuentran en los extremos de la estructura.
Nodo Rama: Estos son todos aquellos nodos que no son la raíz y
que ademas tiene al menos un hijo.
EN RELACION AL TAMAÑO DEL ARBOL

Peso: Conocemos como peso a el número de nodos que tiene un Árbol. Este factor es importante
porque nos da una idea del tamaño del árbol y el tamaño en memoria que nos puede ocupar en
tiempo de ejecución.

Orden: El Orden de un árbol es el número máximo de hijos que puede tener un Nodo. Es una
constante que se define antes de crear el árbol. Este valor no se calcula, sino que ya se conoce
cuando se diseña la estructura.
Grado: El grado se refiere al número mayor de hijos que tiene alguno de los nodos del Árbol y
esta limitado por el Orden, ya que este indica el número máximo de hijos que puede tener un
nodo.

Sub-Árbol: Conocemos como Sub-Árbol a todo Árbol generado a partir de una sección
determinada del Árbol, Por lo que podemos decir que un Árbol es un nodo Raíz con N Sub-
Árboles.
Árboles binarios distintos. Dos árboles binarios son distintos cuando sus estructuras son
diferentes.
Árboles binarios similares. Dos árboles binarios son similares cuando sus estructuras son
idénticas, pero la información que contienen sus nodos difiere entre sí.
Árboles binarios equivalentes. Los árboles binarios equivalentes se definen como aquellos
que son similares y además los nodos contienen la misma información.
Arbol binario completo: Un árbol binario completo de profundidad n es un árbol en el que,
para cada nivel, del 0 al nivel n-1 tiene un conjunto lleno de nodos y todos los nodos hoja a
nivel n ocupan las posiciones más a la izquierda del árbol.

Arbol binario lleno: Es un árbol lleno donde todos los nodos tienen cero o dos hijos. Es decir,
no existe un nodo que tenga un solo hijo.
Arbol binario degenerados: Árbol Binario de Búsqueda: AB en el que se garantiza que
Es un tipo especial los valores en los nodos izquierdos sean menores que el
denominado árbol degenerado valor del nodo raíz, y los valores en los nodos derechos son
en el que hay un solo nodo mayores. Esto facilita la búsqueda eficiente de elementos
hoja y cada nodo no hoja sólo en el árbol.
tiene un hijo. Un árbol Arbol binario equilibrados: Cuando un árbol binario de
degenerado es equivalente a búsqueda crece descontroladamente hacia un extremo su
una lista enlazada. rendimiento puede disminuir considerablemente. Para
mantener la eficiencia de operación surgen los árboles
equilibrados o balanceados.
REPRESENTACIÓN POR PUNTEROS

CADA NODO DE UN ÁRBOL SERÁ UN REGISTRO QUE CONTIENE AL MENOS TRES CAMPOS:
• UN CAMPO DE DATOS CON UN TIPO DE DATOS.
• UN PUNTERO AL NODO DEL SUBÁRBOL IZQUIERDO (QUE PUEDE SER NULO-NULL).
• UN PUNTERO AL NODO DEL SUBÁRBOL DERECHO (QUE PUEDE SER NULO-NULL).
REPRESENTACIÓN POR LISTAS ENLAZADAS

EL ÁRBOL BINARIO REPRESENTADO COMO UNA LISTA ENLAZADA


REPRESENTACIÓN POR ARRAYS

EXISTEN DIFERENTES MÉTODOS; UNO DE LOS MÁS FÁCILES ES MEDIANTE TRES


ARRAYS LINEALES PARALELOS QUE CONTEMPLAN EL CAMPO DE INFORMACIÓN Y
LOS DOS PUNTEROS DE AMBOS SUBÁRBOLES
RECORRIDO PRE-ORDEN RECORRIDO IN-ORDEN

1. VISITAR LA RAÍZ. 1. RECORRER EL SUBÁRBOL IZQUIERDO


2. RECORRER EL SUBÁRBOL IZQUIERDO EN IN-ORDEN.
EN PRE-ORDEN. 2. VISITAR LA RAÍZ.
3. RECORRER EL SUBÁRBOL DERECHO EN 3. RECORRER EL SUBÁRBOL DERECHO
PRE-ORDEN. EN IN-ORDEN.
RECORRIDO POST-ORDEN

1. RECORRER EL SUBÁRBOL IZQUIERDO


EN POST-ORDEN.
2. RECORRER EL SUBÁRBOL DERECHO
EN POST-ORDEN.
3. VISITAR LA RAÍZ.
1. Busqueda eficiente - Búsqueda eficiente de elementos, con un tiempo
promedio de O (log n) en el caso promedio.
2. Insercion y eliminacion eficiente - Los árboles binarios permiten la
inserción y eliminación eficiente de elementos en O(log n).
3. Estructura Jerarquica - Son adecuados para representar relaciones
jerárquicas, como la estructura de directorios de un sistema de archivos.
4. Facil de implementar - Son relativamente fáciles de implementar y se
utilizan en una variedad de aplicaciones.

1. Desequilibrio - Si no se gestionan adecuadamente, los árboles binarios pueden volverse


desequilibrados, lo que puede llevar a un rendimiento deficiente.
2. Busqueda peor caso - En el peor caso, la búsqueda en un árbol binario no balanceado puede ser O(n),
lo que lo hace ineficiente.
3. Requiere mantenimiento - Para garantizar el equilibrio en ciertos tipos de árboles binarios, como AVL
y rojo-negro, es necesario realizar un mantenimiento constante.
• EN LOS SISTEMAS OPERATIVOS, LOS ÁRBOLES BINARIOS SE UTILIZAN PARA
REPRESENTAR LA ESTRUCTURA DE DIRECTORIOS DE ARCHIVOS. ESTO PERMITE A LOS
USUARIOS NAVEGAR POR LOS ARCHIVOS Y DIRECTORIOS DE FORMA RÁPIDA Y
EFICIENTE.

• EN LOS NAVEGADORES WEB, LOS ÁRBOLES BINARIOS SE UTILIZAN PARA


REPRESENTAR EL ÁRBOL DOM DE UNA PÁGINA WEB. ESTO PERMITE AL NAVEGADOR
RENDERIZAR LA PÁGINA WEB DE FORMA EFICIENTE.

• EN LOS MOTORES DE BÚSQUEDA, LOS ÁRBOLES BINARIOS SE UTILIZAN PARA INDEXAR


EL CONTENIDO DE LA WEB. ESTO PERMITE A LOS MOTORES DE BÚSQUEDA ENCONTRAR
PÁGINAS WEB RELEVANTES PARA UNA CONSULTA DE BÚSQUEDA.

• EN LAS BASES DE DATOS, LOS ÁRBOLES BINARIOS SE UTILIZAN PARA IMPLEMENTAR


ÍNDICES. ESTO PERMITE A LAS BASES DE DATOS REALIZAR CONSULTAS DE FORMA
EFICIENTE.
UN EJEMPLO DE ÁRBOL BINARIO ES EL ÁRBOL DE EXPRESIÓN ARITMÉTICA
SIGUIENTE:

*
/ \
+ 5
/ \
2 3

ESTE ÁRBOL REPRESENTA LA EXPRESIÓN ARITMÉTICA (2 + 3) * 5. EL NODO RAÍZ


REPRESENTA EL OPERADOR DE MULTIPLICACIÓN, LOS NODOS HIJOS IZQUIERDO
Y DERECHO REPRESENTAN LOS OPERADORES DE SUMA Y MULTIPLICACIÓN, Y
LOS NODOS HOJAS REPRESENTAN LOS OPERANDOS 2, 3 Y 5.
GRAFOS
Los grafos son estructuras de datos, es decir,
tipos de datos abstractos, comúnmente son
utilizados para el modelado de problemas. Un
grafo es un conjunto no vacío de objetos o
entes físicos que tienen relación entre ellos,
está compuesto por un conjunto finito de
vértices muchas veces también llamados
nodos y un conjunto de pares de vértices
llamados lados, aristas o edges en inglés.
Grafos no dirigidos Grafos dirigidos
Son aquellos en los cuales los lados no Son aquellos en los cuales los lados están
están orientados. Cada pareja de orientados.
vértices que definen un lado no es La pareja de vértices que representa un lado
relevante. se escribe entre ángulos. La orientación del
lado depende del orden en que escriba la
pareja de vértices.
Los caminos se calculan de un vértice
a otro, y se denomina P (path en
inglés). P tiene longitud n desde el
vértice v0 a vn. Por lo tanto, el camino
está representado por: P = (v0, v1, v2,
v3, . . . , vn). De tal manera, que se
puede concluir que la longitud del
camino es el número de aristas que lo
forman.
La matriz de adyacencia es la
matriz en la que los vértices se
ordenan en las filas y columnas y
cada elemento aij representa el
número de aristas que unen el
vértice de la fila con el vértice de
la columna.Sirve para representar
las relaciones entre pares de
nodos o vértices. Esto se logra
mediante el uso de una matriz de
tantos renglones/columnas como
vértices.
Las matrices de adyacencia son
poco eficientes cuando
contienen muchos ceros, se
desperdicia memoria. Para
grafos dispersos la matriz de
adyacencia tiene el mismo
espacio en memoria que un
grafo que tiene muchas aristas.
Cuando esto ocurre se utiliza
otra representación mediante
el uso de listas, a esto se le
conoce como listas de
adyacencia.
Depth First Search, lo cual
traducido literalmente
Un algoritmo general que efectúa dicho
significaría búsqueda del
recorrido es:
primero en profundidad. El
sub_programa dfs (v)
recorrido en profundidad tiene
Visitado (v) =1
el mismo objetivo que el
para todo vértice w adyacente a v haga
recorrido en anchura, el cual es
if visitado (w) = 0 then
visitar y procesar cada uno de
dfs (w)
los vértices del grafo. Este
end (if)
recorrido difiere ya que utiliza la
fin (para)
estructura pila, es decir,
fin (dfs)
siempre se quita el último
elemento añadido.
Breadht First Search, lo cual
traducido significa Búsqueda
del primero a lo ancho. Este
recorrido usa una cola como
estructura para almacenar los
nodos o vértices marcados
como visitados, que se van a
procesar posteriormente. La
cola ayuda a tratar a los
elementos desde un vértice
inicial, v, posteriormente se
procesan o visitan sus nodos
adyacentes para que después
se visiten los nodos adyacentes
a éstos, con la restricción de
que no hayan sido visitados
anteriormente.
Es un árbol resultante
de recorrer un grafo.
Muchos textos lo
traducen como árbol
expandido. Como
resulta del recorrido
sobre un grafo se
puede decir que hay
spanning tree DFS y
spanning tree BFS.
El algoritmo de Kruskal es un
proceso que permite unir
todos los nodos de un grafo
formando un árbol, tomando
en cuenta el peso de las
aristas y cuyo coste total es el
mínimo posible. Este principio
puede ser aplicado en el tema
de enrutamiento, cuando se
tiene varios nodos
comunicados entre sí.
El algoritmo de Dijkstra, también
llamado algoritmo de caminos
mínimos, es un algoritmo para la
determinación del camino más
corto, dado un vértice origen,
hacia el resto de los vértices en un
grafo que tiene pesos en cada
arista. Su nombre alude a Edsger
Dijkstra, científico de la
computación de los Países Bajos
que lo concibió en 1956 y lo
publicó por primera vez en 1959.
Son aquellos en los que los valores a ordenar están en memoria principal

Ordenamiento de Burbuja
Ordenamiento Quick Sort
Ordenamiento Radix
Ordenamiento Inserción directa
Ordenamiento Shell
Ordenamiento Intercalación
Basada en comparar elementos adyacentes de la lista e intercambiar sus valores si están
desordenados.

Así se dice que los valores más pequeños burbujean hacia el primer elemento de la lista,
mientras que los valores más grandes se hunden hacia el final de la lista

VENTAJAS DESVENTAJAS

Consume bastante tiempo de


Eficaz, sencillo, código reducido
computadora y equiere muchas
para realizar el ordenamiento
escrituras en memoria.
ejemplo:
ejemplo:
Consiste en ir subdividiendo el arreglo en arreglos más pequeños, y ordenar éstos.

se toma un valor del arreglo como pivote, y se mueven todos los elementos menores que este pivote a
su izquierda, y los mayores a su derecha.

VENTAJAS DESVENTAJAS

Requiere de pocos recursos en comparación Se complica la implementación si la


a otros métodos de ordenamiento. recursión no es posible

Ciclo interno es extremadamente corto Un simple error en la implementación


puede pasar sin detección
No se requiere de espacio adicional durante
ejecución
En el arreglo {4,40,21,9,10,35}, los pasos serían:

{4,40,21,9,10,35} <-- se toma como pivote el 21.


{4,40,21,9,10,35} <-- Evaluamos cada elemento de la izquierda del pivote si es menor y
de la derecha si es mayor de tal manera que los elementos que se ubican a la izquierda
ejemplo: del pivote esten los menores y a la derecha los mayores.
{4,10,9,21,40,35} <-- Nos quedaria de esta forma.
{4,10,9,21} {40,35} <-- Luego se divide en dos arreglos mas pequeños y repetimos el
mismo proceso para cada arreglo.
{4,9,10,21} {35,40} <-- Nos quedaria de esta forma.
{4,9,10,21,35,40} <- Resultado final.
ordena enteros procesando sus dígitos de forma
individual

VENTAJAS DESVENTAJAS

Método constante. No hay mejor Requiere mucha memoria


o peor caso.

No se requiere conocer la
cantidad de digitos que contiene
el elemento.
ÍNDICE Matriz de entrada Primera iteración Segunda iteración Tercera iteración Cuarta iteración

0 1851 1851 0009 0009 0009

1 0913 0111 0111 0023 0023

2 1214 0041 0312 0041 0041

3 0312 0312 0913 0111 0111

4 0111 0913 1214 1214 0312

5 0023 0023 0023 0312 0913

6 0041 1214 0041 1851 1214

7 0009 0009 1851 0913 1851


Es conocido también como método baraja, donde
los elementos que van a ser ordenados son
considerados uno a la vez .

ventajas
fácil de implementar
uso mínimo de memoria

desventajas
lento
realiza altas comparaciones
Ejemplo de Inserción:
Ordenar el conjunto de los siguientes elementos
{25,3,12,19,2,1,9,6}
También conocido como ordenación por inserción con incrementos decrecientes, siendo una
mejora de los métodos de inserción directa.
Ventajas
Es un algoritmo simple teniendo un tiempo de ejecución aceptable.
Es uno de los algoritmos más rápidos.
No requiere memoria adicional.
Fácil implementación.
Adecuado para ordenar entradas de datos moderadamente grandes (decenas de millares)

Desventajas
Su complejidad es difícil de calcular y depende mucho de la secuencia de incrementos que
utilice.
Shell es un algoritmo no estable porque se puede perder el orden relativo inicial con facilidad.
Es menos eficiente que los métodos Merge, Heap y Quick.
Realiza numerosas comparaciones e intercambios.
Ejemplo Shell:
Ordenar el conjunto de los siguientes elementos
{25,3,12,19,2,1,9,6}
Consiste en dividir, ordenar y unir un arreglo de modo que la unión esté también ordenada.
Para ello, de izquierda a derecha e ir cogiendo el menor de los dos elementos.

Ventajas
Muy estable cuando la cantidad de registros a acomodar es de índice bajo, en caso contrario
gasta el doble del espacio que ocupan inicialmente los datos.
Efectivo para conjunto de datos a los que se puede acceder secuencialmente (arreglos, vectores,
etc.)

Desventajas
Definido recursivamente. Si se deseara implementarla no recursivamente se tendría que
emplear una pila y se requeriría un espacio adicional de memoria para almacenarla.
Ejemplo de Intercalación:
Ordenar el conjunto de los siguientes elementos
{25,3,12,19,2,1,9,6}
Los algoritmos de ordenamiento externo aquellos que para su
son procesos de ordenación de objetos uso utiliza la memoria
mediante archivos auxiliares secundaria. Estos
algoritmos se usan
cuando se tienen
registros y/o archivos
y estos pueden
quedar almacenados
y ordenados.

Ordenamiento por Mezcla Externa


Ordenamiento por Distribución
Ordenamiento por Radix Externo
Ordenamiento por Selección Natural
Divide el conjunto de datos en bloques
pequeños que caben en la memoria
principal y los ordena en memoria. Luego,
fusiona los bloques ordenados para obtener
una salida ordenada en almacenamiento
secundario.
Se utiliza cuando los datos tienen una clave de
distribución bien definida. Divide los datos en
múltiples "buckets" o cubetas según la clave de
distribución y luego ordena cada cubeta en
memoria. Finalmente, se fusionan las cubetas
ordenadas para obtener la salida ordenada.
Se utiliza cuando los datos se pueden
representar como cadenas de
caracteres o números enteros con
múltiples dígitos. Divide los datos en
Múltiples pasadas, ordenando los dígitos
menos significativos primero y
avanzando hacia los dígitos más
significativos.
Se utiliza cuando se desea ordenar un archivo que
contiene subsecuencias ordenadas.
Las identifica(subsecuencias ordenadas) y las fusiona
para obtener una secuencia ordenada más grande,
repitiendo este proceso hasta que todo el archivo esté
ordenado.

El objetivo principal de la Mezcla Natural es aprovechar


esta estructura de datos parcialmente ordenada para
acelerar el proceso de ordenamiento.
VENTAJAS DESVENTAJAS

MECLA
EFICIENTE CON DATOS GRANDES LENTO
EXTERNA

POR EFICIENTE EN DISTRIBUCIONES MALA EN DISTRIBUCIONES


DISTRIBUCIÓN PREDECIBLES DESIGUALES

RADIX EFICIENTE PARA ORDENAR LENTA PARA ALGUNOS TIPOS


EXTERNO MULTIPLES DÍGITOS DE DATOS

MEZCLA EFICIENTE EN DATOS SEMI MALA EN DATOS TOTALMENTE


ORDENADOS DESORDENADOS
NATURAL
Depende la cantidad de datos a ordenar

Que tan desordenados estan

Que tan rápido se deben ordenar


Existe otros métodos de ordenamiento
y variantes de ellos. De igual modo, se
siguen buscando nuevos métodos de
ordenamiento, ya que se puede
encontrar otras formas más eficientes
de ordenar datos.
En el caso que tengamos un registro con datos, y estos
datos no estan de la manera que necesitamos o
queremos, podemos ordenarlo por grafos o árboles.
O por algoritmos de ordenamiento interno o externo,
que son aplicados generalmente para ordenar.

Em cambio los grafos y árboles tienes otras aplicaciones


más concurridas como búsqueda de información.
¡Muchas gracias!

También podría gustarte