Ваша проблема заключается в том, чтобы сделать очередь частично стойкой структурой данных.
Частично постоянный означает, что вы можете запросить любую версию, но вы можете делать обновления только в последней версии.
Пару лет назад я произнес речь о постоянстве структуры данных указателя. Он был основан на "Making data structures persistent" Дрисколлом, Сарнаком, Слейтором и Тарьяном.
Очевидно, что любая очередь может быть реализована как связанная структура данных. Если вам нужна простейшая практическая версия, вас может заинтересовать метод «Метод жирного узла», который описан на стр. 91 в вышеприведенном PDF-документе.
Идея состоит в том, чтобы хранить в каждом узле несколько указателей на следующие элементы, соответствующие различным версиям очереди. Каждому указателю присваивается номер версии, называемый timestamp.
Для каждой операции вставки или удаления вы обновляете указатели только в узлах, затронутых операцией обновления.
Для операции поиска в версии очереди i-th
вы просто следуете указателям с наибольшей меткой времени, не превышающей i
. Вы можете найти указатель, чтобы следовать, используя двоичный поиск.
В данном PDF-документе также существует более сложный, но еще более эффективный метод, называемый «Метод копирования узлов».
Ваш вопрос слишком открытый. Какую информацию вам нужно отслеживать? Вас просто интересует длина очереди с течением времени или вы хотите сохранить информацию о конкретном наборе сущностей в очереди в любой момент времени? Если последний, у кого есть привилегии выделения/удаления для этих объектов, т. Е. Вы можете просто поддерживать набор ссылок или вам нужно клонировать их, чтобы убедиться, что вы все еще можете восстановить очередь, если они были освобождены в другом месте? Наконец, в соответствии с ожиданиями stackoverflow, что вы пробовали? – pjs
@pjs Вопрос очень точный. Это не его вина, что вы не можете прочитать четкое описание и настаивать на создании новых требований, которых там нет. – btilly
@btilly Вопрос не является точным, если мне нужно делать предположения, когда я рассматриваю возможные реализации. Я постоянно работаю с моделями очередей, и в некоторых сценариях вас интересует только то, сколько объектов присутствует, а в других случаях вам нужно знать их индивидуальные особенности. – pjs