¿Cuál es el tiempo de inicialización de un árbol de enlace cortado?

8

Link-cut tree es una estructura de datos inventada por Sleator y Tarjan, que admite varias operaciones y consultas en unbosque de nodos en el tiempo O ( log n ) . (Por ejemplo, el enlace de operacióncombina dos árboles en el bosque en uno, mientras que la operación de corte divide un árbol en el bosque en dos árboles).nO(logn)

Se conocen varias aplicaciones mediante el uso de árboles de corte de enlace, y aquí estoy particularmente interesado en la descomposición del separador de Goodrich , que dado un gráfico de plano de nodos G se puede obtener un árbol binario correspondiente donde los nodos son subgrafías de G y los hijos de un nodo H son los subgrafos de H divididas por el separador en H . Tal descomposición se puede construir fácilmente en el tiempo O ( n log n ) (ya que se puede encontrar un separador en el tiempo O ( n ) , y dado que el separador divide el gráfico de manera equilibrada, después denGGHHHO(nlogn)O(n) nivel de separaciones las hojas del árbol son de tamaño O ( 1 ) ). La contribución principal de Goodrich es que puede construir tal descomposición en el tiempo O ( n ) , manteniendo y reutilizando las estructuras de datos utilizadas para encontrar separadores en cada nivel.O(logn)O(1)O(n)

Una de las estructuras de datos que se utilizan en la construcción es, de hecho, el árbol de enlace cortado. En la página 7 del artículo de Goodrich, afirmó que la inicialización del árbol de enlace cortado se puede hacer a tiempo . Mientras reviso todos los documentos allí citados, me parece que si construimos un árbol de corte de enlace a través del enlace de operación , lleva tiempo O ( n log n ) en total.O(n)O(nlogn)

¿No entiendo algo? ¿Se puede realizar la inicialización de un árbol de enlace cortado en el tiempo ?O(n)

Hsien-Chih Chang 張顯 之
fuente

Respuestas:

6

Muchas gracias a Hsueh-I Lu , mi maestro en la Universidad Nacional de Taiwán, quien brinda la siguiente solución.

Resulta que la respuesta es bastante simple; En la inicialización de una estructura de datos, no tenemos que construir la estructura mediante las consultas y operaciones que admite . Por supuesto, no podemos realizar consultas durante la construcción como lo hacemos habitualmente si construimos el árbol mediante la operación de enlace ; pero en esta aplicación de descomposición del separador no la necesitamos.

Es decir, en la aplicación a la descomposición del separador, cuando tenemos que construir los árboles de corte de enlace L (T) para el árbol de expansión T en el gráfico de entrada G, en lugar de calcular las estructuras y los valores de los árboles L (T ) mediante la operación de enlace , calculamos directamente la descomposición del camino T-pesado del árbol T, y construimos la estructura de árbol binario correspondiente para cada camino, y pegamos los árboles binarios de acuerdo con la descomposición del camino. Todos los pasos se pueden hacer en tiempo lineal.

Para cada valor necesario en los nodos de L (T), dado que cada valor se puede calcular a partir de T en tiempo lineal (en esta aplicación), en lugar de asignar valores en estructuras de árboles binarios y actualizarlos al pegar los árboles, asignamos los valores calculados previamente directamente en los nodos de los árboles finales de corte de enlace L (T). Solo hay que asignar un tipo constante de valores, y nuevamente esto se puede hacer en tiempo lineal.

Hsien-Chih Chang 張顯 之
fuente
0

Capítulo 5.1 en "Estructuras de datos y algoritmos de red", que es la ref. 43 en el artículo que citó, parece que podría tener la respuesta:

http://books.google.com/books?id=JiC7mIqg-X4C&lpg=PP1&ots=8frbjj8vL0&dq=data%20structures%20and%20network%20algorithms&pg=PA59#v=onepage&q&f=false

... Al discutir este problema, usaremos 'm' para denotar el número de operaciones y 'n' para denotar el número de vértices (operaciones de maketree). Una forma de resolver este problema es almacenar con cada vértice su padre y su costo. Con esta representación, cada operación de maketree, enlace o corte toma O (1) tiempo, y cada operación findroot, findcost o addcost toma tiempo proporcionalmente a la profundidad del vértice de entrada, que es O (n) ...

Varias páginas sucesivas más están disponibles en la vista previa.

s8soj3o289
fuente
Este capítulo es bastante similar al papel de árbol cortado por enlace en sí; ver los últimos tres párrafos en p.365
Hsien-Chih Chang 張顯 之
O(n)O(logn)
no pude encontrar ninguna otra información para respaldar este reclamo, por lo que creo que deben ser, a. refiriéndose a esta construcción 'ingenua' (quizás erróneamente), b. refiriéndose a la operación 'make_tree' que simplemente inicializa un nuevo árbol de un nodo, o quizás c. combinando los dos. de lo contrario, salvo evidencia adicional, me inclino a pensar que está en lo correcto.
s8soj3o289