Quelle est la différence entre les arbres radix et les essais de Patricia?

31

J'apprends les arbres radix (alias essais compressés) et Patricia essaie, mais je trouve des informations contradictoires sur la question de savoir si elles sont réellement les mêmes. Un arbre de base peut être obtenu à partir d'un trie normal (non compressé) en fusionnant les nœuds avec leurs parents lorsque les nœuds sont le seul enfant. Cela vaut également pour les essais de Patricia. En quoi les deux structures de données sont-elles différentes?

Par exemple, le NIST répertorie les deux comme les mêmes:

Arbre de Patricia

(Structure de données)

Définition: représentation compacte d'un trie dans lequel tout noeud qui est un enfant unique est fusionné avec son parent.

Également connu sous le nom d'arbre radix.

De nombreuses sources sur le Web affirment la même chose. Cependant, Patricia semble être un cas particulier d'arbres radix. L' entrée de Wikipedia dit:

Les essais PATRICIA sont des essais radix avec radix égal à 2, ce qui signifie que chaque bit de la clé est comparé individuellement et que chaque nœud est une branche bidirectionnelle (c'est-à-dire gauche contre droite).

Je ne comprends pas vraiment ça. La différence réside-t-elle uniquement dans la façon dont les comparaisons sont effectuées lors des recherches? Comment chaque nœud peut-il être une "branche bidirectionnelle"? Ne devrait-il pas y avoir au plus de ALPHABET_SIZEbranches possibles pour un nœud donné?

Quelqu'un peut-il clarifier cela? À des fins pratiques, les essais Radix sont-ils généralement mis en œuvre comme les essais Patricia (et, par conséquent, souvent considérés comme les mêmes)? Ou ne peut-on pas faire de telles généralisations?

w128
la source

Réponses:

23

J'ai trouvé ce message très utile.

Pour voir la différence entre les essais de Patricia et les arbres radix, il est important de comprendre:

  • La notion de radix , puisque Patricia essaie sont des arbres radix avec radix égal à 2.
  • r2r

Supposons que nous insérions les touches sourire , sourire et sourires (dans cet ordre) dans un trio Patricia. La représentation binaire de ces clés est la suivante:

Représentation binaire des trois clés d'exemple

Notez que sourire est un préfixe de sourire , et, en analysant la représentation binaire, nous pouvons voir que le premier bit qui diffère (de gauche à droite) est 0 (surligné en rouge dans la deuxième ligne); pour cette raison, le sourire sera l' enfant gauche du sourire . De même, les sourires seront le bon enfant de souri car ils partagent le même préfixe jusqu'à un bit dont la valeur est 1 (surligné en rouge dans la troisième ligne). Le tri Patricia résultant après avoir inséré les trois clés est le suivant:

Patricia trie à 3 nœuds

Si le radix était, par exemple, 4, alors les nœuds internes pourraient avoir, au plus, quatre enfants (avec leurs bords étiquetés 00, 01, 10 et 11, respectivement). Dans ce cas, les clés seraient comparées par morceaux de 2 bits, et non par 1 (comme dans les essais de Patricia).


En quoi les deux structures de données sont-elles différentes?

À ma connaissance, la seule différence est le radix, qui est égal à 2 dans le cas des essais de Patricia. Cette valeur peut être n'importe quelle puissance de 2 dans les arbres radix réguliers.

La différence réside-t-elle uniquement dans la façon dont les comparaisons sont effectuées lors des recherches?

bûche2RR

Comment chaque nœud peut-il être une "branche bidirectionnelle"? Ne devrait-il pas y avoir au plus de ALPHABET_SIZEbranches possibles pour un nœud donné?

Le radix établit le nombre maximal d'enfants que les nœuds d'un arbre radix peuvent avoir. Par exemple, lorsque radix = 2, chaque nœud peut avoir au plus deux enfants. C'est le cas des essais de Patricia (également appelés arbres radix binaires).

Les essais radix sont-ils généralement implémentés comme les essais Patricia (et, par conséquent, souvent considérés comme les mêmes)? Ou ne peut-on pas faire de telles généralisations?

Pour être honnête, je n'ai pas de réponse à cette question. Il semble que les deux structures de données aient été proposées à la même époque par différents auteurs. Pour des raisons historiques que je ne connais pas, les deux termes vivent encore aujourd'hui.

Mario Cervera
la source
3

Un tri Patricia est un tri binaire radix résultant de l'application de l'algorithme PATRICIA à des données alphnumériques.

PATRICIA signifie Practical Algorithm To Retrieve Information Coded in Alphanumeric [ document original de Donald R. Morrison ]. L'article définit un vocabulaire de base composé de START, STOP, END, L-PHRASE, BRANCH, TWIN et CHAIN. Les essais de PATRICIA sont les essais qui résultent de l'application de cet algorithme - les essais de radix binaires où le radix, r, est 2 [ wikipedia ] (et plus); un choix binaire à chaque nœud lors de la traversée du trie).

Cependant, dans la pratique, le terme Patricia semble être utilisé avec r> = 2 (c.-à-d. Essais radix), où un alogorithme de stockage et de recherche similaire est utilisé. Par exemple, cela s'appelle patricia. L' Ethereum Patricia Merkle Trie est un autre exemple, où r est 16 à certains nœuds.

atomh33ls
la source