Entonces, ¿es una estructura de datos un algoritmo que describe cómo organizar las cosas?

Gracias por el A2A, William! Para ser sincero, nunca lo había pensado de esa manera, pero veamos ese concepto y veamos a dónde nos lleva.

Típicamente, una estructura de datos es una construcción para almacenar información de una manera que nos ayuda a realizar tareas. Un algoritmo es una serie de tareas para lograr un resultado, o nos ayuda con una tarea. Parece que un algoritmo es una estructura de datos para obtener instrucciones sobre cómo completar una tarea.

No es exactamente lo que postulamos …

Ok, nueva dirección! Veamos un caso simple y veamos si podemos extrapolar nuestra hipótesis.

La lista respaldada por matrices. Almacena elementos en una matriz contigua para acceso aleatorio (independiente del elemento). Eso podría considerarse un algoritmo … pero ¿qué pasa con otras cosas que son únicas al respecto? La Lista puede expandirse para contener nuevos elementos que se agregan (algoritmo / paso para agregar, hacer crecer la matriz). Insertar, buscar, eliminar … todos los algoritmos / pasos.

Yo diría que una estructura de datos es un grupo / colección de algoritmos en un conjunto de datos que produce un conjunto consistente de resultados.

También diría que un algoritmo es un grupo / colección de instrucciones en un conjunto de datos que produce un conjunto consistente de resultados.

Presento una conjetura diferente: los algoritmos y las estructuras de datos, como se definió anteriormente, son en realidad la misma construcción abstracta, pero tienen implementaciones concretas diferentes.

¡Espero que haya sido útil! ¡Gracias por la nueva visión!

¡Buena suerte!

PD: Después de pensar un poco más … en C #, si tiene un conjunto enumerable, puede llamar a ToList () y convertir ese seto en una lista. ¿No es ese un ‘algoritmo’ cuyo resultado es una ‘estructura de datos’? ¡Lo reflexionaré con más detalle!

En programación funcional, sí. La codificación de la iglesia proporciona una forma de representar tipos en cálculos Lambda sin tipo. Puede crear un tipo creando funciones que afectan a un programa de la misma manera que la presencia de un valor de ese tipo afectaría las cosas.

OK, eso suena bastante académico. Pero…

En Haskell, sí. A continuación, le mostramos cómo puede describir una estructura de datos de lista vinculada en Haskell:

Lista de datos a = cero | Anteponer a (Listar a)

En realidad, eso es todo lo que necesita hacer para escribir su propio módulo de Lista en Haskell (porque la coincidencia de patrones le permitirá volver a sacar los valores de la lista). Si coloca esa línea en un programa Haskell, entonces Nil y Prepend son ambas funciones. El primero le da una lista vacía, el segundo antepone un elemento a una lista existente. Todos los elementos de la lista tendrán el mismo tipo (una lista de enteros, una lista de caracteres o lo que elija). Entonces

Anteponer 1 cero

Crea una lista que contiene solo un elemento (el número 1).

Anteponer 2 (anteponer 1 cero)

Te da una lista con dos números. Si asignó esa lista a una variable llamada xs, entonces

Anteponer 3 xs

Agrega 3 al comienzo de la lista.

Como dije, eso es todo lo que necesita haber escrito para crear una lista vinculada en Haskell. La coincidencia de patrones (que no entraré aquí) te permite

  • Saca el primer elemento de una lista
  • Deseche el primer elemento y conserve el resto.
  • Tomar un elemento desde una posición específica en la lista

En realidad, solo necesitas las dos primeras opciones. Si tienes esas dos habilidades, puedes hacer lo que quieras con una lista (toma el enésimo elemento, descarta n elementos, toma los primeros n elementos, multiplica cada elemento de la lista por 3, lo que sea).

Entonces, todo lo que necesitaba era esa línea, que define la estructura de datos por las formas en que puede crearla. Es imposible crear una lista incorrecta, porque solo están disponibles las formas correctas de crearla. El módulo real de Haskell Data.List proporciona un montón de funciones convenientes para ahorrarle algo de esfuerzo, pero no fue necesario . Eso es todo solo dulces. Después de haber descrito cómo se puede hacer una lista vinculada, todo lo que Haskell necesita para permitirte trabajar con ella. Lo mismo puede hacerse simplemente para muchas estructuras de datos comunes (todo tipo de tipos de árbol, por ejemplo). Algunos tipos (por ejemplo, Conjuntos) son más difíciles de describir simplemente en Haskell, pero eso es una deficiencia en el sistema de tipos de Haskell, no en la idea general.

Por lo tanto, es posible ver las estructuras de datos como “funciones que organizan las cosas”. Es una forma muy limpia, totalmente coherente y confiable de pensar en ellos. La mayoría de los lenguajes de programación no lo hacen posible, lamentablemente.

Puedes considerarlo así.

El algoritmo : pasos a seguir para lograr un objetivo específico.
La estructura de datos : el producto, que los programadores pueden usar, para organizar los datos.

La estructura de datos en sí se crea a través del personal de algoritmos, el algoritmo es el motor más allá de la estructura de datos, por lo que su descripción puede considerarse como una descripción correcta, pero, el objetivo principal de las estructuras de datos, es almacenar datos de manera eficiente, en el forma que lo hace adecuado para tareas específicas.

Veamos un ejemplo para aclarar las cosas:

Suponga que estoy creando un sistema para aquellos que tienen diabetes, el sistema toma una lectura del porcentaje de azúcar en la sangre, y debe realizar un seguimiento de los valores mínimos y máximos durante, por ejemplo, un día.

