Я подписываюсь на фид данных и из этого создаю и поддерживаю структуру, используя значения индекса в сообщениях INSERT / DELETE. Я хотел бы спросить собравшихся cognoscenti, знают ли они о каком-либо алгоритме, который может эффективно обрабатывать частичные обновления - обычно пакетные обновления содержат от двух до шести таких сообщений.
Расчетный размер массива составляет около 1000 элементов.
Пакетные обновления поступают в виде списка сообщений, упорядоченных по индексу, которые предусматривают вставку или удаление элемента по заданному индексу. Я ожидаю, что большая часть оттока в массиве будет ближе к его началу, чем к концу.
Мне приходит в голову, что с некоторой базовой обработкой я могу определить диапазон, на который влияет пакет, и общую дельту размера, и, следовательно, переместить незатронутую хвостовую часть массива только один раз.
Точно так же я мог бы сохранить определенное количество свободного места до первого элемента и после последнего элемента, чтобы выполнить наименьшее количество копий.
Другие оптимизации включают распознавание обновлений, таких как:
DELETE 10, INSERT 10 - effectively a replace which requires no copying
INSERT 10, DELETE 11 - as above
DELETE 10, DELETE 10, DELETE 10 - bulk deletion can be optimised into one copy operation
INSERT 11, INSERT 12, INSERT 13 - bulk insertion can be optimised into one copy operation
и так далее.
Тем не менее, я настороженно отношусь к накладным расходам при выполнении шага распознавания - он пахнет упреждениями и обратными путями, что может занять больше времени, чем простое выполнение копирования.
Учитывая ожидаемый размер массива, древовидные структуры кажутся тяжеловесными: некоторые базовые тесты производительности предполагают, что двоичные или самобалансирующиеся деревья (в данном случае реализация списка красно-черных деревьев) начинают демонстрировать преимущества в производительности только после 15 КБ. - 20 тыс. Элементов: копии массива значительно быстрее при меньших размерах. Я должен, вероятно, добавить, что я использую Java для этой реализации.
Любые намеки, советы или предложения будут приветствоваться.
Приветствия
Mike