Où puis-je trouver un standard Trie en fonction de la carte de mise en œuvre en Java?
J'ai un programme Java qui stocke beaucoup de correspondance entre les Chaînes de divers objets.
Droit maintenant, mes options sont soit de s'appuyer sur le hachage (via HashMap) ou sur les binaires de recherche (via TreeMap). Je me demande s'il est efficace et standard trie-carte de mise en œuvre dans un populaire et de la qualité des collections de la bibliothèque?
J'ai écrit mon propre dans le passé, mais je préfère aller avec quelque chose de standard, si disponible.
Clarification rapide: Alors ma question est d'ordre général, dans le projet actuel, je suis en contact avec un grand nombre de données, qui est indexé par complet de la classe nom ou la signature de la méthode. Ainsi, il y a beaucoup partagé de préfixes.
- sont les chaînes de caractères connus à l'avance? Ils doivent être accessibles par chaîne seulement?
Vous devez vous connecter pour publier un commentaire.
Vous voudrez peut-être regarder à l' Trie de la mise en œuvre que Limewire est de contribuer à Google de Goyave.
Il n'y a pas de trie de la structure des données dans la base de bibliothèques Java.
Ce peut-être parce que la tente sont en général conçus pour stocker des chaînes de caractères, alors que Java des structures de données plus générales, généralement de la détention d'une
Object
(définition de l'égalité et une opération de hachage), même si elles sont parfois limitées àComparable
objets (de la définition d'un ordre). Il n'y a aucune commune de l'abstraction pour "une séquence de symboles," bien queCharSequence
est adapté pour les chaînes de caractères, et je suppose que vous pourriez faire quelque chose avecIterable
pour d'autres types de symboles.Voici un autre point à prendre en compte: lorsque vous essayez de mettre en œuvre un classique trie en Java, vous êtes rapidement confronté avec le fait que Java prend en charge Unicode. Pour toute sorte de l'efficacité de l'espace, vous devez restreindre les chaînes dans votre trie à un certain sous-ensemble de symboles, ou de renoncer à l'approche conventionnelle de stockage des nœuds enfants dans un tableau indexé par le symbole. Ce pourrait être une autre raison pour laquelle tente ne sont pas considérés comme usage général assez pour inclusion dans le noyau de la bibliothèque, et quelque chose à regarder si vous implémentez votre propre ou de l'utilisation d'une bibliothèque tierce.
Comparable
.Également vérifier des arbres. Ils soutenir à la fois la Base et le Suffixe arbres et sont conçus pour la haute simultanéité des environnements.
Apache Commons Collections v4.0 prend désormais en charge trie structures.
Voir le
org.apache.commons.collections4.trie
paquet d'info pour plus d'informations. En particulier, vérifier laPatriciaTrie
classe:J'ai écrit et publié un moyen simple et rapide de mise en œuvre ici.
Apache commons collections:
org.apache.commons.collections4.trie.PatriciaTrie
Ce que vous avez besoin est
org.apache.commons.collections.FastTreeMap
, je pense.Vous pouvez essayer le Complètement bibliothèque Java, il dispose d'un PatriciaTrie mise en œuvre. L'API est petit et facile à prendre en main, et il est disponible dans la Dépôt central de Maven.
Vous pourriez regarder cette TopCoder une ainsi (inscription nécessaire...).
Si vous devez triés carte, puis tente en valent la peine.
Si vous n'avez pas alors hashmap est mieux.
Table de hachage avec des clés de chaîne peut être amélioré au cours de la Java standard de mise en œuvre:
Tableau de hachage carte
Si vous n'êtes pas préoccupé de tirer à la Scala de la bibliothèque, vous pouvez utiliser cet espace en œuvre efficace, je l'ai écrit d'une rafale trie.
https://github.com/nbauernfeind/scala-burst-trie
Ci-dessous est une base HashMap mise en œuvre d'un Trie. Certaines personnes peuvent trouver cela utile...
voici ma mise en œuvre, d'en profiter via: GitHub - MyTrie.java
J'ai juste essayé de faire de mon propre Simultanées TRIE de mise en œuvre, mais pas basé sur des personnages, il est basé sur HashCode. Néanmoins, On peut utiliser ceci pour avoir la Carte de la Carte pour chaque CHAR hascode.
Vous pouvez tester cela en utilisant le code @ https://github.com/skanagavelu/TrieHashMap/blob/master/src/TrieMapPerformanceTest.java
https://github.com/skanagavelu/TrieHashMap/blob/master/src/TrieMapValidationTest.java