Usos prácticos de diferentes estructuras de datos [cerrado]

102

Se habla mucho sobre estructuras de datos, pero no puedo encontrar una lista simple de estructuras de datos y su uso práctico por ahí. Estoy tratando de estudiar para una entrevista y creo que esto me ayudaría, junto con muchos otros. Estoy buscando algo como esto:

Estructura de datos - Ejemplo / Usado para

Tabla hash: búsqueda rápida de datos ... luego dé un ejemplo

Matriz - ...

Árbol binario - ...

Si hay un recurso como este en alguna parte, hágamelo saber.

¡Gracias!

EDITAR: Me refiero a que wikipedia es buena y todo, pero en la mayoría de las páginas no enumeran los usos prácticos. Estoy buscando algo más que eso.

Joel
fuente

Respuestas:

96

Encontré la lista en una pregunta similar, anteriormente en StackOverflow:

Tabla hash - utilizada para búsqueda rápida de datos - tabla de símbolos para compiladores, indexación de bases de datos, cachés, representación de datos únicos.

Trie: diccionario, como el que se encuentra en un teléfono móvil para autocompletar y revisar la ortografía.

Árbol de sufijos: búsquedas rápidas de texto completo utilizadas en la mayoría de los procesadores de texto.

Pila: operación de deshacer / rehacer en procesadores de texto, evaluación de expresiones y análisis sintáctico, muchas máquinas virtuales como JVM están orientadas a pilas.

Colas - Investigación de transporte y operaciones donde se almacenan y mantienen varias entidades para ser procesadas más tarde, es decir, la cola realiza la función de un búfer.

Colas de prioridad: programación de procesos en el kernel

Árboles: analizadores, sistema de archivos

Árbol de radix - tabla de enrutamiento IP

Árbol BSP - Gráficos 3D por computadora

Gráficos: conexiones / relaciones en sitios de redes sociales, enrutamiento, redes de comunicación, organización de datos, etc.

Heap: asignación de memoria dinámica en lisp

Esta es la respuesta publicada originalmente por RV Pradeep

Algunos otros enlaces menos útiles:

Las aplicaciones solo se enumeran para algunas estructuras de datos

No enfocado en la aplicación, por buen resumen y relevante

MXMLLN
fuente
1
su primer enlace está roto
Dan Beaulieu
Gracias, @DanBeaulieu. Eliminé el enlace muerto.
MXMLLN
1
Muy buen resumen. Probablemente la lista de usos nunca termina, pero uno entiende el punto.
Nick L.27 de
1
¿Deshacer / rehacer realmente sería una pila? Si deshacer apareció en la parte superior de la pila, no podrá rehacer.
Tony L.
5
@TonyL. Sé que esta es una pregunta anterior, pero creo que se usan 2 pilas o Deshacer / Rehacer. Cuando deshaces una acción, se extrae de la pila de acciones y se coloca en la pila de rehacer. Si lo rehace, lo saca de la pila de rehacer y lo coloca en la pila de acciones. Puede que tenga la terminología incorrecta, pero debería haber ejemplos por ahí.
Rick Henderson
14

Estoy en el mismo barco que tú. Necesito estudiar para entrevistas técnicas, pero memorizar una lista no es realmente útil. Si tiene de 3 a 4 horas libres y desea hacer una inmersión más profunda, le recomiendo que consulte

mycodeschool
He buscado en Coursera y otros recursos como blogs y libros de texto, pero los encuentro o no lo suficientemente completos o en el otro extremo del espectro, demasiado densos con terminologías de ciencias de la computación prerrequisito.

El tipo del video tiene un montón de conferencias sobre estructuras de datos. No te preocupes por los dibujos tontos o el ligero acento en absoluto. Debe comprender no solo qué estructura de datos seleccionar, sino algunos otros puntos a considerar cuando la gente piensa en estructuras de datos:

  • pros y contras de las estructuras de datos comunes
  • por qué existe cada estructura de datos
  • cómo funciona realmente en la memoria
  • preguntas / ejercicios específicos y decidir qué estructura usar para una máxima eficiencia
  • explicación lúcida del Big 0

También publiqué notas en github si estás interesado.

the_answer_is_xyz
fuente
7

Según tengo entendido, la estructura de datos es cualquier dato que reside en la memoria de cualquier sistema electrónico que se puede administrar de manera eficiente. Muchas veces es un juego de memoria o una accesibilidad más rápida a los datos. En términos de memoria, nuevamente, hay compensaciones hechas con la administración de datos en función del costo para la empresa de ese producto final. Administrado de manera eficiente nos dice cuál es la mejor manera de acceder a los datos en función del requisito principal del producto final. Esta es una explicación de muy alto nivel, pero las estructuras de datos son temas muy amplios. La mayoría de los entrevistadores se sumergen en estructuras de datos que pueden permitirse discutir en las entrevistas en función del tiempo del que disponen, que son listas vinculadas y temas relacionados.

