Está en la página 1de 15

ALGORITMOS Y ESTRUCTURA DE DATOS

ALGORITMOS Y ESTRUCTURA DE DATOS

ALUMNO : ROBERTO EDUARDO MARROQUIN CERON

PROFESOR: GUILLERMO EMMANUEL SANCHEZ OROZCO

LICENCIATURA EN INFORMATICA ADMINISTRATIVA

ACTIVIDAD 3

INVESTIGACIÓN
ALGORITMOS Y ESTRUCTURA DE DATOS

INTRODUCCIÓN
Empecemos recordando que un dato de tipo simple, no esta compuesto de otras estructuras, que no sean los bits, y que por
tanto su representación sobre el ordenador es directa, sin embargo existen unas operaciones propias de cada tipo, que en
cierta manera los caracterizan. Una estructura de datos es, a grandes rasgos, una colección de datos (normalmente de tipo
simple) que se caracterizan por su organización y las operaciones que se definen en ellos. Por tanto, una estructura de datos
vendrá caracterizada tanto por unas ciertas relaciones entre los datos que la constituyen (p.e., el orden de las componentes
de un vector de números reales), como por las operaciones posibles en ella.
Una estructura de datos no solo se utiliza para organizar los datos. También se utiliza para procesar, recuperar y almacenar
datos. Existen diferentes tipos básicos y avanzados de estructuras de datos que se utilizan en casi todos los programas o
sistemas de software que se han desarrollado. Por lo tanto, debemos tener un buen conocimiento sobre las estructuras de
datos.
Una estructura de datos no solo se utiliza para organizar los datos. También se utiliza para procesar, recuperar y almacenar
datos. Existen diferentes tipos básicos y avanzados de estructuras de datos que se utilizan en casi todos los programas o
sistemas de software que se han desarrollado. Por lo tanto, debemos tener un buen conocimiento de las estructuras de
datos.
Las estructuras de datos son una parte integral de las computadoras que se utilizan para organizar los datos en la memoria.
Son esenciales y responsables de organizar, procesar, acceder y almacenar datos de manera eficiente. Pero esto no es todo.
Varios tipos de estructuras de datos tienen sus propias características, funciones, aplicaciones, ventajas y desventajas.
Entonces, ¿cómo identifica una estructura de datos adecuada para una tarea en particular? ¿Qué significa el término
'Estructura de datos'? ¿Cuántos tipos de estructuras de datos existen y para qué se utilizan?

CÓMO VARÍA LA ESTRUCTURA DE DATOS DEL TIPO DE DATOS:


Ya hemos aprendido acerca de la estructura de datos. Muchas veces lo que sucede es que la gente se confunde entre tipo de
datos y estructura de datos. Entonces, veamos algunas diferencias entre el tipo de datos y la estructura de datos para que
quede claro.
TIPOS DE DATOS ESTRUCTURA DE DATOS

El tipo de datos es la forma de una variable a la que se le La estructura de datos es una colección de diferentes tipos de
puede asignar un valor. Define que la variable particular datos. Esos datos completos se pueden representar usando un
asignará los valores del tipo de datos dado solamente. objeto y se pueden usar en todo el programa.

Puede contener valor pero no datos. Por lo tanto, es sin datos.Puede contener múltiples tipos de datos dentro de un solo
objeto.

La implementación de un tipo de datos se conoce como La implementación de la estructura de datos se conoce como
implementación abstracta. implementación concreta.

No hay complejidad de tiempo en el caso de los tipos de En los objetos de estructura de datos, la complejidad del
datos. tiempo juega un papel importante.

En el caso de los tipos de datos, el valor de los datos no se Mientras que en el caso de las estructuras de datos, los datos
almacena porque solo representa el tipo de datos que se y su valor adquieren el espacio en la memoria principal de la
pueden almacenar. computadora. Además, una estructura de datos puede
contener diferentes clases y tipos de datos dentro de un solo
objeto.

Los ejemplos de tipos de datos son int, float, double, etc. Los ejemplos de estructura de datos son pila, cola, árbol, etc.
ALGORITMOS Y ESTRUCTURA DE DATOS

Clasificación de la estructura de datos:


La estructura de datos tiene muchos usos diferentes en nuestra vida diaria. Hay muchas estructuras de datos diferentes que
se utilizan para resolver diferentes problemas matemáticos y lógicos. Mediante el uso de la estructura de datos, uno puede
organizar y procesar una gran cantidad de datos en un período relativamente corto. Veamos diferentes estructuras de datos
que se utilizan en diferentes situaciones.

 Estructura de datos lineal: la estructura de datos en la que los elementos de datos se organizan de forma secuencial
