Estructuras de datos y algoritmos
Una estructura de datos (del inglés: data structure) es la forma en que una computadora almacena y organiza los datos.
Una estructura de datos es una colección de elementos de datos con una cierta relación lógica, aplicada mediante una estructura de almacenamiento en la computadora, y que encapsula las operaciones correspondientes. Incluye tres aspectos: la relación lógica, la relación de almacenamiento y las operaciones.
Los diferentes tipos de estructuras de datos son adecuados para diferentes tipos de aplicaciones, y algunas incluso están especializadas para tareas específicas. Por ejemplo, las redes de computadoras dependen de tablas de enrutamiento, y los árboles B son muy adecuados para el encapsulamiento de bases de datos.
¿Por qué aprender estructuras de datos y algoritmos?
A medida que las aplicaciones se vuelven más complejas y los datos más abundantes, aparecen millones, miles de millones o incluso decenas de miles de millones de datos; las operaciones como búsqueda, inserción u ordenamiento sobre datos tan grandes se vuelven cada vez más lentas. Las estructuras de datos se utilizan para resolver estos problemas.
Aprender estructuras de datos y algoritmos puede:
- Mejorar la eficiencia del código: unas buenas estructuras de datos y algoritmos pueden hacer que los programas se ejecuten más rápido y ocupen menos memoria
- Resolver problemas complejos: muchos problemas reales requieren estructuras de datos y algoritmos específicos para resolverse de manera eficaz
- Imprescindible para entrevistas: un punto de conocimiento que casi siempre se evalúa en las entrevistas técnicas
- Fundamentos de programación: es la base de todas las técnicas avanzadas de programación
¿Qué necesita saber antes de leer este tutorial?
Antes de comenzar a leer este tutorial, debe tener conocimientos básicos de programación, como los conceptos de programación en Python o Java.
Si aún no conoce estos conceptos, le recomendamos que primero lea nuestrosTutorial de PythonoTutorial de Java。
Recomendamos utilizar Python como lenguaje de aprendizaje, por las siguientes razones:
| Característica | Python | Java | C++ |
|---|---|---|---|
| Dificultad de aprendizaje | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ |
| Simplicidad de sintaxis | Alto | Medio | bajo |
| Eficiencia de ejecución | Medio | Alto | Muy alta |
| Soporte de la comunidad | Amplio | Amplio | Amplio |
| Índice de recomendación | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
Explicación de estructuras de datos y algoritmos
Estructuras de datosEs como la forma en que organizamos los objetos. Imagina tu estantería:
- Si los apilas al azar, encontrar un libro será muy difícil (estructura de datos ineficiente)
- Si los colocas por categoría, autor u orden alfabético, encontrar un libro será muy rápido (estructura de datos eficiente)
AlgoritmosSon los pasos y métodos para resolver problemas. Como una receta de cocina:
- Los mismos ingredientes (datos), con diferentes métodos de preparación (algoritmos), producen resultados diferentes
- Algunos métodos son rápidos y buenos, otros requieren tiempo y esfuerzo
Terminología básica
| Término | Analogía cotidiana | Definición técnica |
|---|---|---|
| Datos | Objetos | El soporte de la información; son símbolos que describen las cosas objetivas |
| Elemento de datos | Objeto individual | La unidad básica de los datos |
| Estructura de datos | Forma de organizar los objetos | Una colección de una o más relaciones específicas entre elementos de datos |
| Algoritmo | Pasos para hacer algo | Instrucciones claras para resolver problemas, completadas en un tiempo finito |
Estructuras de datos comunes
- Pila (Stack):Una pila es un tipo especial de lista lineal; solo permite operaciones de inserción y eliminación de nodos de datos en un extremo fijo de la lista.
- Cola (Queue):La cola es similar a la pila, también es una lista lineal especial. A diferencia de la pila, la cola solo permite operaciones de inserción en un extremo de la lista y operaciones de eliminación en el otro extremo.
- Arreglo (Array):Un arreglo es un tipo de dato agregado; es una colección de varias variables del mismo tipo organizadas ordenadamente.
- Lista enlazada (Linked List):Una lista enlazada es una estructura de datos donde los elementos se almacenan mediante una estructura de almacenamiento encadenado; esta estructura de almacenamiento tiene la característica de no ser físicamente contigua.
- Árbol (Tree):El árbol es una estructura no lineal típica; es un conjunto finito K que incluye 2 nodos.
- Grafo (Graph):El grafo es otra estructura de datos no lineal. En la estructura de grafo, los nodos de datos generalmente se denominan vértices, y las aristas son pares ordenados de vértices.
- Montículo (Heap):El montículo es un tipo especial de estructura de datos arbórea; generalmente, los montículos que se discuten son montículos binarios.
- Tabla hash (Hash table):La tabla hash se origina en la función hash (Hash function); su idea es que si en la estructura existe un registro cuya clave es igual a T, entonces dicho registro seguramente se puede encontrar en la posición de almacenamiento F(T). De esta manera, se puede obtener el registro buscado directamente sin realizar operaciones de comparación.
Algoritmos comunes
El contenido de estudio de las estructuras de datos es cómo organizar los datos según una determinada estructura lógica y elegir un método adecuado de representación de almacenamiento para guardar los datos organizados lógicamente en la memoria de la computadora. El propósito del estudio de los algoritmos es procesar los datos de manera más eficiente y mejorar la eficiencia de las operaciones con los datos. Las operaciones de datos se definen sobre la estructura lógica de los datos, pero la implementación concreta de las operaciones debe realizarse sobre la estructura de almacenamiento. En general, existen las siguientes operaciones comunes:
- Búsqueda:La búsqueda consiste en encontrar nodos que cumplan ciertas condiciones en la estructura de datos. Generalmente, se da el valor de un campo y se busca el nodo que tenga ese valor de campo.
- Inserción:Añadir nuevos nodos a la estructura de datos.
- Eliminación:Quitar el nodo especificado de la estructura de datos.
- Actualización:Cambiar el valor de uno o más campos de un nodo especificado.
- Ordenamiento:Reordenar los nodos según un orden especificado. Por ejemplo, ascendente o descendente.
Referencias
Hello algoritmo:https://github.com/krahets/hello-algo
Implementación de algoritmos en Python:https://github.com/TheAlgorithms/Python。
Play-with-Algorithms: https://github.com/liuyubobobo/Play-with-Algorithms。
Otras ampliaciones