Персистентность

Оглавление

Персистентные структуры данных - это структуры данных, которые позволяют хранить все предыдущие версии структуры, а не только последнюю. Это удивительно сильная концепция, которая не только интересна с теоретической точки зрения, но и полезна для сложных олимпиадных задач (и конечно для реальных приложений).

Есть несколько уровней персистентности:

  • частичная (англ. partial) - можем получить доступ ко всем версиям структуры, но можем изменять только последнюю
  • полная (англ. full) - можем получить доступ ко всем версиям структуры и изменять любую из них
  • конфлюэнтная (англ. confluent) - это когда мы можем получать доступ ко всем версиям и изменять любую из них, а так же объединять две версии в одну (обычно это естестенная операция merge, например для декартового дерева)

Про полную персистентность мы будем думать как о новой операции «откатить структуру в версию $V_k$» с возможностью дальнейшего изменения. Нотация $V_k$ будет идти сквозь все разделы и обозначать версию структуры данных, которая была получена после $k$ изменений.

Далее мы по очереди разберем стандартные структуры данных, которые можно сделать персистентными, а так же разберем общий подход к созданию персистентных структур данных.