o lineal, donde cada elemento se adjunta a sus elementos adyacentes anterior y siguiente, se denomina estructura
de datos lineal. Ejemplos de estructuras de datos lineales son matriz, pila, cola, lista enlazada, etc.
i. Estructura de datos estática: la estructura de datos estática tiene un tamaño de memoria fijo. Es más fácil acceder a
los elementos en una estructura de datos estática. Un ejemplo de esta estructura de datos es una matriz.
ii. Estructura de datos dinámica: en la estructura de datos dinámica, el tamaño no es fijo. Puede actualizarse
aleatoriamente durante el tiempo de ejecución, lo que puede considerarse eficiente en relación con la complejidad
de la memoria (espacio) del código. Ejemplos de esta estructura de datos son cola, pila, etc.
 Estructura de datos no lineales: las estructuras de datos donde los elementos de datos no se colocan secuencial o
linealmente se denominan estructuras de datos no lineales. En una estructura de datos no lineal, no podemos
recorrer todos los elementos en una sola ejecución. Ejemplos de estructuras de datos no lineales son árboles y
gráficos.

Necesidad de estructura de datos:


La estructura de los datos y la síntesis del algoritmo son relativas entre sí. La presentación de los datos debe ser fácil de
entender para que tanto el desarrollador como el usuario puedan realizar una implementación eficiente de la operación.
Las estructuras de datos proporcionan una manera fácil de organizar, recuperar, administrar y almacenar datos.
Aquí hay una lista de las necesidades de datos.

1. La modificación de la estructura de datos es fácil.


2. Requiere menos tiempo.
3. Ahorre espacio en la memoria de almacenamiento.
4. La representación de datos es fácil.
5. Fácil acceso a la gran base de datos.

Arrays:
Un array es una estructura de datos lineal y es una colección de elementos almacenados en ubicaciones de memoria
contiguas. La idea es almacenar varios artículos del mismo tipo juntos en un solo lugar. Permite el procesamiento de una
gran cantidad de datos en un período relativamente corto. El primer elemento del array está indexado por un subíndice de 0.
Hay diferentes operaciones posibles en un array, como Buscar, Ordenar, Insertar, Recorrer, Invertir y Eliminar.
ALGORITMOS Y ESTRUCTURA DE DATOS

Características de un array:
Un array tiene varias características que son las siguientes:

Los arrays usan una estructura de datos basada en índices que ayuda a identificar cada uno de los elementos en un arreglo
fácilmente usando el índice.
Si un usuario desea almacenar varios valores del mismo tipo de datos, el array se puede utilizar de manera eficiente.
Una matriz también puede manejar estructuras de datos complejas almacenando datos en una matriz bidimensional.
Una matriz también se usa para implementar otras estructuras de datos como pilas, colas, montones, tablas hash, etc.
El proceso de búsqueda en un arreglo se puede hacer muy fácilmente.

Operaciones realizadas en el array:


Inicialización: una matriz se puede inicializar con valores en el momento de la declaración o más tarde mediante una
declaración de asignación.
Acceder a los elementos: se puede acceder a los elementos de una matriz por su índice, que comienza en 0 y aumenta hasta
el tamaño de la matriz menos uno.
Búsqueda de elementos: las matrices se pueden buscar en busca de un elemento específico utilizando algoritmos de
búsqueda lineal o de búsqueda binaria.
Clasificación de elementos: los elementos de una matriz se pueden clasificar en orden ascendente o descendente mediante
algoritmos como la clasificación por burbujas, la clasificación por inserción o la clasificación rápida.
Inserción de elementos: los elementos se pueden insertar en una matriz en una ubicación específica, pero esta operación
puede llevar mucho tiempo porque requiere cambiar los elementos existentes en la matriz.
Eliminación de elementos: los elementos se pueden eliminar de una matriz cambiando los elementos que vienen después
para llenar el espacio.
Actualización de elementos: los elementos de una matriz se pueden actualizar o modificar asignando un nuevo valor a un
índice específico.
Atravesar elementos: los elementos de una matriz se pueden recorrer en orden, visitando cada elemento una vez.

Aplicaciones de arrays:
Las diferentes aplicaciones de un array son las siguientes:

 Una matriz se utiliza para resolver problemas de matrices.


 Los registros de la base de datos también se implementan mediante una matriz.
 Ayuda a implementar un algoritmo de clasificación.
 También se utiliza para implementar otras estructuras de datos como pilas, colas, montones, tablas hash, etc.
 Se puede utilizar una matriz para la programación de la CPU.
 Se puede aplicar como una tabla de búsqueda en las computadoras.
 Los arreglos se pueden usar en el procesamiento de voz donde cada señal de voz es un arreglo.
 La pantalla de la computadora también se muestra mediante una matriz. Aquí usamos una matriz multidimensional.
 La matriz se utiliza en muchos sistemas de gestión como una biblioteca, estudiantes, parlamento, etc.
 La matriz se utiliza en el sistema de reserva de boletos en línea. Esta matriz muestra los contactos en un teléfono
celular.
 En juegos como el ajedrez en línea, donde el jugador puede almacenar sus movimientos pasados, así como los
movimientos actuales. Indica un indicio de posición.
 Para guardar imágenes en una dimensión específica en Android Like 360*1200
ALGORITMOS Y ESTRUCTURA DE DATOS

