¿Cuáles son las diferencias entre las estructuras de datos y los algoritmos?

Los algoritmos son como verbos y las estructuras de datos son como sustantivos . Un algoritmo es solo un método para hacer algo en una computadora; Una estructura de datos es un diseño para la memoria que representa algún tipo de datos.

Realmente no puedes escribir nada sin verbos y sustantivos. Por lo tanto, preguntar cuál es “obligatorio” es una tontería: ambos son vitales .

Además, ¡realmente no puedes separar los dos! Las estructuras de datos solo son interesantes debido a los algoritmos que permiten: cuando decimos que una tabla hash tiene inserción O (1), lo que realmente queremos decir es que hay un algoritmo O (1) para insertar algo en una tabla hash. Por otro lado, la mayoría de los algoritmos están inextricablemente vinculados a alguna estructura de datos: la ordenación del montón solo funciona porque tienes un montón, ¡e incluso tiene “montón” en el nombre!

Si desea almacenar miles de palabras en inglés junto con sus significados de una manera que luego pueda buscarlas cuando lo necesite, puede hacerlo de varias maneras. Considere dos:

  1. Escríbelos en cualquier orden.
  2. Escríbelos alfabéticamente.

Puede ver cómo es ventajoso hacerlo como 2. No es sorprendente, así es como se organizan los diccionarios. Por lo tanto, un diccionario es una estructura de datos : tiene datos Y una estructura especialmente adecuada para realizar alguna acción sobre esos datos (en este caso, buscar palabras).

Ahora, una vez que tienes el diccionario, ¿cómo buscas una palabra? Posiblemente así:

  1. Abra el diccionario aproximadamente en la página donde cree que sería su palabra.
  2. Voltee unas pocas (o tal vez muchas) páginas hacia adelante o hacia atrás dependiendo de dónde haya aterrizado en el paso 1.
  3. Escanee la página para encontrar su palabra.
  4. Lea la entrada al lado de la palabra.

Esta secuencia de acciones que realiza para buscar una palabra es un algoritmo : una descripción general de cómo hacer algo (en este caso, buscar palabras), generalmente con los datos de su estructura de datos. Este algoritmo (llamémoslo BUSCAR) no necesita tener los 4 pasos exactos que enumeré anteriormente. Podría ser cualquier cosa siempre que haya una secuencia de pasos que lo lleven sin ambigüedad al resultado deseado. Porque ese es el propósito principal de los algoritmos: hacer que el conocimiento procesable sea portátil. Ahora puede compilar su propio diccionario de palabras de cualquier idioma y enviármelo. Si lo compiló alfabéticamente y conozco el orden alfabético para ese idioma (necesario para el paso 1 del algoritmo), puedo usar su diccionario para buscar palabras todo el día sin su ayuda.

Por lo tanto, las estructuras de datos y los algoritmos trabajan juntos para permitirle hacer cosas con sus datos. La estructura de datos es donde están los datos estructurados , el algoritmo es cómo lo hace con lo que sea que quiera hacer. Tenga en cuenta que el diseño del algoritmo se guía por la estructura de datos en la que trabajará. El algoritmo solo puede tener acciones autorizadas por la estructura de datos sobre la que opera. El paso 1 de nuestro algoritmo LOOKUP funciona solo porque el diccionario está ordenado alfabéticamente; si no fuera así, no sabrías dónde abrirlo. Tendría que revisarlo página por página para buscar una palabra. De hecho, este también es un algoritmo (búsqueda de fuerza bruta) pero no es muy bueno, ¿verdad? El hecho de que nuestra estructura de datos tenga, bueno, una estructura nos ayuda a usar un algoritmo mucho más rápido (BUSCAR) para buscar una palabra.

Ahora que he mencionado la velocidad, puede ser interesante pensar en cómo podemos hacer que nuestro algoritmo LOOKUP funcione más rápido (ya que eso es lo que casi siempre quieres). Creo que ahora puedes ver que hay dos cosas que podríamos ajustar para ganar velocidad: el algoritmo en sí, así como la estructura de datos. Mira el paso 1 de nuevo. ¿Se puede hacer esto más rápido? Sí. La letra S tiene la mayoría de las palabras, seguida de P, C, D, M, etc. Si tiene alguna idea del número relativo de palabras por alfabeto, puede adivinar mejor dónde abrir un diccionario. Esto a su vez hará que el paso 2 sea más rápido (en promedio) porque si aterrizas cerca de una palabra objetivo con mayor precisión, debes pasar menos páginas para corregirla más adelante. Del mismo modo, el paso 3 puede ser más rápido si usa las palabras guía en el margen superior de cada página.

