Función potencial del árbol de separación: ¿por qué sumar los registros de los tamaños?


16

Estoy enseñando un curso sobre estructuras de datos y cubriré árboles de despliegue a principios de la próxima semana. He leído muchas veces el documento sobre árboles de separación y estoy familiarizado con el análisis y la intuición detrás de la estructura de datos. Sin embargo, parece que no puedo encontrar una intuición sólida para la función potencial que Sleator y Tarjan usan en su análisis.

El análisis funciona asignando a cada elemento del árbol un peso arbitrario wyo , luego configurando el tamaño de un nodo para que sea la suma de los pesos de los nodos en el subárbol enraizado en . Luego toman el registro de este valor para obtener el rango del nodo, entonces . Finalmente, la función potencial del árbol se define como la suma de los rangos de todos los nodos.x r ( x ) r ( x ) = log s ( x )s(X)Xr(x)r(x)=logs(x)

Entiendo que esta función potencial funciona correctamente y puedo seguir el análisis, pero no veo por qué elegirían este potencial. La idea de asignar un tamaño a cada nodo tiene sentido para mí, ya que si sumas los tamaños, obtienes la longitud de la ruta ponderada del árbol. Sin embargo, no puedo entender por qué decidieron tomar los registros de los pesos y luego sumarlos; no veo ninguna propiedad natural del árbol a la que corresponda.

¿La función potencial del árbol extendido corresponde a alguna propiedad natural del árbol? ¿Hay alguna razón particular, aparte de "funciona", para que ellos elijan este potencial? (Tengo curiosidad específica porque este conjunto de notas del curso menciona que "el análisis es magia negra. [No] idea de cómo se descubrió")

¡Gracias!


He escuchado esta explicación de "es magia negra" también. ¿Intentaste enviar correos electrónicos a Sleator y Tarjan?
jbapple

@jbapple Todavía no los he enviado por correo electrónico, ya que esperaba que "la comunidad en general" pudiera ayudar. También pensé que hacer ping a alguien sobre el trabajo que hicieron hace 30 años no necesariamente generaría una respuesta. :-)
templatetypedef

No estoy muy familiarizado con él, pero solo miro el documento de manera aproximada, creo que la única razón es que quieren tener pequeños cambios por las funciones potenciales después de la operación de separación, por ejemplo, si reemplazamos con log log o con l o g * parece todavía todo funciona bien (yo no lo demuestre, pero parece sólo necesita un mathwork simple). Pero si lo dejamos como s , entonces ese análisis de amortización es correcto, pero no es un buen límite superior (algo así como ( m + n ) 2 ). No está relacionado con ninguna propiedad del árbol en absoluto. loglogloglogs(m+n)2
Saeed

Siempre he marcado en negro el rango de x como "la profundidad del árbol de búsqueda binario ideal que contiene los descendientes de x", pero eso es más una intuición nemotécnica que útil.
Jeffε

Respuestas:


13

Cómo encontrar el potencial de la suma de registros

Consideremos el algoritmo BST que para cada acceso para el elemento x , reorganiza solo elementos en la ruta de búsqueda P de x llamada before-path, en algún árbol llamado after-tree. Para cualquier elemento a , sea s ( a ) y s ( a ) el tamaño del subárbol enraizado en un antes y después del reordenamiento respectivamente. Así s ( una ) y s ' ( una ) pueden ser diferentes si y sólo si una P .UNXPAGXuns(un)s(un)uns(un)s(un)unPAG

Además, solo reorganiza constantemente muchos elementos en la ruta de búsqueda en cualquier momento. Llamemos a este tipo de algoritmo algoritmo "local". Por ejemplo, splay tree es local. Solo reorganiza a lo sumo 3 elementos a la vez por zig, zigzig y zigzag.UN

Ahora, cualquier algoritmo local que cree "muchas" hojas en el árbol posterior, como el árbol splay, tiene la siguiente propiedad agradable.

Podemos crear un mapeo tal queF:PAGPAG

  1. Hay linealmente muchos , donde s ( f ( a ) ) s ( a ) / 2 .aPs(f(a))s(a)/2
  2. Constantemente hay muchos , donde s ( f ( a ) ) puede ser grande pero trivialmente como máximo n .aPs(f(a))n
  3. Otros elementos , s ( f ( a ) ) s ( a ) .aPs(f(a))s(a)

Podemos ver esto desplegando el cambio de ruta de búsqueda. El mapeo es en realidad bastante natural. Este artículo, A Global Geometric View of Splaying , muestra con precisión los detalles de cómo ver la observación anterior.

Después de conocer este hecho, es muy natural elegir el potencial de suma de registros. Porque podemos usar el cambio potencial de los elementos de tipo 1 para pagar la reorganización completa. Además, para los elementos de otro tipo, tenemos que pagar por el cambio potencial como máximo logarítmico. Por lo tanto, podemos derivar el costo amortizado del logaritmo.

Creo que la razón por la cual la gente piensa que esto es "magia negra" es que el análisis anterior no "revela" el cambio general de la ruta de búsqueda, y ve lo que realmente sucede en un solo paso. En cambio, muestran el cambio de potencial para cada "transformación local", y luego muestran que estos cambios potenciales pueden ser mágicamente telescópicos.

PD: El documento incluso muestra alguna limitación del potencial de suma de registros. Es decir, se puede demostrar la satisfacción del lema de acceso a través del potencial de suma de registros solo para el algoritmo local.

Interpretación del potencial de la suma de registros

Hay otra manera de definir el potencial de BST en el artículo de Georgakopoulos y McClurkin, que es esencialmente el mismo que el potencial de la suma de registros en el artículo del Sleator Tarjan. Pero esto me da una buena intuición.

Ahora cambio a la notación del papel. Asignamos un peso a cada nodo u . Sea W ( u ) la suma del peso del subárbol de u . (Esto es solo el tamaño del subárbol de u cuando el peso de cada nodo es uno).w(u)uW(u)uu

Ahora, en lugar de definir el rango en los nodos, definimos el rango en los bordes, que llamaron factor de progreso .

pf(e)=log(W(u)/W(v)).

Y el potencial del árbol esS

Φ(S)=eSpf(e).

Este potencial tiene una interpretación natural: si durante una búsqueda atravesamos un borde reducimos el espacio de búsqueda de los descendientes de u a los descendientes de v , una reducción fraccional de W ( u ) / W ( v ) . Nuestro factor de progreso es una medida logarítmica de este 'progreso', de ahí su nombre. [De la sección 2.4](u,v)uvW(u)/W(v)

Observe que esto es casi igual al potencial de Sleator Tarjan, y es aditivo en los caminos.

editar: Resulta que esta definición alternativa y la intuición detrás de ella fueron descritas hace mucho tiempo por Kurt Mehlhorn. Ver su libro "Estructuras de datos y algoritmos" Volumen I, Sección III. 6.1.2 Splay Trees, páginas 263 - 274.

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.