Ahora, estos tipos de datos se pueden dividir en primitivos, abstractos, compuestos, según la forma en que se construyen y acceden lógicamente.

  • Las estructuras de datos primitivas son bloques de construcción básicos para todas las estructuras de datos, tienen una memoria continua para ellas: boolean, char, int, float, double, string.
  • Las estructuras de datos compuestos son estructuras de datos que se componen de más de un tipo de datos primitivo: clase, estructura, unión, matriz / registro.
  • Los tipos de datos abstractos son tipos de datos compuestos que tienen una forma de acceder a ellos de manera eficiente, lo que se denomina algoritmo. Dependiendo de la forma en que se acceda a los datos, las estructuras de datos se dividen en tipos de datos lineales y no lineales. Las listas, pilas, colas, etc. vinculadas son tipos de datos lineales. montones, árboles binarios y tablas hash, etc. son tipos de datos no lineales.

Espero que esto te ayude a sumergirte.

JavaUSer
fuente
6

El excelente libro " Algorithm Design Manual" de Skienna contiene un enorme depósito de algoritmos y estructura de datos.

Para toneladas de problemas, las estructuras de datos y el algoritmo se describen, comparan y discuten el uso práctico. El autor también proporciona referencias a implementaciones y artículos de investigación originales.

El libro es excelente para tenerlo en su escritorio si busca la mejor estructura de datos para resolver su problema. También es muy útil para la preparación de entrevistas.

Otro gran recurso es el Diccionario NIST de estructuras y algoritmos de datos .

dmeister
fuente
4

Pocas aplicaciones más prácticas de estructuras de datos

Árboles rojo-negro (se usan cuando hay inserciones / eliminaciones frecuentes y pocas búsquedas) - Agrupación de K-mean usando árbol rojo negro, bases de datos, base de datos simple, búsqueda de palabras dentro de diccionarios, búsqueda en la web

Árboles AVL (más búsqueda y menos inserción / eliminación): análisis de datos y minería de datos y las aplicaciones que implican más búsquedas

Min montón: algoritmos de agrupación

Aravind Krishnakumar
fuente
3

Cualquier clasificación de varias estructuras de datos estará, al menos parcialmente, ligada al contexto del problema. Sería útil aprender a analizar el rendimiento espacial y temporal de los algoritmos. Normalmente, se utiliza la "notación O grande", por ejemplo, la búsqueda binaria está en tiempo O (log n), lo que significa que el tiempo para buscar un elemento es el registro (en base 2, implícitamente) del número de elementos. De manera intuitiva, dado que cada paso descarta la mitad de los datos restantes como irrelevantes, duplicar el número de elementos aumentará el tiempo en 1 paso. (La búsqueda binaria se escala bastante bien.) El rendimiento espacial se refiere a cómo crece la cantidad de memoria para conjuntos de datos más grandes. Además, tenga en cuenta que la notación O grande ignora los factores constantes: para conjuntos de datos más pequeños, un algoritmo O (n ^ 2) aún puede ser más rápido que un algoritmo O (n * log n) que tiene un factor constante más alto.

Además del tiempo y el espacio, otras características incluyen si una estructura de datos está ordenada (los árboles y skiplists están ordenados, las tablas hash no), persistencia (los árboles binarios pueden reutilizar punteros de versiones anteriores, mientras que las tablas hash se modifican en su lugar), etc.

Si bien necesitará aprender el comportamiento de varias estructuras de datos para poder compararlas, una forma de desarrollar una idea de por qué difieren en el rendimiento es estudiar de cerca algunas. Sugeriría comparar listas enlazadas individualmente, árboles de búsqueda binarios y listas de omisión , todos los cuales son relativamente simples, pero tienen características muy diferentes. Piense en cuánto trabajo se necesita para encontrar un valor, agregar un nuevo valor, encontrar todos los valores en orden, etc.

Hay varios textos sobre el análisis del rendimiento de la estructura de datos / algoritmos que la gente recomienda, pero lo que realmente hizo que tuvieran sentido para mí fue aprender OCaml. Lidiar con estructuras de datos complejas es el punto fuerte de ML, y su comportamiento es mucho más claro cuando puede evitar los punteros y la gestión de la memoria como en C. (Sin embargo, aprender OCaml solo para comprender las estructuras de datos es casi seguro que el camino más largo. :))

bicicleta silenciosa
fuente