Я думаю, что вы оптимизируете слишком рано. Я рекомендую, чтобы вы запустили ваше приложение с кучей сопряжения, а затем профилировали его. Слишком много вещей, которые вы еще не знаете о данных и о том, как будет работать структура кучи.
Биноминальная куча, куча Фибоначчи, сопряженная куча и многие другие варианты довольно сложно проанализировать, поскольку их поведение во многом зависит от сочетания операций, порядка операций и характера данных. Например, в куче сопряжения клавиша увеличения равна O (1), если у узла нет дочерних элементов. И то, имеет ли узел дочерние элементы, зависит от того, где находится узел в куче и сколько раз были вызваны клавиша уменьшения или remove-first .
Я сомневаюсь, что вы найдете структуру кучи с удалением O (1) и логарифмической вставкой. Четная очередь Бродала , которая имеет O (1) для всего остального, является O (log n) для удаления. Отметим, однако, что хотя очередь Бродала асимптотически оптимальна, она, по словам самого Бродала, «довольно сложна» и «[не] практична на практике».
Запустите вашу программу. Профиль это. Затем решите, нужна ли вам более производительная структура очереди с приоритетами.