61 votes

Bibliothèque de structures de données en Javascript

J'aimerais demander la recommandation d'une ou plusieurs bibliothèques JavaScript qui fournissent une implémentation de certaines structures de données de base telles qu'une file d'attente prioritaire, une carte avec des clés arbitraires, des essais, des graphes, etc. ainsi que certains algorithmes qui opèrent sur elles.

Je suis surtout intéressé par :

  • L'ensemble des fonctionnalités couvertes,
  • Flexibilité de la solution - cela s'applique surtout aux graphiques. Par exemple, suis-je obligé d'utiliser une implémentation de graphe fournie ?
  • Utilisation des caractéristiques fonctionnelles de la langue - là encore, cela donne parfois une plus grande flexibilité,
  • Performance de la mise en œuvre

Je tiens à préciser que je suis conscient qu'il est possible d'implémenter les structures de données suivantes en utilisant JavaScript :

  • Une carte, si les valeurs des clés sont des chaînes de caractères ou des nombres,
  • Un ensemble, (en utilisant une implémentation de carte),
  • Une file d'attente, bien que, comme cela a été souligné ci-dessous, elle soit inefficace sur certains navigateurs,

Pour le moment, je suis surtout intéressé par les files d'attente prioritaires (à ne pas confondre avec les files d'attente ordinaires), les implémentations de graphes qui ne sont pas très intrusives quant au format du graphe d'entrée. Par exemple, elles pourraient utiliser des callbacks pour parcourir la structure du graphe plutôt que d'accéder à des propriétés concrètes avec des noms fixes.

7 votes

Ce n'est pas vraiment une réponse, alors je vais commenter : Certains de ces éléments font partie du langage. Tous les objets JavaScript sont des cartes avec des clés arbitraires ; et comme les valeurs des propriétés peuvent être des objets, elles forment des graphes. Les "tableaux" JavaScript (qui ne sont pas vraiment des tableaux ) fournissent des fonctionnalités de pile ( push , pop ).

0 votes

@Crowder Oui, je suis d'accord. Mais les touches doivent vraiment être soit numériques, soit des chaînes de caractères, donc je ne dirais pas que c'est arbitraire. Pour le push & pop, bien sûr je peux l'utiliser pour implémenter une file d'attente mais pas beaucoup d'aide pour une file prioritaire. Je demande les structures de données qui manquent à js (il en manque beaucoup).

0 votes

C'est pourquoi il s'agissait d'un commentaire et non d'une réponse :-) (Et oui, les noms de propriétés doivent être des chaînes de caractères. En fait, même les index des tableaux sont des noms de propriétés, et donc des chaînes de caractères, bien que nous utilisions presque toujours des nombres en théorie ils sont convertis en chaînes de caractères et ensuite la propriété est recherchée, bien que l'on espère que les implémentations optimisent cela).

36voto

orian Points 581

Je recommande d'utiliser la bibliothèque Closure (surtout avec le compilateur closure).

Ici, vous avez une bibliothèque avec des structures de données structures.goog . La bibliothèque contient :

goog.structs.AvlTree
goog.structs.CircularBuffer
goog.structs.Heap
goog.structs.InversionMap
goog.structs.LinkedMap
goog.structs.Map
goog.structs.PriorityQueue
goog.structs.Set

Comme exemple, vous pouvez utiliser le test unitaire : goog.structs.PriorityQueueTest .

Si vous avez besoin de travailler sur des tableaux, il existe également une librairie pour tableaux : goog.array .

Comme indiqué dans les commentaires, la source a été déplacée à github.com/google/fermeture et le nouvel emplacement de la documentation est : google.github.io/fermeture-bibliothèque .

0 votes

Ça a l'air prometteur. J'ai cru comprendre que vous pouviez l'utiliser sans le compilateur de fermeture de Google ?

0 votes

En effet, il est cependant très pratique de l'utiliser avec lui, car il effectue la vérification des types et aide à prévenir les erreurs de frappe et autres bogues occasionnels.

0 votes

On dirait une solution à un problème de longue date. Je vais certainement le vérifier.

18voto

Daniel Points 131

Vous pouvez essayer Seaux est une bibliothèque de structures de données JavaScript très complète qui comprend :

  • Liste liée
  • Dictionnaire
  • Multi Dictionnaire
  • Arbre de recherche binaire
  • Pile
  • File d'attente
  • Définir
  • Sac
  • Tas binaire
  • File d'attente prioritaire

3voto

bebraw Points 4356

Une file d'attente efficace .

Si vous en trouvez d'autres, vous pouvez les ajouter à la liste suivante jswiki . Merci. :)

3voto

probabilityzero Points 444

La plupart de ce que vous voulez est probablement intégré à Javascript d'une manière ou d'une autre, ou facile à assembler avec des fonctionnalités intégrées (les structures de données natives de Javascript sont incroyablement flexibles). Vous pourriez aimer JSClass .

Quant aux caractéristiques fonctionnelles de la langue, underscore.js c'est là que ça se passe

4 votes

Je ne suis pas d'accord. La plupart des bibliothèques telles que underscore.js fournissent des fonctionnalités d'utilisation - vous permettant d'écrire un code plus court et plus élégant. Comment cela pourrait-il aider à mettre en œuvre, disons, une file d'attente prioritaire. J'ai spécifiquement demandé des fonctionnalités qui ne sont pas présentes dans js. Bien sûr, je peux mettre en œuvre une priorité avec des essais et des graphiques moi-même, mais si quelqu'un l'a fait pour moi, cela ne me dérangerait pas d'utiliser ce travail.

0 votes

Je choisirais moi-même la route underscore.js et j'implémenterais moi-même tout ce qui manque. Google Closure est une excellente bibliothèque, mais elle brille vraiment lorsque vous l'utilisez avec le compilateur closure, en outre, il ressemble à quelque chose mis en œuvre par les codeurs Java et non JavaScript.

3voto

Tim Down Points 124501

Je peux vous aider avec les cartes avec des clés arbitraires : ma jshashtable fait cela, et il y a aussi une implémentation d'un ensemble de hachage construit au-dessus de lui.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X