повысить производительность циклического буфера или сортировки кучи

0

Мне нужно отсортировать объекты, которые приходят к процессу X перед их обработкой.
Объект сортируется с отметкой времени - 64-битным числом.
Когда объект истекает (несколько милли) и сортируется, процесс X начинает смотреть на них.
В большинстве случаев объект сортируется, между 3% и 5% объекты не работают.

Поэтому мне нужна структура, которая позволяет мне:
- быстро вставить элементы
- быстро удалить устаревшие элементы

Что должно быть лучше для их сортировки, с точки зрения производительности?
Я начал реализовывать с boost :: round_buffer.
Если boost :: heap лучше для этого, то какой boost :: heap я должен использовать? Потому что есть несколько (фибоначчи, биномиальная, приоритетная очередь...)
Я использую boost 1_49, но я также могу использовать более новую версию.

С круговым буфером я вставляем большинство элементов в начале буфера. Но в некоторых случаях это может быть O (n).
Но для принятия тайм-аута элемент O (1)

Теги:
sorting
boost
heap
circular-buffer

1 ответ

2

Вам нужно будет измерить, но я бы предположил, что std::priority_queue<T> имеет справедливый шанс быть наиболее эффективным. Использование любой другой кучи не принесет вам много пользы, потому что вам не нужны дополнительные операции (изменение приоритета элемента), но возможность использовать эти операции значительно увеличивает накладные расходы.

Особенно, когда размер T немного больше, но даже если это просто int, вы можете использовать d-кучу с d == 8: хотя это приводит к большему количеству сравнений, это уменьшает количество перемещений объекта,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню