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.
Respuestas:
No. La siguiente estrategia adversa simple implica que cualquier algoritmo para reconstruir un árbol de nodos requiere al menos consultas de "intermediación".n (n−12)=n(n−1)/2
Etiquete arbitrariamente los nodos . El adversario responde todas las consultas como si el árbol fuera una estrella con el vértice en el centro; piense en como la raíz y los otros nodos como sus hijos.0,1,2,…,n−1 0 0
Ahora suponga que el algoritmo se detiene después de realizar menos de consultas. Entonces debe haber dos vértices y , ninguno igual a cero, de modo que el algoritmo no haya consultado ninguna permutación del triple . Si el algoritmo afirma que el árbol no es una estrella con centro , el adversario revela su entrada, demostrando que el algoritmo está equivocado. El adversario luego revela que es en realidad el único hijo de , lo que demuestra que el algoritmo está equivocado nuevamente.n(n−1)/2 y z (0,y,z) 0 x y
Actualización: Vaya, acabo de notar la restricción de grado.
Afortunadamente, este no es un obstáculo importante. Reemplace el nodo con su árbol binario favorito, con los otros nodos como hojas en un orden desconocido, y luego revele este subárbol al algoritmo de reconstrucción. La reconstrucción del árbol binario resultante -nodo todavía requiere al menos consultas. De manera equivalente, la reconstrucción de un árbol binario -node requiere al menos consultas. (Estoy seguro de que una construcción más sutil mejoraría la constante).0 n−1 (2n−3) n(n−1)/2 m (m+3)(m+2)/8 Como señala Jagadish, esta generalización no funciona; Las consultas sobre nodos internos en el árbol imponen un orden en las hojas, lo que reduce el número de consultas necesarias.fuente
Anindya Sen y yo tenemos un artículo en ALT '13 donde damos un algoritmo para este problema. No sabemos si es posible un mejor algoritmo.O~(nn−−√)
fuente