¿Por qué los temas ‘estructura de datos’ y ‘algoritmo’ siempre están conectados? ¿Hay un curso o libro que solo se ocupe de la estructura de datos?

Una respuesta a la primera pregunta:

Hay un libro, llamado Algorithms + Data Structures = Programs, de Niklaus Wirth, publicado por primera vez en 1975, actualizado y reimpreso en 1985, página en ethoberon.ethz.ch. Acabo de revisar brevemente esta versión antes de escribir esta respuesta, ahora parece algo anticuada debido al uso del propio lenguaje de programación de Wirth, Oberon, para los ejemplos. Sin embargo, creo que el título captura la relación fundamental entre algoritmos y estructuras de datos y programas.

Un algoritmo es un procedimiento paso a paso para realizar un cálculo. Véase, por ejemplo, Introducción a los algoritmos de Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest y Clifford Stein.

Típicamente, el cálculo realizado por el algoritmo operará sobre datos, y las estructuras de datos son formas particulares de organizar los datos en la computadora, desde una simple lista hasta una base de datos relacional.

Entonces, los temas “estructura de datos” y “algoritmo” siempre están conectados de alguna manera.

Una respuesta a la segunda pregunta:

No en realidad no.

Dado que tiene algoritmos que manipulan las estructuras de datos, la mayoría de los libros que tratan con estructuras de datos necesariamente contienen algoritmos. Por ejemplo:

  • Estructuras de datos en C: Noel Kalicharan: 9781438253275: Amazon.com: Libros
  • Estructuras de datos y algoritmos: Alfred V. Aho, Jeffrey D. Ullman, John E. Hopcroft: 9780201000238: Amazon.com: Libros
  • Estructuras de datos avanzadas: Peter Brass: 9780521880374: Amazon.com: Libros

Para un curso, pruebe Advanced Data Structures, parte de los Materiales del curso en línea en OpenCourseWare del MIT.

Creo resumir la mayoría de las otras respuestas: DS es el qué y Algo es el cómo. El qué (es decir, ¿qué es esto?) Solo te lleva tan lejos. El cómo (es decir, ¿cómo uso esto?) Te lleva al lugar donde realmente se vuelve útil.

Piénselo de esta manera: si alguien solo aprende “qué” es un automóvil y “qué” necesita moverse, entonces probablemente no pueda hacerlo. Si alguien solo aprende “cómo” conducir ese automóvil, entonces solo puede ir tan lejos como lo permita el intervalo actual de combustible / servicio; para llegar más lejos, necesitaría un poco más de conocimiento sobre qué (s) del automóvil.

Lo mismo ocurre con la programación: solo conocer las estructuras de datos, bastante inútil ya que no sabes cómo usarlas. Solo conocer algún algoritmo (digamos una ordenación rápida) pero no conocer una matriz de una lista vinculada significa que su algoritmo podría funcionar extremadamente lento (incluso peor que una clasificación de burbuja). No importa que algunos algoritmos estén realmente vinculados a estructuras de datos específicas (y a veces incluso al revés), por lo que conocer uno REQUIERE que conozca al otro.

En informática, intentamos resolver problemas existentes y trascender al siguiente nivel.

Una vez que obtenemos la solución a nuestro problema, y ​​si queremos presentar esa solución al mundo, presentamos nuestra solución paso a paso (lo que llamamos algoritmo).

Mientras pensamos en la solución, reflexionamos e intentamos dividir el problema en sus partes más pequeñas, si es posible. Para resolver estas partes más pequeñas, diseñamos construcciones y estructuras que nos ayudan a diseñar la solución de una manera fácil de seguir, sistemática y eficiente (que es donde las estructuras de datos entran en escena).

Entonces, si conoce las construcciones y estructuras existentes, podrá aplicarlas y resolver problemas más grandes. Es casi como, cómo aprendemos cualquier idioma humano, aprendes los alfabetos, luego aprendes algunas palabras y comienzas a notar las vocales y los sonidos, así que cuando te enfrentas a una palabra totalmente nueva y quieres adivinar la ortografía de esa palabra, usas tus aprendizajes anteriores para adivinar su ortografía, eventualmente te conviertes en el maestro de ese idioma y comienzas a escribir respuestas en Quora 🙂

Entonces, creo que las estructuras de datos y los algoritmos van de la mano. Sin embargo, siempre puedes encontrar libros que se centren solo en DS o Algos.

Lo más probable es que estén conectados porque no están muy interesantes solo. Es interesante hablar sobre colecciones de datos utilizando el término genérico ‘colección’ solo por un tiempo prolongado. Eventualmente, deberá comenzar a hablar de algo más que de qué son los datos (su estructura), aportando detalles de cómo se manipulan (algoritmos). Por ejemplo, no puede hablar sobre qué tan rápido podría encontrar el número de teléfono de los padres de un niño en un directorio escolar si no sabía cómo se organizó la información. No tendría idea de cómo agregar nuevos hijos, padres o números de teléfono. No sabrías cómo ordenar o por qué ordenar.

La razón por la cual las estructuras de datos particulares son útiles es porque permiten el desarrollo de algoritmos especializados para leer / manipular la estructura de datos de una manera óptima para un problema dado. Nadie usaría una lista vinculada para un mapeo relacional, y nadie usaría una tabla hash para mantener una lista ordenada con capacidad de lectura / escritura, porque los algoritmos para realizar estas operaciones son mucho más eficientes en otras estructuras de datos.

Al igual que preguntar por qué los números siempre vienen con operadores y por qué tenemos que aprender palabras y gramática juntos.
Son una pareja perfecta, sus vidas pertenecen a la otra. Encontraría que ningún algoritmo funciona sin estructura de datos, y que ninguna estructura de datos fue inventada para no ser utilizada por un conjunto particular de algoritmos.