web-dev-qa-db-fra.com

Différence entre les essais et les arbres?

Je me souviens à distance que les tentatives ne stockent pas toutes les données par nœud, uniquement le suffixe du nœud parent.

Où les arbres stockent toutes les données, mais s'organisent uniquement en fonction d'un préfixe.

Donc, les essais deviennent plus petits, ce qui permet par exemple de très bien compresser les dictionnaires.

Est-ce vraiment la seule différence?

À partir d'applications réelles, je me souviens que les tentatives sont plus rapides dans les requêtes de plage. Il existe même des champs spéciaux solr/lucene trie pour accélérer les requêtes de plage. Mais comment en est-il ainsi?

Quelle est la différence réelle et quels sont les avantages et les inconvénients des essais et des arbres?

54
The Surrican

Un arbre est une structure générale de nœuds récursifs. Il existe de nombreux types d'arbres. Les plus populaires sont arbre binaire et arbre équilibré . A Trie est une sorte d'arbre, connu sous de nombreux noms, y compris l'arbre de préfixe, l'arbre de recherche numérique et l'arbre de récupération (d'où le nom "trie").

Chaque type d'arbre a un objectif, une structure et un comportement différents. Par exemple, un arbre binaire stocke une collection d'éléments comparables (par exemple des nombres). Il peut donc être utilisé pour stocker un ensemble de nombres, ou pour indexer d'autres données qui peuvent être représentées par des nombres (par exemple des objets qui peuvent être hachés). Sa structure est triée afin de pouvoir être recherchée rapidement pour trouver un seul article. D'autres structures arborescentes, comme un arbre équilibré, sont similaires en principe.

Un trie représente une séquence dans sa structure. Il est très différent en ce qu'il stocke des séquences de valeurs plutôt que des valeurs individuelles individuelles. Chaque niveau de récursivité dit "quelle est la valeur de l'élément I de la liste d'entrée". Ceci est différent d'un arbre binaire qui compare la valeur recherchée unique à chaque nœud.

60
Joe

Un arbre binaire ou un bst est généralement utilisé pour stocker des valeurs numériques. La complexité temporelle dans un bst est O(log(n)) pour l'insertion, la suppression et la recherche. Chaque nœud dans un arbre binaire a au plus 2 nœuds enfants.

Trie : Chaque nœud de trie se compose de plusieurs branches. Chaque branche représente un caractère possible de clés. Nous devons marquer le dernier nœud de chaque clé comme nœud feuille. Une valeur de champ de nœud de tri sera utilisée pour distinguer le nœud en tant que nœud feuille (il existe d'autres utilisations du champ de valeur)

Pour en savoir plus sur les essais, reportez-vous à ce didacticiel topcoder. https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/

4
Harsh Gupta

Je viens de recevoir quelques informations de cet exposé , même à travers l'arbre Radix utilisé dans le noyau linux est légèrement différent de celui de wikipedia.

Les arbres stockent uniquement les clés, ils ne stockent pas la valeur associée aux clés.

2
firo