La otra forma es modificar la estructura de datos en sí. Probablemente hayas visto diccionarios como este:


Las muescas o pestañas le permiten abrir inmediatamente el diccionario en el área general de una carta. Esto hace que el paso 1 de nuestro algoritmo sea más rápido sin que tengamos que modificar explícitamente el algoritmo. En esencia, la idea básica es informar mejor el algoritmo o la estructura de datos para agilizar toda la operación.

Un algoritmo define una secuencia de pasos y decisiones que pueden emplearse para resolver un problema. Si bien los lenguajes de computadora son, con mucho, las formas más frecuentes de expresión de algoritmos, no existe el requisito de que una computadora se use para expresar un algoritmo. Las solicitudes de patentes con frecuencia contienen algoritmos que se describen como oraciones y secuencias de pasos, e incluso las tareas simples del día a día, como las descritas como recetas en un libro de cocina, son esencialmente algoritmos.

Las estructuras de datos describen una colección de valores, a menudo con nombres e información sobre la relación jerárquica de esos valores. Una base de datos es una estructura de datos, una lista de compras es una estructura de datos y un par de coordenadas de gráfico es una estructura de datos. Las estructuras de datos existen como una colección de unidades atómicas que son específicas del dominio. Las estructuras de datos en recipientes tienen unidades atómicas como números enteros y números de coma flotante. La estructura de datos de una receta tiene unidades atómicas, como tazas y cucharaditas.

Las estructuras de datos son distintas de los algoritmos. Los algoritmos son casi exclusivamente de naturaleza procesal. Incluso los lenguajes funcionales eventualmente deben descomponerse en pasos de procedimiento para obtener resultados. Las estructuras de datos no tienen dicho componente de procedimiento, sino que tienen jerarquía, contenido y valor.

Aunque son conceptos distintos, tanto las estructuras de datos como los algoritmos son los
La mayoría de los conceptos centrales empleados en la creación de soluciones de software. Todos
los lenguajes de programación procesal soportan inherentemente el desarrollo de
algoritmos Aunque se pueden crear estructuras de datos de cualquier complejidad
En prácticamente cualquier idioma, los idiomas varían mucho en las herramientas.
proporcionan para crear y manipular estructuras de datos.

La relación importante entre los algoritmos y las estructuras de datos es que los algoritmos, con pocas excepciones, pueden lograr muy poco sin recopilar datos, almacenar resultados intermedios y entregar resultados. Dichas entradas, resultados y salidas requieren estructuras de datos o, como mínimo, una forma de identificar valores atómicos específicos. La estructura de datos más simple que requiere un algoritmo es una variable que consta de un nombre y un valor. La mayoría de los lenguajes no consideran tales formas degeneradas como verdaderas estructuras de datos porque son muy fundamentales. En lenguajes prácticos, los algoritmos manipulan estructuras de datos mucho más complejas, como “estructuras”, listas, diccionarios y una miríada de otros.

Codificación : le está diciendo a la computadora que haga algo de trabajo.

Por ejemplo, si desea agregar dos números, le está diciendo a la computadora que haga ese trabajo. Pero cómo decirle a la computadora que haga una suma. Llega el programa . Un programa contiene instrucciones sobre cómo hacer la adición a la computadora. Un programa es un archivo ejecutable simple. Los archivos ejecutables son capaces de ejecutar códigos.

A continuación, ¿Cómo escribir un programa ? ¿El inglés simple está bien? Si escribo como ‘agregar 10 y 20’, la computadora agregará. Ninguna computadora no puede entender inglés. Solo comprende 0s y 1s llamados bits. Dentro de las computadoras tenemos microprocesadores y microcontroladores que solo sabrán 0s y 1s. Para saber más acerca de cómo se usan 0s y 1s para calcular los conceptos básicos del estudio de adición de microprocesadores que está fuera de alcance aquí.