Será costoso y lento pasar por todos los valores desde el principio hasta este momento y comparar para obtener el máximo y el mínimo, por lo que aquí se necesita una estructura de datos con algunas operaciones mágicas, ¿qué puede ser?

Una estructura de datos llamada Priority Queue en C ++, es una estructura de datos, mediante la cual puede agregarle valores, eliminar valores y realizar un seguimiento con el valor máximo o mínimo. mira, esto es exactamente lo que necesitamos.

La cola de prioridad se basa en una estructura de datos llamada montón, la estructura de datos de montón hecha simplemente de una matriz. sí, solo una matriz. Entonces, ¿cómo puede hacer un seguimiento fácil y rápido del máximo y el mínimo? la magia más allá es solo dos funciones, o debería decir dos algoritmos:

  1. Sift Down: supongamos que tenemos un montón bien organizado (en el formato esperado (el máximo o el mínimo en la parte superior)), y ahora quiero agregar un nuevo elemento, cómo colocarlo en un lugar en el que estoy garantizado para mantener las cosas bien hechas? este es el tamiz hacia abajo, sigues desplazando el nuevo elemento hacia abajo hasta que las cosas estén bien hechas.
  2. Sift Up: ¿qué pasa si eliminamos el mínimo o el máximo (según el tipo de montón) que ocupará su lugar? necesitamos elecciones, no es broma, aquí ha llegado el momento, traeremos la mejor (la más grande o la más pequeña (según el tipo de montón)) y la colocaremos en la parte superior.

alguien dirá “Oh, amigo, examinando hacia arriba y hacia abajo, qué demonios está haciendo, trabajas mucho” y yo digo, amigo, de esto se trata la estructura de datos, colocamos los datos de alguna manera, en la que solo pase a través de (log (number_of_nodes)) para hacer el cribado hacia arriba o hacia abajo [puede imaginarse que log ([math] 2 ^ {100} [/ math]) = 100 esto es increíble].

Consulte también mis respuestas y las de los demás sobre por qué debería aprender estructuras de datos y algoritmos.

La respuesta de Abdelrahman Hamdy a ¿Por qué debería aprender estructuras de datos y algoritmos?

¡Interesante pregunta! Primero tenemos que ver qué significa cada uno y luego podemos ver si podemos responder a esta pregunta.

Estructura de datos: en palabras simples, es una estructura de datos ¿verdad? ¿Qué tiene una estructura? Tiene una forma bien organizada. Entonces, una estructura de datos es un conjunto de datos bien organizado.

Ahora, cómo está organizado, hay diferentes métodos para hacerlo, y lo que usará también es un factor para organizar sus datos. Si necesita una forma específica de organizar sus datos, ¡entonces tiene una estructura de datos!

Algoritmos: un algoritmo es básicamente, algunos pasos que se deben tomar para resolver algún problema. O más técnicamente, como se define la palabra, un conjunto de reglas para resolver un problema específico.

Ahora a tu pregunta!

“Entonces, ¿es una estructura de datos un algoritmo que describe cómo organizar las cosas?”

Las estructuras de datos definitivamente necesitan una forma de organizar los datos, ¡y la acción de organizar necesita algunas reglas o instrucciones para lograr este objetivo!

Entonces, dicho esto, la estructura de datos en sí misma es un contenedor de un conjunto de datos con reglas específicas por las que están organizados. Esas reglas son los algoritmos utilizados en la estructura de datos.

Espero haberlo explicado vívidamente. Si no es así, ¡no dudes en comentar!

¡Gracias y buena suerte!

Una estructura de datos es una descripción abstracta de una estructura en la que se almacenarán los datos.

Los algoritmos se utilizan para implementar esa estructura de datos (entre otras cosas). Diferentes idiomas manejan la misma estructura de diferentes maneras.

En otras palabras, el plan para una casa no es lo mismo que las instrucciones para construirla.

Tipo de – No.

Una estructura de datos es algo con lo que funciona un algoritmo. Un algoritmo describe QUÉ se hace con algunos datos. Una estructura de datos describe CÓMO se organizan los datos. Tan relacionado pero NO.

More Interesting

¿Cuál es el algoritmo utilizado para mostrar el orden de amigos que se muestra en toda la lista de amigos en Facebook?

¿Cuál sería su selección de 20 problemas en algoritmos de clasificación (6 problemas de nivel básico, 6 problemas de nivel medio y 8 difíciles) para que resolver esos 20 le daría la máxima comprensión sobre la clasificación?

¿Por qué mi código solo pasa números pequeños y no los grandes (con respecto a subconjuntos no divisibles)?

¿Qué tan sofisticados son los algoritmos involucrados en el control de crucero en los automóviles?

¿Hay alguna manera de girar a la izquierda / derecha una matriz binaria en menos de O (n) tiempo?

Cómo obtener el número de coprimos de n bajo n

¿Cuál es la estructura de datos más simple y eficiente para representar la topología molecular?

¿Cuáles son algunos de los mejores libros sobre Estructura de datos y Algoritmo en Java para principiantes?

¿Qué algoritmo se usa para la transmisión de video?

¿Por qué es difícil realizar una búsqueda binaria en una lista vinculada?

¿Qué debo usar para reducir los atributos en mi conjunto de datos, PCA o algoritmos de selección de características?

¿De qué sirve estudiar algoritmos de clasificación y técnicas de búsqueda? Quiero decir, ¿dónde lo usamos en la programación?

Cómo maximizar la suma de las diferencias absolutas en los índices correspondientes de dos matrices sobre todas sus permutaciones posibles

Cómo traducir mis pensamientos en código

¿En qué punto una gran notación O de velocidad de aumento más rápida ignora una notación O grande de velocidad de aumento más lenta?