Я делаю отменную структуру данных с неизменной структурой дерева в C++. Делясь неизмененными субномами, я мог бы получить новое неизменяемое дерево довольно эффективно. На самом деле гораздо эффективнее, чем изменяемое дерево при создании моментального снимка отмены. Тем не менее, мне все равно нужно воссоздать все узлы от root до обновления целевого объекта. Это доступно, но я хочу быть лучше.Эффективное случайное обновление на неизменяемом дереве
Я смотрел структуру застежки -молнии. Насколько я понимаю, Zipper специализируется на конкретной позиции узла и нуждается в реструктуризации, если целевая точка изменена. Было бы дороже, потому что мне нужно обновить случайный узел.
Какая структура доступна для моих нужд? Более эффективное случайное обновление неизменяемого дерева.
Update
Как уже упоминался @SB, изменяемая структура с обратной операцией будет соответствовать моим потребностям, но я хочу, чтобы избежать изменяемых структур из-за твердости отладки и поддержание корректности обратной операции. Поэтому я больше не ищу изменчивого подхода.
Почему откат снимок стоит дорого? Разве это не упорядоченный список «действий» - т. Е. Структура с операцией и значением? Затем вы можете отменить, удалив последний элемент списка и выполнив обратное op w/this value? то ваше дерево может оставаться изменчивым и следовать обычной логике вставки/удаления. –
@SB На самом деле это действительно подходит для моей ситуации. Но ... это моя ошибка, что я забыл, почему я хотел избежать изменчивой структуры - твердость отладки и правильность обратной работы. Упоминание изменчивого метода - моя ошибка. Я сожалею об этом, и я удалю упоминание. – Eonil