Trie

Dans le de l'informatique, un trie , ou l'arbre de préfixe de , est un la structure de données commandée de de l'arbre qui est employée pour stocker une rangée associative où les clefs sont habituellement les cordes à la différence d'un arbre de recherche binaire , aucun noeud dans l'arbre stocke la clef liée à ce noeud ; au lieu de cela, sa position dans l'arbre montre à quelle clef elle est associée. Tous les descendants de n'importe quel un noeud ont un préfixe commun de la corde liée à ce noeud, et la racine est associée à la corde vide . Des valeurs ne sont pas normalement associées à chaque noeud, seulement avec les feuilles et quelques noeuds intérieurs qui s'avèrent justement correspondre aux clefs d'intérêt.

Le trie de limite vient du " ; re' trie' val." En raison de cette étymologie il est prononcé (" ; tree" ;), bien que certains encouragent l'utilisation de (" ; try" ;) afin de le distinguer de l'arbre plus général .

Dans l'exemple montré, des clefs sont énumérées en noeuds et valeurs au-dessous de eux. Chaque mot anglais complet a une valeur de nombre entier liée à lui. Un trie peut être vu comme automate fini déterministe , bien que le symbole sur chaque bord soit souvent implicite dans l'ordre des branches.

Il n'est pas que des clefs soient explicitement stockées dans les noeuds. (Dans la figure, des mots sont montrés pour illustrer seulement comment le trie fonctionne.)

Bien que ce soit la plupart de terrain communal, le trie s de n'a pas besoin d'être verrouillé par des chaînes de caractères. Les mêmes algorithmes peuvent facilement être adaptés pour remplir les fonctions semblables des listes numérotées de n'importe quelle construction, par exemple, permutations sur une liste de chiffres, permutations sur une liste de formes, etc.

Avantages et inconvénients, relativement à l'arbre de recherche binaire

Ce qui suit sont les avantages principaux des essais au-dessus des arbres de recherche binaire (BSTs) :

recherchant des clefs est plus rapide. La recherche d'une clef du m de longueur prend du temps du O ( m ) de pire cas. Une déclaration provisoire prend du temps d'O ( n de notation ), où le n est le nombre d'éléments dans l'arbre, parce que les consultations dépendent de la profondeur de l'arbre, qui est logarithmique dans le nombre de clefs. En outre, l'utilisation simple d'essais d'opérations pendant la consultation, telle que l'indexation de rangée using un caractère, sont rapide sur de vraies machines.
Les essais peuvent exiger moins d'espace quand ils contiennent un grand nombre de cordes de short, parce que les clefs ne sont pas stockées explicitement et des noeuds sont partagés entre les clefs avec des subsequences initiaux communs.
Les essais aident avec le long-préfixe de assortissant , où nous souhaitons trouver la clef partageant le plus long possible préfixe des caractères tout unique.

Applications

Comme remplacement d'autres structures de données

Comme mentionné, un trie a un certain nombre d'avantages par rapport aux arbres de recherche binaire (détailler voir de Bentley et de Sedgewick référence un certain nombre ils). Un trie peut également être employé pour remplacer une table de brouillage , dont au-dessus il a les avantages suivants :

recherchant des données dans un trie est plus rapide dans le pire des cas, O (m) temps, comparé à une table de brouillage imparfaite. Une table de brouillage imparfaite peut avoir les collisions principales. Une collision principale est la cartographie de fonction de gâchis de différentes clefs dans la même position dans une table de brouillage. La vitesse des cas les pires de consultation dans une table de brouillage imparfaite est le O (N) le temps de , mais est bien plus typique O (1), avec de l'O (m) le temps a passé évaluer le gâchis.
Il n'y a aucune collision de différentes clefs dans un trie.
Seaux dans un trie qui sont analogues dans des seaux de table de brouillage que les collisions de clef de magasin sont seulement nécessaires si une clef simple est associée à plus d'une valeur.
Il n'y a aucun besoin de fournir une fonction de gâchis ou de changer des fonctions de gâchis car plus de clefs sont ajoutées à un trie.
Un trie peut fournir une commande alphabétique des entrées par clef.

Le Trie s ont quelques inconvénients aussi bien :
le Trie s de

