Algoritmi efficienti per la ricerca di una raccolta di alberi


9

Ho un grande set di dati di alberi e vorrei cercarlo specificando un treelet ( subgraph collegato). La query dovrebbe restituire tutte le occorrenze del treelet nel set di dati.

Ci sono algoritmi efficienti per farlo?

Stavo pensando a qualcosa come array di suffissi, tuttavia, codificare ingenuamente gli alberi in quanto le stringhe (mediante un ordinamento trasversale fisso dei loro nodi) non funzioneranno, poiché il treelet di ricerca può avere qualsiasi forma arbitraria.

AGGIORNARE:

Alcuni dettagli sui casi tipici che mi aspetto:

Il set di dati consisterà in almeno decine di migliaia di alberi, ciascuno costituito da circa venti o trenta nodi. Gli alberi non saranno binari, ma il numero tipico dei bambini per nodo sarà piccolo (di solito non più grande di quattro o cinque, anche se in alcuni casi degeneri può arrivare a circa trenta). Il numero di etichette sarà in decine di migliaia.

Ne ho bisogno per le applicazioni della PNL: ogni albero sarà l'analisi delle dipendenze di una frase, ogni nodo rappresenterà una parola occourrence e ogni etichetta una parola del dizionario (con qualche decorazione).


1
Questo volume presenta una discussione sugli algoritmi paralleli per l'isomorfismo delle sottostrutture.
Anthony Labarre,

1
Mi dispiace, pensavo che stavi cercando un sottografo connesso, che sarà necessariamente un albero, che appare in un determinato insieme di alberi. Potresti chiarire in quali aspetti il ​​tuo problema differisce da questa descrizione?
Anthony Labarre,

1
Sai qualcosa sugli alberi in anticipo? Binario? Quante diverse etichette di nodo ti aspetti? Qualche limitazione sull'efficienza dello spazio? Chiedo perché se si eseguono tonnellate di query sullo stesso set di dati, una soluzione potrebbe comportare un tipo di indicizzazione aggressiva.
Eli,

1
Conoscete la corrispondenza del ramoscello XML? Il tuo problema sembra essere un caso speciale, quindi puoi semplicemente utilizzare uno qualsiasi degli algoritmi e del software esistenti.
Marek Chrobak,

2
Immagino che potrebbe essere meglio ignorare la struttura del grafico. Data una query tipica, se scarti la struttura, quanti alberi prevedi di avere tutte queste parole? Le tue query hanno caratteri jolly o sono esatte? Se le parole in una query sono come "Il gatto ha mangiato il cappello", quanti grafici avranno effettivamente sia le parole "gatto" che "cappello" in esse? Se indicizzi ciascuna parola su un insieme di alberi, quindi intersechi tutti gli insiemi, potresti potenzialmente cercare ingenuamente il risultato senza sostenere un costo eccessivo.
Eli,

Risposte:


3

Sebbene non sia specificamente mirato agli alberi (rooted), penso che la struttura dei dati di G-trie potrebbe funzionare abbastanza bene nelle tue impostazioni. È un adattamento del trie (per la ricerca di gruppi di stringhe) ai grafici.


1

Qualche tempo fa ho scritto l'algoritmo di canonizzazione dell'albero di Ronald Read e l' ho messo su Wikipedia .

Vorrei creare una tabella hash per ogni firma del nodo interno e etichettarli con un elenco di puntatori ai sottotitoli da cui provenivano. Tuttavia, funzionerà solo con treelet con foglie vere.

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.