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 ( a )s′( a )uns ( 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 crear un mapeo tal queF: P→ P
- Hay linealmente muchos , donde s ′ ( f ( a ) ) ≤ s ( a ) / 2 .a∈Ps′(f(a))≤s(a)/2
- Constantemente hay muchos , donde s ′ ( f ( a ) ) puede ser grande pero trivialmente como máximo n .a∈Ps′(f(a))n
- Otros elementos , s ′ ( f ( a ) ) ≤ s ( a ) .a∈Ps′(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)=∑e∈Spf(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.