Hay una estructura de datos llamada treap: es un árbol de búsqueda binaria aleatorio, que también es un montón de las denominadas "prioridades" generadas aleatoriamente.Treap con claves implícitas
Hay una variación de esta estructura, donde las claves son implícitas, no se almacenan en el árbol, pero consideramos que el índice ordenado del nodo en el árbol es la clave de este nodo. Necesitamos almacenar el tamaño del subárbol en cada nodo en lugar de la clave. Esta técnica nos permite pensar en la detección como algún tipo de matriz, que admite muchas operaciones en el tiempo O (log N): inserción, eliminación, reversión de subcampo, cambio en el intervalo, etc.
Conozco un poco sobre esta estructura, pero no tanto. Intenté buscarlo en Google, pero solo encontré muchos artículos sobre el propio engaño, pero nada acerca de este "fraude implícito"/"lista indexada". Incluso no sé su nombre, porque mi lengua materna no es el inglés y la conferencia que escuché utilizó el término nativo de estructura, no el término original en inglés. Este término nativo se puede traducir directamente en inglés como "Treap on the implicit keys" o "Cartesian tree on the implicit keys".
¿Alguien puede señalarme el artículo sobre esta estructura o decirme su nombre original? Gracias.
P.S. Lo siento si mi inglés no era lo suficientemente comprensible.
UPD: Alguna explicación extra sobre la estructura que estoy buscando.
Considere un tratamiento habitual con prioridades y claves elegidas al azar, que son datos reales del usuario almacenados en el árbol. Entonces imaginemos que tenemos otra información de usuario almacenada en cada nodo, y las claves no son más que las claves de búsqueda. El siguiente paso es calcular y mantener el tamaño del subárbol en cada nodo: tenemos que actualizar este parámetro después de cada Combinar/Dividir/Agregar/Eliminar, pero nos permite encontrar, por ejemplo, el elemento Kth del árbol en O (log N) hora.
Cuando tenemos tamaños de subárbol en cada nodo, podemos tirar las claves e imaginar que el tratamiento representa una matriz de datos de usuario en el recorrido inorden. El índice de matriz de cada elemento se puede calcular fácilmente a partir de los tamaños de subárbol. Ahora podemos agregar/eliminar un elemento en el medio de la matriz o dividir esta matriz, todo en tiempo O (registrar N).
También podemos realizar operaciones "múltiples", por ejemplo, agregar un valor constante a todos los elementos de nuestra "matriz". Para implementar esto, tenemos que retrasar esta operación, agregar un parámetro en cada nodo que represente una constante diferida que se debe agregar "más adelante" a todos los elementos del subcampo de este nodo, y "empujar" los cambios hacia arriba como necesario. Agregar una constante a subcampo o pintar (marcar) el subcampo puede retrasarse de esta manera, como invertir el subcampo (aquí la información retrasada en el nodo en el subarreglo de bit "tiene que invertirse"), y así sucesivamente.
UPD2: Aquí está code snippet - parte de la pequeña cantidad de información que he encontrado. No se da cuenta del cirílico :) Las palabras "с неявным ключом" significan en traducción directa "con clave implícita".
Estoy hablando exactamente de la corrección, no de la BST al azar. Según lo veo, el tratamiento tiene claves y prioridades: la clave son los datos reales del usuario almacenados en el árbol, y la prioridad es un parámetro interno elegido al azar. Treap es BST en las teclas y apila las prioridades simultáneamente. Soy ucraniano, la conferencia fue en ruso, conferencista - Vitaly Goldstein, ganador de la medalla ACM ICPC, ex practicante de Google, actualmente trabaja en Yandex. La conferencia se escuchó en la escuela de programación ACM invernal de Kharkov, si lo sabes. Voy a compartir algunas explicaciones adicionales sobre esta estructura en la UPD de mi publicación. – Skiminok
@Skiminok Estoy interesado en una descripción de esta técnica. ¿Podrías enviarme un enlace si lo tienes a mano? ¡Gracias! – dhruvbird
@dhruvbird El documento original sobre las trampas y las BST aleatorias es http://people.ischool.berkeley.edu/~aragon/pubs/rst96.pdf. Pero describe solo la definición básica y las operaciones. He cubierto todo el material sobre las trampas y sus aplicaciones de las que tengo constancia (incluidas las trampas con claves implícitas) en la serie de tres artículos: [# 1] (http://habrahabr.ru/blogs/algorithm/101818/), [# 2] (http://habrahabr.ru/blogs/algorithm/102006/), [# 3] (http://habrahabr.ru/blogs/algorithm/102364/). Solo en ruso, por desgracia. – Skiminok