peut être plus lent dans certains cas que des tables de brouillage pour rechercher des données, particulièrement si les données sont directement accédées sur une commande de disque dur ou un autre dispositif de stockage secondaire où le temps à accès sélectif est haut comparé à de mémoire centrale.
Il n'est pas facile de représenter toutes les clefs pendant que les cordes, telles que la virgule flottante numérote, qui peut avoir les représentations de corde multiples pour le même nombre de virgule flottante, par exemple 1, 1.
Le Trie s sont fréquemment moins espace-efficace que des tables de brouillage.
À la différence des tables de brouillage, le trie s de ne sont généralement pas déjà disponible dans des trousses à outils de langage de programmation.

Représentation de dictionnaire

Une application commune d'un trie stocke un dictionnaire, tel qu'un trouvé à un mobilophone . De telles applications tirent profit d'une capacité des trie de rechercher rapidement, insèrent, et suppriment des entrées ; cependant, si le stockage des mots de dictionnaire est tout ce qui est exigé (c. le stockage de l'auxiliaire de l'information à chaque mot n'est pas exigé), un minimal l'automate fini déterministe qu'acyclique emploierait moins d'espace qu'un trie.

Le Trie s sont également bien adapté pour mettre en application des algorithmes assortis approximatifs, y compris ceux utilisés dans le logiciel de la vérification d'orthographe .

Algorithmes

Le pseudo-code suivant représente l'algorithme général pour déterminer si une corde donnée est dans un trie. Noter que children est une rangée des enfants d'un noeud ; et nous disons qu'un " ; terminal" ; le noeud est un qui contient un mot valide. isKeyInTrie de fonction (noeud, clef) : si (la clef est une corde vide) : # situation de base retourner est borne de noeud ? autrement : # cas récursif c = d'abord caractère dans la clef # ceci fonctionne parce que la clef n'est pas vide queue = clef sans le premier caractère enfant = node.children si (l'enfant est nul) : # incapable au recurse, bien que la clef soit non-vide faux de retour autrement : isKeyInTrie de retour (enfant, queue)

Tri

Le tri lexicographique d'un ensemble de clefs peut être accompli avec un algorithme trie-basé simple comme suit :
Insertion de

toutes les clefs dans un trie.
Produire toutes les clefs dans le trie au moyen de Pre-order le traversal , qui a comme conséquence le rendement qui est dans l'ordre croissant du lexicographique , ou le traversal de priorité "après" de , qui a comme conséquence le rendement qui est dans l'ordre lexicographique décroissant. Le Pre-order le traversal et le traversal de priorité "après" de sont des genres du profondeur-premier traversal . le traversal de Dans-ordre de est un autre genre du profondeur-premier traversal qui est plus approprié pour produire les valeurs qui sont dans un arbre de recherche binaire plutôt qu'un trie.

Cet algorithme est une forme de la sorte de base .

Un trie forme la structure de données fondamentale du Burstsort ; actuellement (2007) le plus rapidement connue, mémoire/cachette-basé, algorithme de tri de corde.

Un algorithme parallèle pour assortir des clefs de N basées sur le trie s de est le O (1) s'il y a des processeurs de N et la longueur des clefs ont une limite supérieure constante. Il y a le potentiel que les clefs pourraient se heurter en ayant des préfixes communs ou en étant identiques à une une autre, en réduisant ou en éliminant l'avantage de vitesse de avoir les processeurs multiples fonctionner en parallèle.

Recherche de texte intégral

Un genre spécial de trie, appelé un arbre de suffixe de , peut être employé pour indexer tous les suffixes dans un texte afin d'effectuer des recherches rapides de texte intégral.

Voir également

style=" de

Arbre de base de
Dirigé par graphique acyclique (aka DAWG) de mot
''' Ternaire s de trie de ''' de recherche de
Automates finis déterministes acycliques
Automates finis déterministes
Rangée de Judy de
Algorithme de recherche
Brouillage sujet à saisie
Arbre de gâchis de préfixe de
Burstsort
Algorithme de Luleå de

.

Random links:300s AVANT JÉSUS CHRIST | Module d'identité d'abonné | Truite de Gila | Zone d'emballage de viande, Manhattan | Trie