Aplicaciones de la vida real de Array:


 Una matriz se usa con frecuencia para almacenar datos para cálculos matemáticos.
 Se utiliza en el procesamiento de imágenes.
 También se utiliza en la gestión de registros.
 Las páginas de libros también son ejemplos de la vida real de una matriz.
 También se utiliza para ordenar cajas.

EJEMPLO FIGURATIVO
Imagine que tiene un conjunto de 500 palabras y desea almacenar cada una de ellas en una variable separada. Claro, podrías
hacer:

x1 = "una vez"

x2 = "sobre"

y = "un"

z = "tiempo"

y así sucesivamente, pero sería un problema. Primero, tomaría mucho tiempo escribir el código. En segundo lugar, si quisiera
recorrer paso a paso cada una de esas 500 variables, procesar cada una por separado, sería realmente difícil.

Entonces, una matriz es una variable que se puede dividir en compartimentos. Puede tener una matriz llamada x, y luego
hacer:

x[1] = "una vez"

x[2] = "sobre"

x[3] = "un"

x[4] = "tiempo"

etcétera. Ahora, si desea imprimir el contenido de la matriz, no necesita saber qué 500 nombres de variables eligió, porque
todo es x. Simplemente configura un bucle como:

para (cuenta = 1 a 4)

eco x[contar]

Aquí, x es una matriz unidimensional. Como una fila de celdas en una hoja de cálculo. También puede tener matrices
bidimensionales, como una cuadrícula:

x[1,0] = "una vez"


ALGORITMOS Y ESTRUCTURA DE DATOS

x[1,1] = "sobre"

x[1,2] = "un"

x[1,3] = "tiempo"

x[2,0] = "vivido"

x[2,1] = "felizmente"

x[2,2] = "nunca"

x[2,3] = "después

Luego usaría 2 bucles, para recorrer cada valor de cada dimensión por turno.

LISTA ENLAZADA:
Una lista enlazada es una estructura de datos lineal en la que los elementos no se almacenan en ubicaciones de memoria
contiguas. Si las arrays admiten tipos similares de tipos de datos, las listas enlazadas consisten en elementos con diferentes
tipos de datos que también se organizan secuencialmente.

Pero, ¿cómo se crean estas listas enlazadas?


Una lista enlazada es una colección de "nodos" conectados entre sí a través de enlaces. Estos nodos consisten en los datos
que se almacenarán y un puntero a la dirección del siguiente nodo dentro de la lista enlazada. En el caso de los arreglos, el
tamaño está limitado a la definición, pero en las listas enlazadas no hay un tamaño definido. Cualquier cantidad de datos se
puede almacenar en él y se puede eliminar de él.

Tipos de listas enlazadas:

Lista de enlaces simples


Lista doblemente enlazada
Lista enlazada circular
Lista enlazada doblemente circular
ALGORITMOS Y ESTRUCTURA DE DATOS

Características de una lista enlazada:


Una lista enlazada tiene varias características que son las siguientes:

Una lista enlazada utiliza memoria adicional para almacenar enlaces.


Durante la inicialización de la lista enlazada, no es necesario conocer el tamaño de los elementos.
Las listas enlazadas se utilizan para implementar pilas, colas, gráficos, etc.
El primer nodo de la lista enlazada se llama Head.
El siguiente puntero del último nodo siempre apunta a NULL.
En una lista enlazada, la inserción y la eliminación son posibles fácilmente.
Cada nodo de la lista enlazada consta de un puntero/enlace que es la dirección del siguiente nodo.
Las listas vinculadas pueden reducirse o crecer fácilmente en cualquier momento.

Operaciones realizadas en la lista Vinculada:


Una lista enlazada es una estructura de datos lineal donde cada nodo contiene un valor y una referencia al siguiente nodo.
Aquí hay algunas operaciones comunes realizadas en listas enlazadas:

Inicialización: una lista enlazada se puede inicializar creando un nodo principal con una referencia al primer nodo. Cada nodo
subsiguiente contiene un valor y una referencia al siguiente nodo.
Inserción de elementos: los elementos se pueden insertar en la cabeza, la cola o en una posición específica en la lista
vinculada.
Eliminación de elementos: los elementos se pueden eliminar de la lista vinculada actualizando la referencia del nodo
anterior para que apunte al siguiente nodo, eliminando efectivamente el nodo actual de la lista.
Búsqueda de elementos: las listas vinculadas se pueden buscar para un elemento específico comenzando desde el nodo
principal y siguiendo las referencias a los siguientes nodos hasta encontrar el elemento deseado.
Actualización de elementos: los elementos de una lista enlazada se pueden actualizar modificando el valor de un nodo
específico.
Atravesar elementos: los elementos de una lista enlazada se pueden recorrer comenzando desde el nodo principal y
siguiendo las referencias a los siguientes nodos hasta llegar al final de la lista.
Inversión de una lista enlazada: la lista enlazada se puede invertir actualizando las referencias de cada nodo para que
apunten al nodo anterior en lugar del nodo siguiente.

Aplicaciones de la lista Enlazada:


Las diferentes aplicaciones de las listas enlazadas son las siguientes:

