Supongamos que es un árbol de grado constante cuya estructura no conocemos. El problema es generar el árbol haciendo preguntas de la forma: "¿El nodo encuentra en la ruta del nodo al nodo ?". Suponga que cada consulta puede ser respondida en tiempo constante por un oráculo. Conocemos el valor de , el número de nodos en el árbol. El objetivo es minimizar el tiempo necesario para generar el árbol en términos de .T x a b n n
¿Existe un algoritmo para el problema anterior?
Suponga que el grado de cualquier nodo en es como máximo 3.
Lo que yo sé
La caja de diámetro acotado es fácil . Si el diámetro del árbol es , entonces podemos obtener un algoritmo de divide y vencerás:
Cualquier árbol binario tiene un buen separador que divide el árbol en componentes de tamaño no menor a 1 / 3n.
- Elige cualquier vértice x. Si es un buen separador etiqueta eso y recurse.
- Encuentra los 3 vecinos de x.
- Muévase en la dirección del vecino que tiene el mayor número de nodos. Repita el paso 2 con el vecino.
Dado que encontrar el separador toma en la mayoría de los pasos , obtenemos un algoritmo .O ( n D log n )
Un algoritmo aleatorio . (movido de los comentarios a continuación)
Elige dos vértices x e y al azar. Con 1/9 de probabilidad, se acostarán en los lados opuestos de un separador. Elija el nodo central de la ruta de a . Vea si es un separador, si no, haga una búsqueda binaria.y
tarda el tiempo esperado en encontrar el separador. Entonces obtenemos un algoritmo aleatorio .O ( n
Antecedentes. Aprendí sobre este problema de un amigo que trabaja en modelos gráficos probabilísticos. El problema anterior corresponde aproximadamente al aprendizaje de la estructura de un árbol de unión usando un oráculo que, dadas tres variables aleatorias X, Y y Z, puede indicar el valor de la información mutua entre X e Y dado el valor de Z. Si el valor está cerca a cero, podemos suponer que Z se encuentra en el camino de X a Y.