Confronto tra due strutture ad albero


13

Sto facendo fatica a provare a descriverlo in termini corretti, quindi fornirò il maggior numero di dettagli possibile e spero che qualcuno sappia cosa sto cercando di fare = -)

Sto cercando di confrontare due alberi di nodi per determinare quanto siano simili / diversi per struttura. Nei miei diagrammi di seguito, entrambi gli esempi hanno lo stesso numero di figli, nipoti, ecc. Nell'esempio 1, Root ha un figlio con due figli, ma nell'esempio due, root no.

Potrei probabilmente capire come ricorrere in modo ricorsivo e contare quanti di ogni livello ci sono e confrontarli, dandomi un'idea di quanto siano simili gli alberi, ma solo facendolo in quel modo, sembrerà che siano identici, ma in realtà non lo sono.

Qualcuno lo sa? O anche qual è il termine tecnico per ciò che è?

Modifica: Inoltre, questo è in C # e sto usando Liste per memorizzare questi oggetti e i loro figli.

Esempio 1

inserisci qui la descrizione dell'immagine

Esempio 2

inserisci qui la descrizione dell'immagine


1
Cosa stai effettivamente cercando di ottenere? Questo suona un po 'come il problema XY .
msell,

Il modo migliore per descriverlo è di confrontare le strutture "molecolari" che l'utente crea una molecola alla volta. L'esempio 1 sarebbe una struttura creata da un utente e l'esempio 2 potrebbe far parte di un elenco di strutture predefinite per aiutare a determinare se l'utente ha creato la struttura corretta. L'isomorfismo dell'albero della radice è apparentemente quello che stavo cercando = -)
Mungoid il

Risposte:


11

Quello che stai cercando è Isomorfismo dell'albero radicato, che è una versione specializzata dell'isomorfismo grafico , ad eccezione degli alberi e il nodo radice è stato risolto.

La spiegazione fornita in questo compito utilizza due proprietà:

  • Hanno lo stesso numero di livelli (distanza tra i nodi radice e foglia)
  • Ogni livello ha lo stesso numero di nodi

Usando queste due proprietà, sali dalle foglie alla radice, etichettando ciascun nodo con il numero di bambini, in ordine lessicografico. Ad esempio, la tua radice nell'esempio 1 verrà etichettata (0, 0, (0, 1)) - ha tre figli, il primo / secondo ha 0 figli e il terzo ha 2 figli che hanno rispettivamente 0 e 1 figli. Infine, devi solo confrontare le etichette delle radici per vedere se gli alberi sono uguali.

Non ho fatto questo tipo di argomento e ho letto questo articolo solo pochi minuti fa, quindi non posso garantire la sua correttezza; spero che aiuti comunque.


Fantastico, questo è esattamente quello che sto cercando! Dovrò provarlo. Grazie!
Mungoid

Penso che questo funzioni solo se hai un nodo radice, ma in questo caso potrebbe essere il caso: D +1
Roy T.

Se non viene fornito il nodo radice, è comunque possibile utilizzare questa tecnica ma provare ogni radice. Quando si confrontano due alberi, ciò significa ripetere fino a n volte.
congusbongus,

Sì, ha funzionato come un fascino.
Ci è voluto

Grazie per questo, sembra qualcosa che potrei usare anche io, adoro l'algoritmo per trovare il Center of a Tree. Molto intelligente.
oodavid,

4

Il problema per vedere se due grafici sono logicamente uguali si chiama Graph Isomorphishm, quindi potresti voler iniziare da lì.

Si noti che il problema generale dell'isomorfismo del grafico è in NP, tuttavia per questo caso speciale potrebbe esserci una scorciatoia, non sono sicuro poiché sembra logico che per conoscere le differenze devi verificare se sono uguali.


Sì, questo è quello che mi serve. Non avrei mai capito come si chiamava. Grazie = -)
Mungoid il
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.