• Las listas enlazadas se utilizan para implementar pilas, colas, gráficos, etc.
• Las listas enlazadas se utilizan para realizar operaciones aritméticas con números enteros largos.
• Se utiliza para la representación de matrices dispersas.
• Se utiliza en la asignación vinculada de archivos.
• Ayuda en la gestión de la memoria.
• Se utiliza en la representación de Manipulación polinomial donde cada término polinomial representa un nodo en la
lista enlazada.
• Las listas enlazadas se utilizan para mostrar contenedores de imágenes. Los usuarios pueden visitar imágenes
pasadas, actuales y siguientes.
• Se utilizan para almacenar el historial de la página visitada.
• Se utilizan para realizar operaciones de deshacer.
• Los enlaces se utilizan en el desarrollo de software donde indican la sintaxis correcta de una etiqueta.
• Las listas vinculadas se utilizan para mostrar fuentes de redes sociales.
ALGORITMOS Y ESTRUCTURA DE DATOS

Aplicaciones de la vida real de una lista enlazada:


Se utiliza una lista enlazada en la programación Round-Robin para realizar un seguimiento del turno en los juegos de varios
jugadores.
Se utiliza en el visor de imágenes. Las imágenes anterior y siguiente están vinculadas y, por lo tanto, se puede acceder a ellas
mediante los botones anterior y siguiente.
En una lista de reproducción de música, las canciones están vinculadas a las canciones anteriores y siguientes.

STACK:
Stack es una estructura de datos lineal que sigue un orden particular en el que se realizan las operaciones. El orden es LIFO
(Last in first out). Es posible ingresar y recuperar datos desde un solo extremo. La entrada y recuperación de datos también
se denomina operación de inserción y extracción en una pila. Hay diferentes operaciones posibles en una pila, como invertir
una pila usando recursividad, ordenar, eliminar el elemento medio de una pila, etc.

Características de una pila:


Stack tiene varias características diferentes que son las siguientes:

Stack se usa en muchos algoritmos diferentes como Tower of Hanoi, tree traversal, recursion, etc.
La pila se implementa a través de una matriz o lista enlazada.
Sigue la operación Last In First Out, es decir, un elemento que se inserta primero aparecerá en último lugar y viceversa.
La inserción y la eliminación se realizan en un extremo, es decir, desde la parte superior de la pila.
En la pila, si el espacio asignado para la pila está lleno y todavía alguien intenta agregar más elementos, se producirá un
desbordamiento de la pila.

Aplicaciones de la pila:
Las diferentes aplicaciones de Stack son las siguientes:

La estructura de datos de pila se utiliza en la evaluación y conversión de expresiones aritméticas.


La pila se usa en recursividad.
Se utiliza para comprobar paréntesis.
Al invertir una cadena, también se usa la pila.
Stack se utiliza en la gestión de la memoria.
También se utiliza para procesar llamadas a funciones.
La pila se utiliza para convertir expresiones de infijo a sufijo.
La pila se utiliza para realizar operaciones de deshacer y rehacer en procesadores de texto.
La pila se usa en máquinas virtuales como JVM.
La pila se utiliza en los reproductores multimedia. Útil para reproducir la canción siguiente y anterior.
La pila se utiliza en operaciones de recursión.7

Operación realizada en la pila;


Una pila es una estructura de datos lineal que implementa el principio de último en entrar, primero en salir (LIFO). Aquí hay
algunas operaciones comunes realizadas en pilas:
ALGORITMOS Y ESTRUCTURA DE DATOS

Empujar: los elementos se pueden empujar a la parte superior de la pila, agregando un nuevo elemento a la parte superior
de la pila.
Pop: el elemento superior se puede quitar de la pila realizando una operación pop, eliminando efectivamente el último
elemento que se colocó en la pila.
Inspección: el elemento superior se puede inspeccionar sin quitarlo de la pila mediante una operación de inspección.
IsEmpty: se puede realizar una comprobación para determinar si la pila está vacía.
Tamaño: el número de elementos en la pila se puede determinar mediante una operación de tamaño.

Aplicaciones de la vida real de Stack:


Un ejemplo de la vida real de una pila es la capa de platos para comer dispuestos uno encima del otro. Cuando quitas un
plato de la pila, puedes llevar el plato a la parte superior de la pila. Pero este es exactamente el plato que se agregó más
recientemente a la pila. Si desea que el plato esté en la parte inferior de la pila, debe quitar todos los platos de encima para
alcanzarlo.
Los navegadores utilizan estructuras de datos de pila para realizar un seguimiento de los sitios visitados anteriormente.
El registro de llamadas en dispositivos móviles también utiliza una estructura de datos de stack.

