La estructura de datos que estaba buscando se llama montón paramétrico . Es decir, un montón en el que cada tecla es una función lineal (una línea) en lugar de una tecla fija. La query(x)
operación descrita anteriormente corresponde a una find-min(x)
operación en un montón paramétrico. Hay una estructura de datos relacionada, llamada montón cinético , que es un montón paramétrico donde el parámetro, tiempo, solo avanza hacia adelante. En otras palabras, una vez que tenemos una consulta find-min
( ), podemos preguntar ( t 2 ) solo si t 2 ≥ t 1 .t1find-min
t2t2≥t1
Como observó "alguien", el problema del montón paramétrico puede reducirse a un casco convexo plano dinámico mediante la dualidad de línea de punto.
La mayoría de los documentos que resuelven este problema utilizan una estructura de datos semidinámica "solo eliminaciones", y luego usan una técnica de dinamización de Bentley y Saxe para transformar su estructura de datos para también admitir inserciones. ( JL Bentley y JB Saxe, Problemas de búsqueda descomponibles. I: transformación de estático a dinámico ). Consulte también las notas de la conferencia de J ffeϵ para obtener una descripción general de cómo funciona este tipo de transformación.
El resultado clásico en esta área se debe a Overmars y van Leeuwen, Mantenimiento de configuraciones en el plano , que logra tiempo de consulta y O ( log 2 n ) (peor caso) tiempo de actualización. Si quisiéramos implementar una solución a este problema, esta es la versión adecuada.O(logn)O(log2n)
Sin embargo, posteriormente ha habido varias mejoras teóricas al resultado clásico. En FOCS 99, el papel de Chan
dio una estructura de datos con tiempo amortizado para las actualizaciones.O(log1+ϵn)
O(lognloglogn)O(lognlogloglogn)
O(logn)
Recientemente, Chan dio otros resultados relacionados con consultas dinámicas planas de casco convexo, incluyendo "Una estructura de datos completamente dinámica para mantener un conjunto de n puntos en el plano para que podamos encontrar los bordes del casco convexo que intersecan una línea de consulta".
Θ(logn/loglogn)O(lognloglogn)O(log2n)