Introducción a Estructuras de Datos y Algoritmos
Las Estructuras de Datos tratan sobre cómo se puede almacenar datos en diferentes estructuras.
Los Algoritmos tratan sobre cómo resolver diferentes problemas, a menudo buscando y manipulando estructuras de datos.
La teoría sobre Estructuras de Datos y Algoritmos (EDA) nos ayuda a utilizar grandes cantidades de datos para resolver problemas de manera eficiente.
¿Qué son las Estructuras de Datos?
Una estructura de datos es una forma de almacenar datos.
Estructuramos los datos de diferentes maneras dependiendo de los datos que tenemos y lo que queremos hacer con ellos.
Primero, consideremos un ejemplo sin tener en mente las computadoras, solo para captar la idea.
Si queremos almacenar datos sobre las personas con las que estamos relacionados, utilizamos un árbol genealógico como estructura de datos. Elegimos un árbol genealógico como estructura de datos porque tenemos información sobre las personas con las que estamos relacionados y cómo están relacionadas, y queremos una visión general para poder encontrar fácilmente a un miembro específico de la familia, varias generaciones atrás.
Con tal estructura de árbol genealógico visualmente frente a ti, es fácil ver, por ejemplo, quién es la madre de mi madre—es ‘Emma’, ¿verdad? Pero sin los vínculos de hijo a padres que esta estructura de datos proporciona, sería difícil determinar cómo están relacionadas las personas.
Las estructuras de datos nos dan la posibilidad de gestionar grandes cantidades de datos de manera eficiente para usos como grandes bases de datos y servicios de indexación de Internet.
Las estructuras de datos son ingredientes esenciales en la creación de algoritmos rápidos y potentes. Ayudan a gestionar y organizar datos, reducen la complejidad y aumentan la eficiencia.
En Ciencias de la Computación existen dos tipos distintos de estructuras de datos.
Las Estructuras de Datos Primitivas son estructuras de datos básicas proporcionadas por los lenguajes de programación para representar valores únicos, como enteros, números de coma flotante, caracteres y booleanos.
Las Estructuras de Datos Abstractas son estructuras de datos de nivel superior que se construyen utilizando tipos de datos primitivos y proporcionan operaciones más complejas y especializadas. Algunos ejemplos comunes de estructuras de datos abstractas incluyen arreglos, listas enlazadas, pilas, colas, árboles y grafos.
¿Qué son los Algoritmos?
Un algoritmo es un conjunto de instrucciones paso a paso para resolver un problema dado o lograr un objetivo específico.
Una receta de cocina escrita en un papel es un ejemplo de un algoritmo, donde el objetivo es preparar una cena específica. Los pasos necesarios para hacer una cena específica se describen exactamente.
Cuando hablamos de algoritmos en Ciencias de la Computación, las instrucciones paso a paso se escriben en un lenguaje de programación, y en lugar de ingredientes de alimentos, un algoritmo utiliza estructuras de datos.
Los algoritmos son fundamentales para la programación de computadoras, ya que proporcionan instrucciones paso a paso para ejecutar tareas. Un algoritmo eficiente puede ayudarnos a encontrar la solución que buscamos y a transformar un programa lento en uno más rápido.
Al estudiar algoritmos, los desarrolladores pueden escribir mejores programas.
Ejemplos de algoritmos:
- Encontrar la ruta más rápida en un sistema de navegación GPS
- Navegar un avión o un coche (control de crucero)
- Encontrar lo que los usuarios buscan (motor de búsqueda)
- Ordenar, por ejemplo, ordenar películas por calificación
Los algoritmos que veremos en este tutorial están diseñados para resolver problemas específicos y, a menudo, están hechos para trabajar en estructuras de datos específicas. Por ejemplo, el algoritmo ‘Ordenamiento de Burbuja’ está diseñado para ordenar valores y está hecho para trabajar en arreglos.
Juntos: Estructuras de Datos y Algoritmos
Las estructuras de datos y los algoritmos (EDA) van de la mano. Una estructura de datos no vale mucho si no puedes buscar en ella o manipularla eficientemente usando algoritmos, y los algoritmos en este tutorial no valen mucho sin una estructura de datos sobre la cual trabajar.
EDA trata de encontrar maneras eficientes de almacenar y recuperar datos, de realizar operaciones sobre datos y de resolver problemas específicos.
Al comprender EDA, puedes:
- Decidir qué estructura de datos o algoritmo es mejor para una situación dada.
- Hacer programas que se ejecuten más rápido o usen menos memoria.
- Entender cómo abordar problemas complejos y resolverlos de manera sistemática.
¿Dónde se Necesitan las Estructuras de Datos y Algoritmos?
Las Estructuras de Datos y Algoritmos (EDA) se utilizan en prácticamente todos los sistemas de software, desde sistemas operativos hasta aplicaciones web:
Para gestionar grandes cantidades de datos, como en una red social o un motor de búsqueda.
Para programar tareas, para decidir qué tarea debe hacer primero una computadora.
Para planificar rutas, como en un sistema GPS para encontrar el camino más corto de A a B.
Para optimizar procesos, como organizar tareas para que se puedan completar lo más rápido posible.
Para resolver problemas complejos: desde encontrar la mejor manera de cargar un camión hasta hacer que una computadora ‘aprenda’ de los datos.
EDA es fundamental en casi todas las partes del mundo del software:
- Sistemas Operativos
- Sistemas de Bases de Datos
- Aplicaciones Web
- Aprendizaje Automático
- Videojuegos
- Sistemas Criptográficos
- Análisis de Datos
- Motores de Búsqueda
Teoría y Terminología
A medida que avanzamos en este tutorial, se necesitarán nuevos conceptos teóricos y terminología (nuevas palabras) para que podamos entender mejor las estructuras de datos y algoritmos en los que estaremos trabajando.
Estas nuevas palabras y conceptos se presentarán y explicarán adecuadamente cuando sean necesarios, pero aquí hay una lista de algunos términos clave, solo para tener una visión general de lo que viene:
Término | Descripción |
---|---|
Algoritmo | Un conjunto de instrucciones paso a paso para resolver un problema específico. |
Estructura de Datos | Una forma de organizar datos para que se puedan usar de manera eficiente. Las estructuras de datos comunes incluyen arreglos, listas enlazadas y árboles binarios. |
Complejidad Temporal | Una medida de la cantidad de tiempo que toma ejecutar un algoritmo, dependiendo de la cantidad de datos con los que el algoritmo esté trabajando. |
Complejidad Espacial | Una medida de la cantidad de memoria que usa un algoritmo, dependiendo de la cantidad de datos con los que el algoritmo esté trabajando. |
Notación Big O | Una notación matemática que describe el comportamiento limitante de una función cuando el argumento tiende hacia un valor particular o infinito. Se utiliza en este tutorial para describir la complejidad temporal de un algoritmo. |
Recursión | Técnica de programación donde una función se llama a sí misma. |
Dividir y Conquistar | Un método para resolver problemas complejos dividiéndolos en subproblemas más pequeños y manejables, resolviendo los subproblemas y combinando las soluciones. La recursión se usa a menudo cuando se utiliza este método en un algoritmo. |
Fuerza Bruta | Una forma simple y directa en la que un algoritmo puede funcionar simplemente probando todas las soluciones posibles y luego eligiendo la mejor. |