QUEUE:
La queue o cola es una estructura de datos lineal que sigue un orden particular en el que se realizan las operaciones. El orden
es Primero en entrar, primero en salir (FIFO), es decir, se accederá primero al elemento de datos almacenado primero. En
esto, ingresar y recuperar datos no se realiza desde un solo extremo. Un ejemplo de una cola es cualquier cola de
consumidores de un recurso donde se atiende primero al consumidor que llegó primero. Se realizan diferentes operaciones
en una Cola como Invertir una Cola (con o sin uso de recursividad), Invertir los primeros K elementos de una Cola, etc.
Algunas operaciones básicas realizadas en Cola son poner en cola, quitar cola, adelante, atrás, etc.

Características de una cola:


La cola tiene varias características diferentes que son las siguientes:

La cola es una estructura FIFO (primero en entrar, primero en salir).


Para eliminar el último elemento de la Cola, todos los elementos insertados antes del nuevo elemento en la cola deben
eliminarse.
Una cola es una lista ordenada de elementos de tipos de datos similares.

Aplicaciones de cola:
Las diferentes aplicaciones de Queue son las siguientes:

• La cola se utiliza para manejar el tráfico del sitio web.


• Ayuda a mantener la lista de reproducción en los reproductores multimedia.
• La cola se usa en los sistemas operativos para manejar interrupciones.
• Ayuda a atender solicitudes en un solo recurso compartido, como una impresora, programación de tareas de CPU,
etc.
• Se utiliza en la transferencia asíncrona de datos, p. tuberías, archivos IO y sockets.
• Las colas se utilizan para la programación de trabajos en el sistema operativo.
• En las redes sociales se utiliza la cola para subir múltiples fotos o videos.
• Para enviar una estructura de datos de cola de correo electrónico se utiliza.
• Para manejar el tráfico del sitio web a la vez, se utilizan colas.
• En el sistema operativo Windows, para cambiar múltiples aplicaciones.
ALGORITMOS Y ESTRUCTURA DE DATOS

Características de una cola:


La cola tiene varias características diferentes que son las siguientes:

La cola es una estructura FIFO (primero en entrar, primero en salir).


Para eliminar el último elemento de la Cola, todos los elementos insertados antes del nuevo elemento en la cola deben
eliminarse.
Una cola es una lista ordenada de elementos de tipos de datos similares.

Aplicaciones de cola:
Las diferentes aplicaciones de Queue son las siguientes:

• La cola se utiliza para manejar el tráfico del sitio web.


• Ayuda a mantener la lista de reproducción en los reproductores multimedia.
• La cola se usa en los sistemas operativos para manejar interrupciones.
• Ayuda a atender solicitudes en un solo recurso compartido, como una impresora, programación de tareas de CPU,
etc.
• Se utiliza en la transferencia asíncrona de datos, p. tuberías, archivos IO y sockets.
• Las colas se utilizan para la programación de trabajos en el sistema operativo.
• En las redes sociales se utiliza la cola para subir múltiples fotos o videos.
• Para enviar una estructura de datos de cola de correo electrónico se utiliza.
• Para manejar el tráfico del sitio web a la vez, se utilizan colas.
• En el sistema operativo Windows, para cambiar múltiples aplicaciones.

Operación realizada en la cola:


Una cola es una estructura de datos lineal que implementa el principio de primero en entrar, primero en salir (FIFO). Estas
son algunas operaciones comunes que se realizan en las colas:

Encolar: los elementos se pueden agregar al final de la cola, agregando un nuevo elemento al final de la cola.
Eliminación de la cola: el elemento frontal se puede eliminar de la cola realizando una operación de eliminación de la cola,
eliminando efectivamente el primer elemento que se agregó a la cola.
Vistazo: el elemento frontal se puede inspeccionar sin quitarlo de la cola mediante una operación de vistazo.
IsEmpty: se puede realizar una comprobación para determinar si la cola está vacía.
Tamaño: el número de elementos en la cola se puede determinar mediante una operación de tamaño.

Aplicaciones de la vida real de Queue:


Un ejemplo del mundo real de una cola es una carretera de un solo sentido, donde el vehículo que entra primero saldrá
primero.
Un ejemplo más real se puede ver en la cola en las taquillas.
Una línea de caja en una tienda también es un ejemplo de cola.
Gente en una escalera mecánica

Árbol:
Un árbol es una estructura de datos no lineal y jerárquica donde los elementos se organizan en una estructura similar a un
árbol. En un árbol, el nodo superior se llama nodo raíz. Cada nodo contiene algunos datos, y los datos pueden ser de
cualquier tipo. Consiste en un nodo central, nodos estructurales y subnodos que están conectados a través de los bordes. Las
diferentes estructuras de datos de árbol permiten un acceso más rápido y fácil a los datos, ya que es una estructura de datos
no lineal. Un árbol tiene varias terminologías como Nodo, Raíz, Borde, Altura de un árbol, Grado de un árbol, etc.
ALGORITMOS Y ESTRUCTURA DE DATOS

Hay diferentes tipos de árboles

• Árbol binario,
• árbol de búsqueda binaria,
• árbol AVL,
• Árbol B, etc.

Características de un árbol:
El árbol tiene varias características diferentes que son las siguientes:

➔ Un árbol también se conoce como estructura de datos recursiva.


