language agnostic - La mejor estructura de datos para una grilla 3D persistente inmutable
language-agnostic data-structures (1)
Intentaría un Octtree. Las coordenadas de límite de cada nodo están implícitas en la ubicación de la estructura, y cada nodo no terminal conserva 8 subárbol pero no datos. Por lo tanto, puede ''unirse'' para ganar espacio.
Creo que Inmutable e ilimitado son (generalmente) requisitos contradictorios.
De todos modos ... para hacer crecer un octtree debes reemplazar la raíz.
Se deben cumplir otros requisitos que plantee.
Estoy experimentando con la escritura de un juego en un estilo de programación funcional, que implica representar el estado del juego con estructuras de datos puramente funcionales e inmutables.
Una de las estructuras de datos más importantes sería una cuadrícula 3D que representa el mundo, donde los objetos se pueden almacenar en cualquier ubicación de cuadrícula [x, y, z]. Las propiedades que quiero para esta estructura de datos son:
- Inmutable
- Actualizaciones rápidas y persistentes , es decir, la creación de una nueva versión de toda la red con pequeños cambios es barata y se logra mediante el intercambio estructural. La cuadrícula puede ser grande, por lo que copiar-en-escribir no es una opción factible.
- Manejo eficiente de áreas dispersas / valores idénticos : las áreas vacías / despobladas no deben consumir recursos (para permitir grandes espacios abiertos). Puntos de bonificación si también es eficiente para almacenar grandes "bloques" de valores idénticos
- Sin límites : puede crecer en cualquier dirección según sea necesario
- Lecturas / búsquedas rápidas , es decir, puede recuperar rápidamente el (los) objeto (s) en [x, y, z]
- Consultas de volumen rápido , es decir, búsquedas rápidas a través de una región [x1, y1, z1] -> [x2, y2, z2], idealmente aprovechando la dispersión para que los espacios vacíos se omitan rápidamente
¿Alguna sugerencia sobre la mejor estructura de datos para usar para esto?
PD: Sé que esta no es la forma más práctica de escribir un juego, solo lo hago como una experiencia de aprendizaje y para aumentar mis habilidades con FP ......