Me resulta difícil tratar de describir esto en términos correctos, así que daré tantos detalles como sea posible y espero que alguien sepa lo que estoy tratando de hacer = -)
Estoy tratando de comparar dos árboles de nodos para determinar qué tan similares / diferentes son en cuanto a estructura. En mis diagramas a continuación, ambos ejemplos tienen el mismo número de hijos, nietos, etc. En el ejemplo 1, Root tiene un hijo con dos hijos, pero en el ejemplo dos, la raíz no.
Probablemente podría descubrir cómo recorrer recursivamente y contar cuántos de cada nivel hay y comparar eso, dándome una idea de cuán similares son los árboles, pero solo haciéndolo de esa manera, parecerá que son idénticos, pero de hecho no lo son.
¿Alguien sabe sobre esto? ¿O incluso cuál es el término técnico para lo que es esto?
Editar: Además, esto está en C # y estoy usando Listas para almacenar estos objetos y sus hijos.
Ejemplo 1
Ejemplo 2
fuente
Respuestas:
Lo que está buscando es el isomorfismo de árbol enraizado, que es una versión especializada del isomorfismo de gráficos , a excepción de los árboles y el nodo raíz es fijo.
La explicación dada en esta asignación usa dos propiedades:
Usando estas dos propiedades, avance desde las hojas hasta la raíz, etiquetando cada nodo con el número de hijos, en orden lexicográfico. Por ejemplo, su raíz en el ejemplo 1 estará etiquetada (0, 0, (0, 1)): tiene tres hijos, el primero / segundo tiene 0 hijos y el tercero tiene 2 hijos que tienen 0 y 1 hijos respectivamente. Finalmente, solo compara las etiquetas de la raíz para ver si los árboles son iguales.
No he hecho este tipo de tema y solo leí este artículo hace unos minutos, así que no puedo garantizar su corrección; Espero que ayude de todos modos.
fuente
El problema para ver si dos gráficos son lógicamente iguales se llama Graph Isomorphishm, por lo que es posible que desee comenzar desde allí.
Tenga en cuenta que el problema general del isomorfismo gráfico está en NP, sin embargo, para este caso especial puede haber un atajo, no estoy seguro, ya que parece lógico que para conocer las diferencias hay que verificar si son iguales.
fuente