Utilisations pratiques de différentes structures de données [fermé]

102

On parle beaucoup de structures de données, mais je ne trouve pas de liste simple de structures de données et de leur utilisation pratique. J'essaie d'étudier pour une entrevue et je pense que cela m'aiderait, avec beaucoup d'autres. Je cherche quelque chose comme ça:

Structure de données - Exemple / Utilisé pour

Table de hachage - recherche rapide de données ... puis donnez un exemple

Tableau - ...

Arbre binaire - ...

S'il existe une ressource comme celle-ci quelque part, veuillez me le faire savoir.

Merci!

EDIT: Je veux dire que wikipedia est bon et tout, mais sur la plupart des pages, ils ne répertorient pas les utilisations pratiques. Je cherche quelque chose de plus que ça.

Joël
la source

Réponses:

96

J'ai trouvé la liste dans une question similaire, précédemment sur StackOverflow:

Table de hachage - utilisée pour la recherche rapide de données - table de symboles pour les compilateurs, indexation de base de données, caches, représentation unique des données.

Trie - dictionnaire, tel que celui trouvé sur un téléphone mobile pour la saisie semi-automatique et la vérification orthographique.

Arborescence des suffixes - recherches rapides de texte intégral utilisées dans la plupart des traitements de texte.

Pile - opération annuler \ refaire dans les traitements de texte, évaluation d'expression et analyse syntaxique, de nombreuses machines virtuelles comme la JVM sont orientées pile.

Files d'attente - Recherche de transport et d'exploitation où diverses entités sont stockées et conservées pour être traitées ultérieurement, c'est-à-dire que la file d'attente remplit la fonction de tampon.

Files d'attente prioritaires - planification des processus dans le noyau

Arbres - Analyseurs, système de fichiers

Arbre Radix - Table de routage IP

Arbre BSP - infographie 3D

Graphiques - Connexions / relations dans les sites de réseaux sociaux, routage, réseaux de communication, organisation des données, etc.

Heap - Allocation de mémoire dynamique dans lisp

C'est la réponse initialement publiée par RV Pradeep

Quelques autres liens moins utiles:

Les applications ne sont répertoriées que pour certaines structures de données

Pas axé sur l'application, par un bon résumé et pertinent

MXMLLN
la source
1
votre premier lien est rompu
Dan Beaulieu
Merci, @DanBeaulieu. J'ai supprimé le lien mort.
MXMLLN
1
Très beau résumé. La liste des usages ne se termine probablement jamais, mais on comprend le point.
Nick L.
1
Est-ce que l'annulation / refaire serait vraiment une pile? Si l'annulation sautait du haut de la pile, vous ne seriez pas en mesure de refaire.
Tony L.
5
@TonyL. Je sais que c'est une question plus ancienne, mais je crois que 2 piles sont utilisées ou Annuler / Rétablir. Lorsque vous annulez une action, elle est sortie de la pile d'actions et placée sur la pile de rétablissement. Si vous recommencez, vous le sortez de la pile de rétablissement et le poussez sur la pile d'actions. J'ai peut-être une mauvaise terminologie, mais il devrait y avoir des exemples.
Rick Henderson le
14

Je suis dans le même bateau que toi. J'ai besoin d'étudier pour des entretiens techniques, mais mémoriser une liste n'est pas vraiment utile. Si vous avez 3-4 heures à perdre et que vous voulez faire une plongée plus profonde, je vous recommande de vérifier

mycodeschool
J'ai regardé sur Coursera et d'autres ressources telles que les blogs et les manuels, mais je les trouve soit pas assez complets, soit à l'autre bout du spectre, trop denses avec des terminologies informatiques préalables.

Le mec dans la vidéo a un tas de conférences sur les structures de données. Ne vous inquiétez pas des dessins idiots, ou du léger accent du tout. Vous devez comprendre non seulement la structure de données à sélectionner, mais également d'autres points à prendre en compte lorsque les gens pensent aux structures de données:

  • avantages et inconvénients des structures de données communes
  • pourquoi chaque structure de données existe
  • comment ça marche réellement dans la mémoire
  • des questions / exercices spécifiques et décider de la structure à utiliser pour une efficacité maximale
  • Explication lucide Big 0

J'ai également posté des notes sur github si vous êtes intéressé.

the_answer_is_xyz
la source
7

Selon ma compréhension, la structure des données est toute donnée résidant dans la mémoire de tout système électronique qui peut être gérée efficacement. Il s'agit souvent d'un jeu de mémoire ou d'une accessibilité plus rapide des données. En termes de mémoire encore, il y a des compromis à faire avec la gestion des données en fonction du coût pour l'entreprise de ce produit final. Une gestion efficace nous indique comment accéder au mieux aux données en fonction de l'exigence principale du produit final. C'est une explication de très haut niveau mais les structures de données sont un vaste sujet. La plupart des enquêteurs plongent dans des structures de données dont ils peuvent se permettre de discuter dans les entretiens en fonction du temps dont ils disposent, qui sont des listes chaînées et des sujets connexes.

