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 , 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 )
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!
fuente
Respuestas:
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 .UN X PAG X un s ( a ) s′( a ) un s ( a ) s′( a ) a ∈ P
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 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) u W(u) u u
Ahora, en lugar de definir el rango en los nodos, definimos el rango en los bordes, que llamaron factor de progreso .
Y el potencial del árbol esS
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.
fuente