TRIE est la structure de données la plus recommandée lors de la conception de quelque chose comme un dictionnaire pour stocker des mots? Toutes les autres alternatives qui améliorent la performance de temps ou de mémoire? Je pense qu'un hachage peut être bon s'il n'y a pas de collision, mais les exigences de mémoire commencent à être mauvaises pour les mots qui se chevauchent: over, overlap, overlaps, overlapped, overlapping occupent tous un espace de stockage exclusif.structure de données recommandée lors de la conception de quelque chose comme un dictionnaire?
EDIT: Merci @Moron et à vous tous pour les réponses très utiles. Je suis d'accord - la génération de la clé de hachage est O (n) et il en est de même pour la recherche TRIE. Cependant, pour les choses de hachage peut être pire avec enchaînement ajoutant à l'heure tandis que pour TRIE cela ne se produira pas. Mon souci reste que pour chaque noeud dans un TRIE je dois garder un pointeur qui peut être des choses de soufflage si la taille du dictionnaire est petite.
Comment est le hachage O (log n)? –
@Moron Au lieu d'utiliser la liste chaînée pour le chaînage, démarrez un arbre BST ou AVL à la position du nœud racine. Pour les données randomisées, la BST typique devrait être O (log n) même si nous n'optons pas pour AVL. – Fanatic23
Utilisez ce que vous voulez à la place de la liste liée, en calculant la valeur de la clé de hachage est toujours O (n). O (logn) n'a aucun sens. C'est O (n + nlog K) où K est le nombre de clés avec le même hachage. n pour calculer le hachage, nlogK pour la chaîne logK compare (dans l'arbre de K nœuds) de longueur n chacun (pourrait être moindre si les chaînes plus petites ont la même valeur, mais le cas le plus défavorable est n). –