En otras palabras, ¿podemos modelar muchas a muchas relaciones en una estructura de datos persistente de manera eficiente?¿Hay una estructura de datos persistente multimap bidireccional?
Se sugirió un par de multimaps unidireccionales. Sin embargo, no estoy seguro de cómo esto funcionaría bien para su eliminación en una estructura de datos persistente. Tomemos el caso donde tenemos las claves 1..4 a valores "1" ... "4" y digamos que cada una se refiere a todas las demás, entonces tenemos dos mapas que se parecen mucho en ambas direcciones:
{1 => ["2", "3", "4"], 2 => ["1", "3", "4"], ...} {"1" => [2,3 , 4], "2" => [1,3,4], ...}
Ahora queremos eliminar completamente el elemento 1 del sistema. Eso requiere cambiar un nodo en el primer mapa, pero requiere cambiar n-1 nodos en el segundo. Para n en los miles (que es probable en el caso en el que estoy considerando esto), ¿no sería bastante caro? ¿O es un multimap optimizado para manejar ese tipo de cambio? Es un caso patológico, pero aún así ...
Quadtrees parece una idea fascinante. Voy a pensar un poco más.
Soy lo suficientemente curioso, me gustaría una referencia a la estructura de datos alucinante, incluso si no está en inglés. – mentics
@taotree> Acabo de agregar un código para ello. ¿Qué piensas? – gasche
Interesante, aunque noto que no hay una función de eliminación, es donde veo que hay un desafío para este tipo de cosas. Además, parece que las claves y los valores deben ser de tipos diferentes, o al menos no pueden tener los mismos valores en ambos. – mentics