En teoría de grafos , una descomposición en árbol es un mapeo de un gráfico en un árbol que puede usarse para definir el ancho del árbol del gráfico y acelerar la resolución de ciertos problemas computacionales en el gráfico.
Las descomposiciones de árboles también se denominan árboles de unión , árboles de clique o árboles de unión . Desempeñan un papel importante en problemas como la inferencia probabilística , la satisfacción de restricciones , la optimización de consultas [1] y la descomposición matricial .
El concepto de descomposición arbórea fue introducido originalmente por Rudolf Halin (1976). Más tarde fue redescubierto por Neil Robertson y Paul Seymour (1984) y desde entonces ha sido estudiado por muchos otros autores. [2]
Intuitivamente, una descomposición en árbol representa los vértices de un grafo G dado como subárboles de un árbol, de tal manera que los vértices en G son adyacentes solo cuando los subárboles correspondientes se intersecan. Por lo tanto, G forma un subgrafo del grafo de intersección de los subárboles. El grafo de intersección completo es un grafo cordal .
Cada subárbol asocia un vértice del grafo a un conjunto de nodos del árbol. Para definir esto formalmente, representamos cada nodo del árbol como el conjunto de vértices asociados a él. Así, dado un grafo G = ( V , E ) , una descomposición en árbol es un par ( X , T ) , donde X = { X 1 , …, X n } es una familia de subconjuntos (a veces llamados bolsas ) de V , y T es un árbol cuyos nodos son los subconjuntos X i , que satisfacen las siguientes propiedades: [3]
La descomposición en árbol de un gráfico está lejos de ser única; por ejemplo, una descomposición en árbol trivial contiene todos los vértices del gráfico en su único nodo raíz.
Una descomposición de árbol en la que el árbol subyacente es un gráfico de ruta se denomina descomposición de ruta, y el parámetro de ancho derivado de estos tipos especiales de descomposiciones de árbol se conoce como pathwidth .
Una descomposición de árbol ( X , T = ( I , F )) de ancho de árbol k es suave , si para todos , y para todos . [4]
El ancho de una descomposición en árbol es el tamaño de su conjunto más grande X i menos uno. El ancho de árbol tw( G ) de un grafo G es el ancho mínimo entre todas las descomposiciones en árbol posibles de G . En esta definición, el tamaño del conjunto más grande se reduce en uno para que el ancho de árbol de un árbol sea igual a uno. El ancho de árbol también se puede definir a partir de otras estructuras distintas de las descomposiciones en árbol, incluidos los grafos cordales , zarzas y havens .
Es NP-completo determinar si un gráfico dado G tiene un ancho de árbol como máximo de una variable dada k . [5] Sin embargo, cuando k es cualquier constante fija, los gráficos con ancho de árbol k se pueden reconocer y se puede construir una descomposición de árbol de ancho k para ellos, en tiempo lineal. [4] La dependencia temporal de este algoritmo en k es una función exponencial de k 3 .
A principios de la década de 1970, se observó que una gran clase de problemas de optimización combinatoria definidos en grafos se podían resolver de manera eficiente mediante programación dinámica no serial siempre que el grafo tuviera una dimensión acotada , [6] un parámetro relacionado con el ancho del árbol. Más tarde, varios autores observaron de manera independiente, a fines de la década de 1980, [7] que muchos problemas algorítmicos que son NP-completos para grafos arbitrarios se pueden resolver de manera eficiente mediante programación dinámica para grafos de ancho de árbol acotado, utilizando las descomposiciones en árbol de estos grafos.
Como ejemplo, considere el problema de encontrar el conjunto independiente máximo en un grafo de ancho de árbol k . Para resolver este problema, primero elija uno de los nodos de la descomposición del árbol como raíz, arbitrariamente. Para un nodo X i de la descomposición del árbol, sea D i la unión de los conjuntos X j que descienden de X i . Para un conjunto independiente, sea A ( S , i ) el tamaño del subconjunto independiente más grande I de D i tal que De manera similar, para un par adyacente de nodos X i y X j , con X i más alejado de la raíz del árbol que X j , y un conjunto independiente, sea B ( S , i , j ) el tamaño del subconjunto independiente más grande I de D i tal que Podemos calcular estos valores de A y B mediante un recorrido de abajo hacia arriba del árbol:
donde la suma en el cálculo de es sobre los hijos del nodo X i .
En cada nodo o borde, hay como máximo 2 k conjuntos S para los que necesitamos calcular estos valores, por lo que si k es una constante, entonces todo el cálculo toma un tiempo constante por borde o nodo. El tamaño del conjunto independiente máximo es el valor más grande almacenado en el nodo raíz, y el conjunto independiente máximo en sí se puede encontrar (como es estándar en algoritmos de programación dinámica) retrocediendo a través de estos valores almacenados comenzando desde este valor más grande. Por lo tanto, en grafos de ancho de árbol acotado, el problema del conjunto independiente máximo se puede resolver en tiempo lineal. Algoritmos similares se aplican a muchos otros problemas de grafos.
Este enfoque de programación dinámica se utiliza en el aprendizaje automático a través del algoritmo de árbol de unión para la propagación de creencias en gráficos de ancho de árbol acotado. También desempeña un papel clave en los algoritmos para calcular el ancho de árbol y construir descomposiciones de árboles: normalmente, dichos algoritmos tienen un primer paso que aproxima el ancho de árbol, construyendo una descomposición de árbol con este ancho aproximado, y luego un segundo paso que realiza una programación dinámica en la descomposición de árbol aproximada para calcular el valor exacto del ancho de árbol. [4]