➔ En un árbol, la Altura de la raíz se puede definir como el camino más largo desde el nodo raíz hasta el nodo hoja.
➔ En un árbol, también se puede calcular la profundidad desde la parte superior hasta cualquier nodo. El nodo raíz
tiene una profundidad de 0.

Aplicaciones del árbol:


Las diferentes aplicaciones de Tree son las siguientes:

➢ Heap es una estructura de datos de árbol que se implementa mediante matrices y se utiliza para implementar colas
de prioridad.
➢ B-Tree y B+ Tree se utilizan para implementar la indexación en bases de datos.
➢ Syntax Tree ayuda en la exploración, el análisis, la generación de código y la evaluación de expresiones aritméticas
en el diseño del Compilador.
➢ K-D Tree es un árbol de partición espacial que se utiliza para organizar puntos en el espacio K-dimensional. Los
árboles de expansión se utilizan en enrutadores en redes informáticas.

Operación realizada en el árbol:


Un árbol es una estructura de datos no lineal que consta de nodos conectados por aristas. Aquí hay algunas operaciones
comunes realizadas en los árboles:

Inserción: se pueden agregar nuevos nodos al árbol para crear una nueva rama o para aumentar la altura del árbol.
Eliminación: los nodos se pueden eliminar del árbol actualizando las referencias del nodo principal para eliminar la
referencia al nodo actual.
Búsqueda: los elementos se pueden buscar en un árbol comenzando desde el nodo raíz y recorriendo el árbol en función del
valor del nodo actual hasta que se encuentre el nodo deseado.
Recorrido: los elementos de un árbol se pueden recorrer de varias maneras diferentes, incluido el recorrido en orden, pre-
orden y post-orden.
Altura: La altura del árbol se puede determinar contando el número de aristas desde el nodo raíz hasta el nodo hoja más
alejado.
Profundidad: la profundidad de un nodo se puede determinar contando el número de aristas desde el nodo raíz hasta el
nodo actual.
Equilibrio: el árbol se puede equilibrar para garantizar que la altura del árbol se minimice y la distribución de los nodos sea lo
más uniforme posible.
ALGORITMOS Y ESTRUCTURA DE DATOS

Aplicaciones de la vida real del árbol:


En la vida real, la estructura de datos de árbol ayuda en el desarrollo de juegos.
También ayuda en la indexación en bases de datos.
Un árbol de decisiones es una herramienta eficiente de aprendizaje automático, comúnmente utilizada en el análisis de
decisiones. Tiene una estructura similar a un diagrama de flujo que ayuda a comprender los datos.
El servidor de nombres de dominio también utiliza una estructura de datos de árbol.
El caso de uso más común de un árbol es cualquier sitio de redes sociales.

Grafico:
Un gráfico es una estructura de datos no lineal que consta de vértices (o nodos) y aristas. Consiste en un conjunto finito de
vértices y un conjunto de aristas que conectan un par de nodos. El gráfico se utiliza para resolver los problemas de
programación más desafiantes y complejos. Tiene diferentes terminologías que son Camino, Grado, Vértices adyacentes,
Componentes conectados, etc.

Características del gráfico:


El gráfico tiene varias características diferentes que son las siguientes:

La distancia máxima de un vértice a todos los demás vértices se considera la Excentricidad de ese vértice.
El vértice que tiene mínima excentricidad se considera el punto central del gráfico.
El valor mínimo de excentricidad de todos los vértices se considera el radio de un gráfico conexo.

Aplicaciones de Gráfico:
Las diferentes aplicaciones de Graphs son las siguientes:

• El gráfico se utiliza para representar el flujo de cálculo.


• Se utiliza en el modelado de gráficos.
• El sistema operativo utiliza el gráfico de asignación de recursos.
• También se utiliza en la World Wide Web, donde las páginas web representan los nodos.

Operación realizada en Graph:


Un gráfico es una estructura de datos no lineal que consta de nodos y bordes. Aquí hay algunas operaciones comunes
realizadas en gráficos:

Agregar vértice: se pueden agregar nuevos vértices al gráfico para representar un nuevo nodo.
Agregar borde: se pueden agregar bordes entre vértices para representar una relación entre nodos.
Eliminar vértice: los vértices se pueden eliminar del gráfico actualizando las referencias de los vértices adyacentes para
eliminar la referencia al vértice actual.
Eliminar borde: los bordes se pueden eliminar actualizando las referencias de los vértices adyacentes para eliminar la
referencia al borde actual.
Búsqueda primero en profundidad (DFS): un gráfico se puede recorrer utilizando una búsqueda primero en profundidad
visitando los vértices de una manera primero en profundidad.
Búsqueda primero en anchura (BFS): un gráfico se puede recorrer utilizando una búsqueda primero en anchura visitando los
vértices de una manera primero en anchura.
Ruta más corta: la ruta más corta entre dos vértices se puede determinar utilizando algoritmos como el algoritmo de Dijkstra
o el algoritmo A*.
ALGORITMOS Y ESTRUCTURA DE DATOS