Luego, cómo escribir un programa para sumar dos números que la computadora entienda. Aquí viene los lenguajes de computadora (ensamblado / C / C ++ / Java, etc.) . Por lo tanto, escriba / codifique un Programa en cualquiera de los idiomas anteriores y déselo a la computadora.

Si conoce el lenguaje ensamblador, escriba Program en ese idioma o si conoce el lenguaje C, escríbalo en C o en cualquier lenguaje de programación que conozca. Para sumar 10 y 20, a continuación se encuentra el Programa escrito en C

  #include 
 #include 
 vacío principal() {
	 int a = 10, b = 20;
	 printf ("% d", a + b);
	 getch ();
 }

Guarde el archivo en la extensión .c. Si ejecuta el programa anterior, la computadora lo entenderá, lo convertirá a 0s y 1s, calculará la suma y proporcionará el resultado.

Aquí surge una pregunta básica. ¿Por qué necesito una computadora para hacer la suma? Puedo hacer la suma mejor que la computadora. Si es así, agregue 99999999 + 99999999. Puede agregar pero tomará tiempo calcularlo, pero si pasa los dos valores anteriores, su programa de adición de computadora le informará los resultados en menos de un segundo.

Entonces, codificar significa que está instruyendo a la computadora a través de un programa que utiliza un lenguaje que la computadora y entiende que hace el trabajo complejo fácilmente.


Llegando a las estructuras de datos

Este puede ser un término complejo para muchos principiantes y yo también me sentí complejo hasta que lo entiendo mejor.

Antes de pasar a las estructuras de datos, debemos saber sobre la memoria de la computadora .

¿Cómo se ve la memoria de la computadora? Es el disco que contiene espacios . Cada uno tendrá una dirección .

Para explicar más claramente, uso una analogía. Asuma la memoria de la computadora como un hotel que tiene muchos pisos, habitaciones como espacios y dirección como número de habitación .

Si un grupo de diez personas (todas pertenecen a la misma familia) viene al hotel y reserva 10 habitaciones, ¿cómo va a asignar habitaciones para ellas? ¿Asignará 10 habitaciones secuencialmente o una habitación por piso? En el primer caso, la comunicación entre ellos será más fácil ya que las habitaciones se asignan secuencialmente, pero en el último caso es difícil ya que están en pisos diferentes. ¿Cuál es eficiente? Obviamente, el primer caso es eficiente .

De manera similar, en la computadora, si desea asignar espacio para que los datos se almacenen de manera eficiente en la memoria, se utilizan estructuras de datos. Entonces, si tiene un grupo de 10 datos (todos pertenecen a enteros / caracteres / flotante …), la estructura de datos de matriz se puede usar para almacenar los datos en la memoria, ya que la matriz almacena los datos secuencialmente. Del mismo modo, se utilizan otras estructuras de datos según el requisito.

Entonces, básicamente las estructuras de datos significan una forma de almacenar eficientemente los datos en la memoria de la computadora.


Algoritmos

Es el procedimiento paso a paso para un programa, de modo que el programa producirá el resultado deseado.

Por ejemplo, si desea agregar dos números 10 y 20, entonces el algoritmo se verá como

Paso 1 : declare dos variables a y b y asigne 10 y 20 cada una

Paso 2 : agregue ayb y muestre

Mire arriba en la sección de codificación. Para los programas 10 y 20 de código C anteriores, este es el algoritmo. El algoritmo debe estar escrito en inglés simple que indique lo que debe hacerse en cada paso mientras se codifica.

Desde el punto de vista de estructuras de datos, por ejemplo Array

El algoritmo de búsqueda de matriz se puede usar para buscar datos en una matriz

Algoritmo de inserción de matriz: para insertar datos en una matriz

Algoritmo de eliminación de matriz: para eliminar datos en una matriz

Del mismo modo, podemos tener muchos algoritmos para diferentes estructuras de datos


Gracias.

En un sentido superficial, uno trata sobre datos y el otro sobre procesos y parecen ortogonales.

