Estoy trabajando en un problema de programación y estoy en una barricada. Estoy tratando de encontrar una estructura de datos para mapear un entero arbitrario a otro entero. ¡Puede inclinarse a decir "Tabla Hash"! o "Search Tree!", y de hecho he pensado en esto (e incluso he intentado una implementación sucia). Pero, hay una trampa!Incremento de valores en un árbol de búsqueda después de la inserción de un par de clave-valor
Cada vez que inserte o elimine un valor de la asignación, también deseo aumentar/disminuir (en uno o en algunos desplazamientos arbitrarios) todos los valores superiores o iguales al valor insertado/eliminado.
Aquí hay un ejemplo.
Decir que tengo dos listas de números enteros que voy a utilizar para mis claves y valores en este mapa:
Keys: (1, 6, 18, 21, 24)
Vals: (2, 1, 3, 0, 4)
Ahora si añado un par clave-valor (7, 1), quiero incrementar todos los valores mayores que o iguales a 1 que resulta en esto:
Keys: (1, 6, 7, 18, 21, 24)
Vals: (3, 2, 1, 4, 0, 5)
y, posteriormente, si elimino el par clave-valor (21, 0), este es el resultado:
Keys: (1, 6, 7, 18, 24)
Vals: (2, 1, 0, 3, 4)
Esto es bastante trivial con un par de listas/matrices y algún procesamiento después de cada inserción/eliminación (es decir, revisar los valores y cambiarlos uno a uno).
Pero, estoy buscando una forma de hacerlo de manera más eficiente, tal vez sin tener que pasar por la lista completa de valores y aumentarlos/disminuirlos. Quizás al retrasar el incremento/decremento hasta que se haya solicitado un valor (que debería haberse incrementado/decrementado).
¿Alguna idea?
¿Cómo se modificaría para admitir una lista de omisiones en lugar del árbol binario equilibrado (dado que parece que el algoritmo de equilibrio debería ser complejo para manejar la gestión delta)? – jsherer
Tendría que pensar en eso (quizás mañana lo haga). Pero debería ser bastante fácil de hacer en un [árbol de chivos expiatorios] (http://en.wikipedia.org/wiki/Scapegoat_tree): simplemente evalúe los valores reales y reinicie los deltas en el subárbol que está reconstruyendo actualmente. – svick
@jordan, ver la edición. – svick