Componentes conectados: los componentes conectados de un gráfico se pueden determinar encontrando conjuntos de
vértices que están conectados entre sí pero no con ningún otro vértice en el gráfico.
Detección de ciclos: los ciclos en un gráfico se pueden detectar comprobando los bordes traseros durante una búsqueda en
profundidad.

Aplicaciones de la vida real de Graph:


Uno de los ejemplos más comunes del mundo real de un gráfico es Google Maps, donde las ciudades se ubican como vértices
y las rutas que conectan esos vértices se ubican como bordes del gráfico.
Una red social también es un ejemplo del mundo real de un gráfico en el que cada persona en la red es un nodo y todas sus
amistades en la red son los bordes del gráfico.
Un gráfico también se usa para estudiar moléculas en física y química.

TABLA HASH
Hashing es una técnica que se utiliza para identificar de forma única un objeto específico de un grupo de objetos similares.
Algunos ejemplos de cómo se usa el hashing en nuestras vidas incluyen:
En las universidades, a cada estudiante se le asigna un número de lista único que se puede usar para recuperar información
sobre ellos.
En las bibliotecas, a cada libro se le asigna un número único que se puede utilizar para determinar información sobre el libro,
como su ubicación exacta en la biblioteca o los usuarios a los que se ha entregado, etc.
En hashing, las claves grandes se convierten en claves pequeñas mediante el uso de funciones hash. Luego, los valores se
almacenan en una estructura de datos llamada tabla hash. La idea de hashing es distribuir entradas (pares clave/valor) de
manera uniforme en una matriz. A cada elemento se le asigna una clave (clave convertida). Al usar esa tecla, puede acceder
al elemento en tiempo O (1). Usando la clave, el algoritmo (función hash) calcula un índice que sugiere dónde se puede
encontrar o insertar una entrada.
La estructura de datos de la tabla Hash almacena elementos en pares clave-valor donde
Clave: entero único que se utiliza para indexar los valores.
Valor: datos que están asociados con las claves.
Hashing se implementa en dos pasos:
1. Un elemento se convierte en un número entero mediante una función hash. Este elemento se puede utilizar como
índice para almacenar el elemento original, que cae en la tabla hash.
2. El elemento se almacena en la tabla hash donde se puede recuperar rápidamente usando una clave hash.

Hashing (función hash)


En una tabla hash, se procesa un nuevo índice utilizando las claves. Y, el elemento correspondiente a esa clave se almacena
en el índice. Este proceso se llama hash.
Una función hash es cualquier función que se puede usar para asignar un conjunto de datos de un tamaño arbitrario a un
conjunto de datos de un tamaño fijo, que cae en la tabla hash. Los valores devueltos por una función hash se denominan
valores hash, códigos hash, sumas hash o simplemente hash.

Para lograr un buen mecanismo hash, es importante tener una buena función hash con los siguientes requisitos básicos:

i. Fácil de calcular: debe ser fácil de calcular y no debe convertirse en un algoritmo en sí mismo.
ii. Distribución uniforme: debe proporcionar una distribución uniforme en la tabla hash y no debe dar lugar a la
agrupación.
iii. Menos colisiones: las colisiones ocurren cuando pares de elementos se asignan al mismo valor hash. Estos deben
evitarse.
ALGORITMOS Y ESTRUCTURA DE DATOS

Tabla Hash
Una tabla hash es una estructura de datos que se utiliza para almacenar pares clave/valor. Utiliza una función hash para
calcular un índice en una matriz en la que se insertará o buscará un elemento. Mediante el uso de una buena función hash, el
hash puede funcionar bien. Bajo suposiciones razonables, el tiempo promedio requerido para buscar un elemento en una
tabla hash es O(1).

Colisión de hash
Cuando la función hash genera el mismo índice para varias claves, habrá un conflicto (qué valor se almacenará en ese índice).
Esto se llama colisión hash.

Podemos resolver la colisión hash usando una de las siguientes técnicas.

• Encadenamiento separado (hashing abierto)


El encadenamiento separado es una de las técnicas de resolución de colisiones más utilizadas. Por lo general, se
implementa mediante listas enlazadas. En un encadenamiento separado, cada elemento de la tabla hash es una lista
enlazada. Para almacenar un elemento en la tabla hash, debe insertarlo en una lista vinculada específica. Si hay
alguna colisión (es decir, dos elementos diferentes tienen el mismo valor hash), almacene ambos elementos en la
misma lista vinculada.
• Direccionamiento abierto:
Al igual que el encadenamiento por separado, el direccionamiento abierto es un método para manejar las colisiones.
En Open Addressing, todos los elementos se almacenan en la propia tabla hash. Entonces, en cualquier momento, el
tamaño de la tabla debe ser mayor o igual que el número total de claves (tenga en cuenta que podemos aumentar el
tamaño de la tabla copiando los datos antiguos si es necesario). Este enfoque también se conoce como hashing
cerrado.
i. Sondeo lineal:
En el sondeo lineal, la tabla hash se busca secuencialmente desde la ubicación original del hash. Si en caso de
que la ubicación que obtenemos ya esté ocupada, buscamos la siguiente ubicación.
ii. Sondeo cuadrático:
Si observa cuidadosamente, comprenderá que el intervalo entre las sondas aumentará proporcionalmente al
valor hash. El sondeo cuadrático es un método con la ayuda del cual podemos resolver el problema de la
agrupación que se discutió anteriormente. Este método también se conoce como el método del cuadrado
medio. En este método, buscamos la ranura i2 en la iteración i. Siempre comenzamos desde la ubicación
original del hash. Si solo la ubicación está ocupada, verificamos las otras ranuras.
iii. Hashing doble
Los intervalos que se encuentran entre las sondas se calculan mediante otra función hash. El hash doble es
una técnica que reduce la agrupación en clústeres de forma optimizada. En esta técnica, los incrementos de
la secuencia de sondeo se calculan utilizando otra función hash. Usamos otra función hash hash2(x) y
buscamos la ranura i*hash2(x) en la i-ésima rotación.