Pero los dos están vinculados porque solo un subconjunto de estructuras de datos permitirá ciertos algoritmos. Por ejemplo, una lista vinculada de dos vías permite fácilmente una clasificación de burbujas, mientras que una lista vinculada de una vía no. Más. las estructuras de datos requieren algoritmos para mantenerlos y navegarlos. Por ejemplo, una estructura de árbol requiere algoritmos para actualizarla y leerla, y habrá una selección limitada de algoritmos para hacerlo.

Quizás la mejor manera de pensar en esto es que las estructuras de datos simplemente conservan la información (como el pedido) mientras los algoritmos crean esa información y la explotan. Por lo tanto, la estructura y el algoritmo están inextricablemente relacionados. De hecho, muchos algoritmos requieren información sobre datos existentes (preservados por la estructura) para crear información similar sobre datos nuevos. Por lo tanto, un árbol conserva el orden y los algoritmos utilizados para actualizar el árbol requieren que la información de pedido preservada cree el orden en los nuevos datos.

Considéralo de esta manera.

Eres un constructor y tienes que construir un municipio a las afueras de una ciudad.

Ya cumplió con todos los requisitos previos, ahora es el momento de planificar los apartamentos y villas.

Para maximizar sus beneficios, tendrá que encontrar una manera de construir todo tipo de residencias, es decir, apartamentos, villas, condominios, dúplex .

También deberá proporcionar servicios como parques, parques infantiles, hospitales, teatros, etc. a los residentes (a menos que no sea tan bueno como constructor).

Entonces, para ser un buen constructor, debes tener en cuenta:

  1. Qué tipo de residencias estás criando y cuántas.
  2. Y las comodidades que brindas a los residentes, y cómo lo haces.

Mi amigo, reemplace el constructor con codificador, las residencias con estructuras de datos y las comodidades con algoritmos.

Con suerte, ahora sabes la diferencia.

Las estructuras de datos son como apartamentos y villas. Debe comprender la importancia de cada uno de ellos y planificar su código en consecuencia.

Los algoritmos son como las comodidades, tendrá que usarlos y dejar que sus estructuras de datos los usen de manera óptima para que pueda llegar a la mejor solución.

Una estructura de datos es la forma en que define un determinado objeto en un lenguaje de programa. Si define una estructura de datos para un contacto en una lista de contactos, tendría miembros de esa estructura de datos como nombre, compañía, dirección, número de teléfono, etc. La estructura de datos se define según lo que necesita el programa para realizar un seguimiento .
Un algoritmo es una forma específica de programar una tarea para que funcione en los datos que tiene. Por ejemplo, hay muchos algoritmos para ordenar datos en una base de datos de información. Un algoritmo es una forma específica en que el programador escribe un programa para procesar la información. Los algoritmos son únicos en la forma en que se ejecuta el programa y se pueden medir por su eficiencia en el procesamiento de los datos. Las métricas se evalúan según la cantidad de instrucciones informáticas que se necesitan para calcular los resultados.

Una estructura de datos es la identificación de cómo su programa no tiene errores, tráfico y errores. Estructura de datos si es el tipo de variable utilizada en la programación de computadoras para almacenar valores. Por ejemplo, el puntero puede ser una estructura de datos. La pila hecha de puntero también puede considerarse como una estructura de datos. Otras estructuras de datos incluyen, enteros, cadenas, decimales, etc.

Un algoritmo es una forma matemática de identificar cómo parece ser de una manera de cálculo lineal y no lineal. Algoritmo es paso o pasos de secuencias para resolver un problema. Aunque la palabra algoritmo se usa predominantemente en informática, se puede usar en cualquier campo.

en la conclusión:

La estructura de datos es el flujo de datos identificados en la velocidad.
y
algoritmo es el cálculo de las igualdades y diferencias.

PROGRAMA = ESTRUCTURAS DE DATOS + OPERACIONES / ALGORITMOS

La analogía de la cocina siempre funciona:

  • Estructura de datos → olla
  • Datos → ingredientes
  • Algoritmo → receta

Pon tus ingredientes en la olla de acuerdo con la receta .

Ponga sus datos en la estructura de datos de acuerdo con el algoritmo .

Encontré esta pregunta mientras respondía otra pregunta relacionada, así que también agrego mi respuesta aquí.

