web-dev-qa-db-fra.com

Utilisations pratiques de différentes structures de données

On parle beaucoup de structures de données, mais je ne trouve pas une simple liste 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 de ce type quelque part, faites-le moi savoir.

Merci!

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

91
Joel

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 de données unique.

Trie - dictionnaire, tel que celui trouvé sur un téléphone portable pour autocomplétion et vérification orthographique.

Arbre de suffixe - recherches rapides en texte intégral utilisées dans la plupart des traitements de texte.

Stack - undo\redo opération dans les traitements de texte, évaluation des expressions l’analyse syntaxique, de nombreuses machines virtuelles telles que JVM sont orientées pile.

Files d'attente - Recherche sur les transports et les opérations où se trouvent diverses entités stockées et conservées pour être traitées ultérieurement, c'est-à-dire que la file d'attente exécute le fonction d'un tampon.

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

Arbres - Analyseurs, Système de fichiers

Arbre Radix - Table de routage IP

Arbre BSP - Infographie 3D

Graphes - Connexions/relations dans les sites de réseaux sociaux, Routage , réseaux de communication, organisation de données, etc.

Heap - Allocation dynamique de mémoire dans LISP

Ceci 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 centré sur les applications, par un bon résumé et pertinent

88
MXMLLN

Je suis dans le même bateau que toi. J'ai besoin d'étudier pour des entretiens techniques, mais la mémorisation d'une liste n'est pas vraiment utile. Si vous avez 3-4 heures à perdre et que vous souhaitez approfondir votre plongée, je vous conseille de vérifier

mycodeschool
J’ai examiné Coursera et d’autres ressources telles que des blogs et des manuels, Mais je les trouve soit assez incomplètes, soit à l’autre bout du spectre, trop denses avec la terminologie informatique requise.

Le mec dans la vidéo a un tas de conférences sur les structures de données. Ne faites pas attention aux dessins stupides, ou au léger accent du tout. Vous devez comprendre non seulement la structure de données à sélectionner, mais également certains points à prendre en compte lorsque les utilisateurs réfléchissent 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 dans la mémoire 
  • questions/exercices spécifiques et choix de la structure à utiliser pour une efficacité maximale 
  • lucide explication Big 0 

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

13
the_answer_is_xyz

Selon ma compréhension, la structure de données comprend toutes les données résidant dans la mémoire de tout système électronique pouvant être géré efficacement. Souvent, il s’agit d’un jeu de mémoire ou d’une accessibilité plus rapide des données. En termes de mémoire, il existe des compromis avec la gestion des données en fonction du coût pour le produit final de l'entreprise. Une gestion efficace nous indique comment accéder au mieux aux données en fonction des exigences principales du produit final. Ceci est une explication de très haut niveau mais la structure des données est un vaste sujet. La plupart des enquêteurs se plongent dans des structures de données qu'ils peuvent se permettre de discuter au cours des entretiens en fonction du temps dont ils disposent, qui sont des listes chaînées et des sujets connexes.

Désormais, ces types de données peuvent être divisés en composites primitifs, abstraits, abstraits, en fonction de la manière dont ils sont construits de manière logique et auxquels on accède. 

  • 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.
  • 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.
  • types de données abstraits sont des types de données composites qui permettent d’y accéder efficacement, ce qui est appelé un algorithme. Selon le mode d'accès aux données, les structures de données sont divisées en types de données linéaires et non linéaires. Les listes chaîné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 aide à plonger.

7
JavaUSer

L'excellent livre " Algorithm Design Manual" de Skienna contient un énorme 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 bien d'avoir sur votre bureau si vous recherchez la meilleure structure de données pour votre problème à résoudre. C'est également très utile pour la préparation de l'entrevue.

Le Dictionnaire NIST des structures de données et algorithmes .

6
dmeister

Tout classement de diverses structures de données sera au moins partiellement lié au contexte du problème. Il serait utile d’apprendre à analyser les performances des algorithmes dans le temps et dans l’espace. En général, la "grande notation O" est utilisée, par exemple. la recherche binaire est en temps O (log n), ce qui signifie que le temps pour rechercher un élément est le journal (implicitement en base 2) du nombre d'éléments. Intuitivement, puisque chaque étape élimine la moitié des données restantes comme non pertinentes, le fait de doubler le nombre d'éléments augmente le temps d'une étape. (La recherche binaire évolue plutôt bien.) La performance de l'espace concerne la croissance de la quantité de mémoire pour de plus grands ensembles de données. Notez également que la notation big-O ne tient pas compte des facteurs constants - pour les ensembles de données plus petits, un algorithme O (n ^ 2) peut encore être plus rapide qu'un algorithme O (n * log n) qui a un facteur constant plus élevé. Les algorithmes complexes ont souvent plus de travail à faire au démarrage.

Outre le temps et l'espace, d'autres caractéristiques sont notamment le fait de savoir si une structure de données est triée (les arbres et les skiplistes sont triés, les tables de hachage ne le sont pas), la persistance (les arbres binaires peuvent réutiliser des pointeurs d'anciennes versions, les tables de hachage étant modifiées à la place), etc.

Bien que vous ayez besoin d'apprendre le comportement de plusieurs structures de données pour pouvoir les comparer, l'une des façons de comprendre en quoi leurs performances diffèrent consiste à en étudier de plus près quelques-unes. Je suggérerais de comparer des listes à lien unique, des arbres de recherche binaires et des listes à sauter , qui sont toutes relativement simples, mais présentent des caractéristiques très différentes. Réfléchissez au travail nécessaire pour trouver une valeur, ajouter une nouvelle valeur, trouver toutes les valeurs dans l’ordre, etc.

Il existe divers textes sur l’analyse des performances des algorithmes/structures de données que les gens recommandent, mais ce qui les a vraiment éclairés est l’apprentissage d’OCaml. Le fait de traiter des structures de données complexes est le point fort de ML, et son comportement est bien plus clair lorsqu'il est possible d'éviter les pointeurs et la gestion de la mémoire, comme en C. (Apprendre à OCaml simplement pour comprendre les structures de données est presque certainement le chemin le plus long, cependant. :))

3
silentbicycle

Peu plus d'applications pratiques des structures de données

Arbres rouge-noir (Utilisé en cas d'insertion/suppression fréquentes Et de peu de recherches) - Clustering k-mean utilisant un arbre noir rouge, bases de données, base de données simple d'esprit, recherche de mots dans les dictionnaires, recherche sur le Web

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

Min Heap - Algorithmes de clustering

2

Ci-dessous la liste des sites où vous pouvez comprendre l’utilisation réelle de la structure de données et de l’algorithme Hacker Earth

Rang du pirate

code chef

0
DHARMENDRA SINGH

J'espère que ce site Web sera un excellent endroit pour apprendre l'utilisation pratique des structures de données et des algorithmes. 

Problème d'algorithme avec solution

0
asela nuwan