Qual'è la differenza tra radix trees e Patricia try?


31

Sto imparando a conoscere alberi radix (ovvero tentativi compressi) e Patricia, ma sto trovando informazioni contrastanti sul fatto che siano effettivamente le stesse. Un albero radix può essere ottenuto da un trie normale (non compresso) unendo i nodi con i loro genitori quando i nodi sono l'unico figlio. Questo vale anche per i tentativi di Patricia. In che modo le due strutture dati sono diverse?

Ad esempio, NIST elenca i due come uguali:

Albero di Patricia

(struttura dati)

Definizione: una rappresentazione compatta di un trie in cui qualsiasi nodo che è figlio unico viene unito al suo genitore.

Conosciuto anche come radix tree.

Molte fonti sul web rivendicano lo stesso. Tuttavia, a quanto pare Patricia ci prova è un caso speciale di alberi radix. La voce di Wikipedia dice:

I tentativi PATRICIA sono tentativi radix con radix uguale a 2, il che significa che ogni bit della chiave viene confrontato individualmente e ogni nodo è un ramo a due vie (cioè sinistra contro destra).

Non lo capisco davvero. La differenza è solo nel modo in cui vengono effettuati i confronti durante le ricerche? Come può ciascun nodo essere un "ramo a due vie"? Non dovrebbero esserci al massimo ALPHABET_SIZErami possibili per un dato nodo?

Qualcuno può chiarire questo? Ai fini pratici, i tentativi di Radix sono in genere implementati come i tentativi di Patricia (e, quindi, spesso considerati uguali)? O non è possibile effettuare tali generalizzazioni?

Risposte:


23

Ho trovato questo post molto utile.

Per vedere la differenza tra i tentativi di Patricia e gli alberi radix, è importante capire:

  • La nozione di radix , poiché Patricia ci prova sono alberi radix con radix pari a 2.
  • r2r

Supponiamo che inseriamo le chiavi sorriso , sorriso e sorrisi (in questo ordine) in un trie Patricia. La rappresentazione binaria di queste chiavi è la seguente:

Rappresentazione binaria delle tre chiavi di esempio

Si noti che sorriso è un prefisso di sorrise , e, analizzando la rappresentazione binaria, possiamo vedere che il primo bit che differisce (da sinistra a destra) è 0 (evidenziato in rosso nella seconda riga); per questo motivo, il sorriso sarà il figlio sinistro del sorriso . Allo stesso modo, i sorrisi saranno il figlio giusto dei sorrisi perché condividono lo stesso prefisso fino a un bit il cui valore è 1 (evidenziato in rosso nella terza riga). Il risultante Patricia trie dopo aver inserito le tre chiavi è il seguente:

Patricia trie con 3 nodi

Se la radice era, ad esempio, 4, i nodi interni potevano avere al massimo quattro figli (con i loro bordi etichettati 00, 01, 10 e 11, rispettivamente). In questo caso, le chiavi verrebbero confrontate da blocchi di 2 bit e non 1 (come nei tentativi di Patricia).


In che modo le due strutture dati sono diverse?

A mio avviso, l'unica differenza è il radix, che è uguale a 2 nel caso dei tentativi di Patricia. Questo valore può essere qualsiasi potenza di 2 in alberi radix regolari.

La differenza è solo nel modo in cui vengono effettuati i confronti durante le ricerche?

log2RR

Come può ciascun nodo essere un "ramo a due vie"? Non dovrebbero esserci al massimo ALPHABET_SIZErami possibili per un dato nodo?

La radice stabilisce il numero massimo di figli che possono avere i nodi di un albero radice. Ad esempio, quando radix = 2, ogni nodo può avere al massimo due figli. Questo è il caso dei tentativi di Patricia (noti anche come alberi binari di radix).

I tentativi di Radix sono in genere implementati come i tentativi di Patricia (e, quindi, spesso considerati uguali)? O non è possibile effettuare tali generalizzazioni?

Ad essere sincero, non ho una risposta a questa domanda. Sembra che entrambe le strutture dati siano state proposte nello stesso periodo da autori diversi. Per ragioni storiche di cui non sono a conoscenza, entrambi i termini vivono ancora oggi.


3

Un trie Patricia è un trie radix binario derivante dall'applicazione dell'algoritmo PATRICIA ai dati alfnumerici.

PATRICIA è l'acronimo di Practical Algorithm To Retrieve Information Coded in Alfhanumeric [ documento originale di Donald R. Morrison ]. L'articolo definisce un vocabolario di base composto da START, STOP, END, L-PHRASE, BRANCH, TWIN e CHAIN. I tentativi PATRICIA sono i tentativi che risultano dall'applicazione di questo algoritmo: i tentativi binari di radix in cui radix, r, è 2 [ wikipedia ] (e sopra); una scelta binaria su ciascun nodo durante l'attraversamento del trie).

Tuttavia, in pratica, il termine Patricia sembra essere usato con r> = 2 (ovvero radix try), dove viene utilizzato un analogo algoritmo di archiviazione e ricerca. Ad esempio, questo è intitolato come patricia. L' Ethereum Patricia Merkle Trie è un altro esempio, in cui r è 16 in determinati nodi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.