¿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(log⁡n)

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(nlog⁡n)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(log⁡n)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(nlog⁡n)

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

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.


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.


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(log⁡n)

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.