Лучшая структура данных для неизменяемой постоянной трехмерной сетки

Я экспериментирую с написанием игры в стиле функционального программирования, который подразумевает представление состояния игры с помощью чисто функциональных, неизменяемых структур данных.

Одной из наиболее важных структур данных может быть трехмерная сетка, представляющая мир, где объекты могут храниться в любом месте сетки [x, y, z]. Свойства, которые мне нужны для этой структуры данных:

  • Неизменяемость
  • Быстрые постоянные обновления - то есть создание новой версии всей сетки с небольшими изменениями дешево и достигается за счет структурного разделения. Сетка может быть большой, поэтому копирование при записи нецелесообразно.
  • Эффективная обработка разреженных областей / одинаковых значений - пустые / ненаселенные области не должны потреблять ресурсы (для больших открытых пространств). Бонусные баллы, если он также эффективен при хранении больших «блоков» идентичных значений
  • Без ограничений - может расти в любом направлении по мере необходимости
  • Быстрое чтение / поиск - т.е. может быстро получить объект (s ) at [x, y, z]
  • Быстрые объемные запросы , т. е. быстрый поиск в области [x1, y1, z1] -> [x2, y2, z2], в идеале используя разреженность, так что пустые места быстро пропустил

Есть предложения по лучшей структуре данных для этого?

PSЯ знаю, что это, возможно, не самый практичный способ написать игру, я просто делаю это в качестве учебного опыта и расширяю свои возможности с помощью FP ......

8
задан mikera 25 September 2011 в 05:18
поделиться