Comparación de los tres anteriores:


El direccionamiento abierto es una técnica de manejo de colisiones que se usa en el hash donde, cuando ocurre una colisión
(es decir, cuando dos o más claves se asignan a la misma ranura), el algoritmo busca otra ranura vacía en la tabla hash para
almacenar la clave colisionada.
ALGORITMOS Y ESTRUCTURA DE DATOS

En el sondeo lineal, el algoritmo simplemente busca el siguiente espacio disponible en la tabla hash y coloca allí la clave
colisionada. Si esa ranura también está ocupada, el algoritmo continúa buscando la siguiente ranura disponible hasta que
encuentra una ranura vacía. Este proceso se repite hasta que se hayan almacenado todas las claves colisionadas. El sondeo
lineal tiene el mejor rendimiento de caché, pero sufre de agrupamiento. Una ventaja más del sondeo lineal es fácil de
calcular.
En el sondeo cuadrático, el algoritmo busca ranuras de una manera más espaciada. Cuando ocurre una colisión, el algoritmo
busca la siguiente ranura usando una ecuación que involucra el valor hash original y una función cuadrática. Si esa ranura
también está ocupada, el algoritmo incrementa el valor de la función cuadrática y vuelve a intentarlo. Este proceso se repite
hasta que se encuentra una ranura vacía. El sondeo cuadrático se encuentra entre los dos en términos de rendimiento de
caché y agrupación.
En el hash doble, el algoritmo utiliza una segunda función hash para determinar la siguiente ranura para comprobar cuándo
se produce una colisión. El algoritmo calcula un valor hash usando la función hash original, luego usa la segunda función hash
para calcular una compensación. Luego, el algoritmo verifica la ranura que es la suma del valor hash original y el
desplazamiento. Si esa ranura está ocupada, el algoritmo incrementa el desplazamiento y vuelve a intentarlo. Este proceso
se repite hasta que se encuentra una ranura vacía. El hashing doble tiene un rendimiento de caché deficiente, pero no se
agrupa. El hashing doble requiere más tiempo de cálculo, ya que es necesario calcular dos funciones hash.

Ventajas de la estructura de datos:


Mejor organización de datos y eficiencia de almacenamiento.
Recuperación y manipulación de datos más rápida.
Facilita el diseño de algoritmos para la resolución de problemas complejos.
Facilita la tarea de actualización y mantenimiento de los datos.
Proporciona una mejor comprensión de las relaciones entre los elementos de datos.

Desventaja de la estructura de datos:


Mayor sobrecarga computacional y de memoria.
Dificultad para diseñar e implementar estructuras de datos complejas.
Escalabilidad y flexibilidad limitadas.
Complejidad en la depuración y pruebas.
Dificultad para modificar estructuras de datos existentes.

Conclusión
¿Por qué es importante seleccionar la estructura de datos adecuada en diferentes situaciones de programación?
Aunque estas son las estructuras de datos más conocidas y utilizadas, también existen otras formas de estructuras de datos
que se utilizan en informática, como estructuras de datos basadas en políticas, etc. Pero no importa qué estructura de datos
elija, cada una tiene sus ventajas y desventajas, sin el conocimiento de las cuales, puede ser muy costoso elegir el tipo
incorrecto de estructura de datos. Por lo tanto, es muy importante comprender la necesidad de la situación y luego decidir
qué tipo de estructura de datos se adapta mejor al trabajo.
Al final todo se resume a entender las necesidades de tu proyecto, sin un entendimiento adecuado de lo que se requiere en
el planteamiento del problema, no podremos ver sin esos requisitos cual sera la mejor manera a la hora de utilizar algún
algoritmo necesario.

Bibliografia
Russel, R. (2018) Estructuras de Datos y algoritmos: Una introducción Sencilla
Jesus Albarran. (2023).Estructuras de datos básicas: Listas, pilas, colas y matrices
Skiena, S. S. (2009). The Algorithm Design Manual. Springer Science & Business Media.
https://es.scribd.com/document/145025693/Resumen-Arreglos-Pilas-y-Colas

También podría gustarte