Maintenant, ces types de données peuvent être divisés en primitifs, abstraits, composites, en fonction de la façon dont ils sont logiquement construits et accessibles.

  • les structures de données primitives sont des blocs de construction de base pour toutes les structures de données, elles ont une mémoire continue pour elles: boolean, char, int, float, double, string.
  • les structures de données composites sont des structures de données composées de plusieurs types de données primitifs: classe, structure, union, tableau / enregistrement.
  • Les types de données abstraits sont des types de données composites qui ont un moyen d'y accéder efficacement, ce qui est appelé comme un algorithme. Selon la façon dont les données sont accédées, les structures de données sont divisées en types de données linéaires et non linéaires. Les listes liées, les piles, les files d'attente, etc. sont des types de données linéaires. les tas, les arbres binaires et les tables de hachage, etc. sont des types de données non linéaires.

J'espère que cela vous aidera à plonger.

JavaUSer
la source
6

L'excellent livre " Algorithm Design Manual" de Skienna contient un vaste référentiel d'algorithmes et de structure de données.

Pour des tonnes de problèmes, les structures de données et l'algorithme sont décrits, comparés et discutent de l'utilisation pratique. L'auteur fournit également des références aux implémentations et aux documents de recherche originaux.

Le livre est génial de l'avoir sur votre bureau si vous recherchez la meilleure structure de données pour résoudre votre problème. Il est également très utile pour la préparation des entretiens.

Une autre excellente ressource est le dictionnaire NIST des structures de données et des algorithmes .

démister
la source
4

Peu d'application plus pratique des structures de données

Arbres rouge-noir (utilisé lorsqu'il y a des insertions / suppressions fréquentes et peu de recherches) - Clustering K-mean utilisant un arbre noir rouge, bases de données, base de données simple, recherche de mots dans les dictionnaires, recherche sur le Web

Arbres AVL (plus de recherche et moins d'insertion / suppression) - Analyse de données et exploration de données et les applications qui impliquent plus de recherches

Heap min - Algorithmes de clustering

Aravind Krishnakumar
la source
3

Tout classement de diverses structures de données sera au moins partiellement lié au contexte du problème. Cela aiderait à apprendre à analyser les performances spatio-temporelles des algorithmes. Typiquement, la "notation en gros O" est utilisée, par exemple la recherche binaire est en temps O (log n), ce qui signifie que le temps de recherche d'un élément est le journal (en base 2, implicitement) du nombre d'éléments. Intuitivement, étant donné que chaque étape élimine la moitié des données restantes comme non pertinentes, doubler le nombre d'éléments augmentera le temps d'une étape. (La recherche binaire s'adapte plutôt bien.) Les performances de l'espace concernent la croissance de la quantité de mémoire pour des ensembles de données plus volumineux. Notez également que la notation big-O ignore les facteurs constants - pour les ensembles de données plus petits, un algorithme O (n ^ 2) peut toujours être plus rapide qu'un algorithme O (n * log n) qui a un facteur constant plus élevé.

Outre le temps et l'espace, d'autres caractéristiques incluent le tri d'une structure de données (les arbres et les skplists sont triés, les tables de hachage ne le sont pas), la persistance (les arbres binaires peuvent réutiliser les pointeurs d'anciennes versions, tandis que les tables de hachage sont modifiées sur place), etc.

Bien que vous ayez besoin d'apprendre le comportement de plusieurs structures de données pour pouvoir les comparer, une façon de comprendre pourquoi elles diffèrent en termes de performances consiste à en étudier de près quelques-unes. Je suggérerais de comparer des listes à liaison unique, des arbres de recherche binaires et des listes de sauts , qui sont tous relativement simples, mais ont des caractéristiques très différentes. Pensez à combien de travail il faut pour trouver une valeur, ajouter une nouvelle valeur, trouver toutes les valeurs dans l'ordre, etc.

Il existe différents textes sur l'analyse des performances des algorithmes / structures de données que les gens recommandent, mais ce qui les a vraiment mis en valeur pour moi, c'est d'apprendre OCaml. Traiter avec des structures de données complexes est le point fort de ML, et leur comportement est beaucoup plus clair lorsque vous pouvez éviter les pointeurs et la gestion de la mémoire comme en C. (Apprendre OCaml juste pour comprendre les structures de données est presque certainement le long chemin, cependant. :))

vélo silencieux
la source