Los algoritmos y las estructuras de datos son esencialmente e inherentemente complementarios.

Casi todos los “Algoritmos” usan algunos tipos de “Estructuras de datos” (puede ser tan simple como una matriz o incluso más simple o puede ser algo complejo como árboles rojo-negros o algunas estructuras aún más complejas)
No sirve de nada estudiar “Estructuras de datos” sin saber cómo procesar los datos con “Algoritmos” (de hecho, los algoritmos definen algunas estructuras para operar en ellas como árboles AVL)

Otra forma “vaga” de decir esto es usar la analogía:
Los algoritmos son como operaciones (suma, resta o multiplicación), mientras que las estructuras de datos son como operandos (enteros o números reales o números complejos)
Necesitamos tanto operaciones (algoritmos) como operandos (estructuras de datos)

Mark Chen escribe (en dos comentarios a dos respuestas) que es un estudiante de electrónica y le gustaría aprender más.
Hay muchos textos para aprender:
– Me gustó el nombre “Algorithms + Data Structures = Programs” de Niklaus Wirth
– Otro buen libro es “Introducción a los algoritmos” de Cormen / Leiserson / Rivest / Stein
– He usado una edición muy antigua de “Estructuras de datos y algoritmos” de Kruse / Leung / Tondo
– También he usado “Estructuras de datos y análisis de algoritmos en C” por Mark Allen Weiss
– Me he encontrado con muchos libros para aprender C, que generalmente tienen algunas secciones sobre algoritmos simples y estructuras de datos como búsqueda binaria y listas vinculadas

Usaré un auto como analogía.

El auto es tu estructura de datos.

Cómo conducir un automóvil es su algoritmo.

Entonces, al igual que un automóvil es un vehículo, una estructura de datos es un vehículo en el que almacena y / u organiza datos.

Un algoritmo es un proceso / método que utiliza para procesar los datos que están en la estructura de datos.

Una estructura de datos es una especie de contenedor de datos .

Un algoritmo es una secuencia de acciones utilizadas para construir un contenedor de datos en sí mismo, además de construir cada programa de computadora que tenga muchos contenedores de datos.

Los datos son información en bruto que debe colocarse en alguna estructura (las estructuras más pequeñas son tipos de datos primitivos) y un algoritmo le indicará al usuario cómo procesar datos y obtener información procesada.

En resumen, las estructuras de datos y el algoritmo son dos cosas diferentes, pero siempre van de la mano . No puedo pensar en un solo algoritmo que no implemente una estructura de datos o haga uso de una estructura de datos.

EDITAR: Ejemplo para aclarar más

Tomemos un ejemplo del programa hello world en lenguaje C:

  / * Programa Hola Mundo * /

 #include 

 principal()
 {
     printf ("Hola mundo");
 }

La estructura de datos utilizada en este programa es String Literal (un literal de cadena regular consiste en cero o más caracteres encerrados entre comillas dobles, como en “hola”, y puede incluir secuencias de escape simples (como \ t para el carácter de tabulación) y hexadecimal y secuencias de escape Unicode – fuente MSDN)

¿Eliminar la estructura de datos y qué imprimirá este programa para usted?

El algoritmo (pseudocódigo) para este programa es solo un revestimiento:

Imprima Hello World en pantalla

NOTA: Tanto un programa como un algoritmo son secuencias de acciones. La diferencia es que un programa es una implementación de un algoritmo en cualquier lenguaje de computadora (en este caso C) mientras que el algoritmo podría escribirse en cualquier lenguaje inteligible (en este caso, inglés)

Parte de confusión: la mayoría de las personas solo consideran los tipos de datos no primitivos como estructuras de datos y dado que algunos de ellos son complejos (como listas enlazadas) y solo consideran esas secuencias de acciones como algoritmos que se ocupan de la inserción, búsqueda o recuperación de datos en esas complejas estructuras de datos. Esta consideración proviene del hecho de que la mayoría de los libros enseñan estructuras de datos y algoritmos para hacerlos considerar tales.

Ambos son. Imagínelos como mamá y papá, y el código es la descendencia. Mamá no puede tener un bebé a menos que haya un papá. Una estructura de datos es la estructura subyacente en la que los algoritmos se fusionan.
Es inseparable.

