¿Por qué es importante almacenar y organizar datos de manera eficiente dentro de estructuras específicas al programar?

Tienes 2 preguntas en una:

  1. ¿Por qué son importantes las estructuras de datos?
  2. ¿Planeo con anticipación todos los cálculos al programar, utilizando las estructuras de datos correctas todo el tiempo?

Pues resulta que sabes el número 1 de los primeros cursos de informática. Algoritmos + Estructuras de datos = Programas.

Pero eso no es suficiente. La mayoría de los cursos de informática suponen que conoce todos los requisitos de antemano, pero la mayoría de las veces, no.

Lo que significa que usar buenos algoritmos y buenas estructuras de datos es casi imposible, ya que pronto se dará cuenta de que no puede ser óptimo para todas las operaciones requeridas, o al menos, es demasiado difícil.

Por ejemplo, la mayoría de las veces los desarrolladores optimizan manualmente cada diseño y cada pieza de código, lo que hace que sea muy difícil distinguir los requisitos del diseño. Incluso algunos libros confunden ambos: la ingeniería de software orientada a objetos de Ivar Jacobson es uno de los peores delincuentes.

No solo eso, sino que todas las decisiones de diseño de los desarrolladores están equivocadas, y dado que todas están mezcladas con los requisitos no escritos en una gran bola de lodo, resulta imposible deshacerlas, y esa es la verdadera razón por la que la mayoría de los proyectos de software fallar.

Entonces, sí, las estructuras de datos son importantes, pero conocer sus requisitos, escribirlos, escribir todas las decisiones de diseño, eso es aún más importante.

Esa es una muy buena pregunta, ya que elegir la estructura de datos correcta suele ser una de las habilidades básicas que debe tener un SWE.

Depende de cómo se vean los datos y cómo desea procesarlos … por ejemplo, con qué frecuencia inserta, busca, elimina, itera, … y así sucesivamente.

Además, una comprensión básica de cada estructura de datos “Al menos en su lenguaje de programación” le dará la oportunidad de saber cuándo usar un DS específico al programar.

Por ejemplo, si tiene un conjunto de objetos que podrían identificarse utilizando una clave, entonces en Java podría utilizar un HashMap o HashTable que permita la búsqueda rápida de sus datos utilizando la clave única que identifica cada objeto de sus datos.

Cosas clave que debe saber sobre cada DS:

  • Su implementación interna y cómo funciona -> Esto le permite identificar las ventajas y desventajas de usarlo
  • ¿Está sincronizado?
  • ¿Debo usar una versión sincronizada del DS o no necesito que se sincronice?
  • Si aumenta el tamaño de los datos, ¿esto afecta drásticamente el rendimiento?
  • Dado el tamaño de entrada estimado, ¿buscar sus datos en la forma en que los almacena es rápido o debería pensar en una mejor manera?
  • ¿Desea que sus datos se almacenen de forma ordenada o no?

Estas son las cosas que me vinieron a la mente cuando vi tu pregunta. Espero que te sea útil.

En su mayor parte, es para que los cálculos no tarden mucho tiempo, lo que los hace poco prácticos.

Considere algo como un motor de búsqueda. Cuando envía una consulta, devuelve resultados en ~ 0.2 segundos. Si tuviera que escanear a través del contenido de toda la Web en ese momento, no hay forma de que funcione tan rápido. Por el contrario, el contenido de la Web se procesa previamente y los datos se organizan de manera específica para que el motor de búsqueda pueda responder a las consultas de búsqueda tan rápido. Solo se examina una fracción minúscula de los datos de la web cada vez que se responde una consulta.

Incluso en sistemas de menor escala, es importante cómo se estructuran los datos. En general, cuando hay cálculos que deben buscar ciertos datos (por ejemplo, “¿cuáles son los productos comprados por el usuario con esta identificación de usuario?” En una aplicación web), estructurar los datos para que puedan ser fácilmente encontrados puede resultar en una enorme acelerar. No querrá tener que buscar entre todos sus usuarios para encontrar un usuario específico; ese enfoque no se adapta bien cuando tiene muchos usuarios.

Permítanme presentar mi respuesta con la pregunta “¿por qué es importante para nosotros tener nombres como individuos? ¿Para lugares? ”Cuando resumimos nuestros problemas de la vida real en cálculos, todavía nombramos y hacemos referencia a entidades con sus identificadores (en el contexto del programa) y ubicaciones (en la memoria de la máquina).