Una estructura de datos es una organización de datos que permite que las operaciones en esos datos tengan cierta complejidad de tiempo / espacio. Las estructuras de datos se construyen con algoritmos.

Un algoritmo es un conjunto de operaciones que resuelve un problema. Los algoritmos a menudo se basan en estructuras de datos para funcionar.

Las funciones de las estructuras de datos también se implementan utilizando algoritmos eficientes. No hay estructura de datos sin algoritmos y viceversa. La estructura de datos es como el oxígeno y el algoritmo es como el hidrógeno, que en conjunto pueden dar una vida hermosa a la programación informática

La Estructura de datos tiene que ver con el almacenamiento de datos para una búsqueda y eliminación eficiente, mientras que el algoritmo se ocupa del proceso a seguir para resolver problemas de manera eficiente.

Pero no se trata solo de ellos. Se completan el uno al otro. Muchos de los algoritmos de nivel superior están construidos en la parte superior de las estructuras de datos como Árboles y Gráficos e incluso los algoritmos de clasificación básicos necesitan estructuras de datos como matriz, montón, etc.

¡Uno no puede dominar los algoritmos sin conocer las estructuras de datos subyacentes y no sirve de nada dominar las estructuras de datos sin conocer los algoritmos que los usan!

Estructura de datos es un cubo de agua.

Los algoritmos son una forma de usar el agua del balde para algún propósito significativo.

Estructuras de datos: – lista vinculada, cola, pila, árbol, montones, etc., los cubos de representación de datos.

Algoritmos: kruskals, prims, sorting, djkstra, Huffman, etc. para utilizar los datos de estos cubos para realizar tareas significativas.

La estructura de datos implica la aplicación de una lista enlazada, una pila, una cola y un gráfico y un árbol binario que tiene que aplicar el algoritmo con la mínima complejidad. La estructura de datos le brinda la solución y el algoritmo le brinda la mejor solución

Una estructura de datos es como tener un automóvil, donde los algoritmos son sus características que hacen que el automóvil funcione. Cuanto mejores sean las características, más eficiente será el automóvil.

Mientras que la codificación es la forma de construir el automóvil junto con sus características.

Puede encontrar una respuesta relacionada aquí. No es para lo mismo pero puedes encontrar una buena diferencia entre estos dos.

Puede pensar en las estructuras de datos como su “utensilio de cocina” y en los algoritmos como “recetas”. Para cocinar necesitas ambos. Necesitas algo para poner tus “ingredientes” (datos) y necesitas saber qué hacer con ellos.

More Interesting

¿Hay algún modelo físico o fenómeno que permita resolver rápidamente los problemas NP-hard?

Cómo determinar si un algoritmo informático es complejo o no

¿Cuál es el mejor recurso para aprender el algoritmo KMP?

¿Cómo comenzar a escribir un motor de ajedrez en C ++? (O Java) cuál es la matemática detrás de las estrategias

¿Qué debo hacer para autoaprendizaje de ciencias de la computación con interés en inteligencia artificial y ciencias de la computación teóricas?

¿Cómo funciona el algoritmo de búsqueda de ruta de StarCraft II?

¿Qué curso de Udemy es mejor para aprender estructuras de datos si ya he aprendido los conceptos básicos (matrices, estructuras, punteros, listas enlazadas)?

¿Cómo puedo diseñar una función hash que elija aleatoriamente 16 bits de un número de 32 bits?

Cómo resolver la pregunta en la descripción a continuación

¿Podemos utilizar el algoritmo de Clasificación colectiva iterativa (ICA) de forma distributiva para procesar grandes datos?

En los términos más simples, ¿qué es un algoritmo? ¿Cual es su propósito?

¿Cuáles son las ventajas de desarrollar algoritmos de PNL frente al uso de API?

Cómo encontrar el subconjunto contiguo de suma máxima utilizando un método de divide y vencerás

Dados n puntos en un plano 2D, ¿cómo encontrarías el número máximo de puntos que se encuentran en la misma línea recta? Proporcione un algoritmo para resolver este problema.

Cómo utilizar el algoritmo Hidden Markov Model Viterbi para el etiquetado de secuencias