Приоритетная очередь с операциями уменьшения и увеличения

11

Fibonnaci кучного поддерживает следующие операции:

  • insert(key, data) : добавляет новый элемент в структуру данных
  • find-min() : возвращает указатель на элемент с минимальным ключом
  • delete-min() : удаляет элемент с минимальным ключом
  • delete(node) : удаляет элемент, на который указывает node
  • decrease-key(node) : уменьшает ключ элемента, на который указывает node

Все операции без удаления составляют (амортизированное) время, а операции удаления - O ( log n ) амортизированное время.О(1)О(журналN)

Существуют ли реализации приоритетной очереди, которые также поддерживают increase-key(node)в (амортизированное) время?О(1)

Джо
источник
@ Рафаэль, если вы увеличите ключ минимального элемента так, чтобы он стал теперь самым большим ключом, не сразу очевидно (по крайней мере для меня), что вам не нужно делать сверхпостоянную величину перебалансировки.
Джо

Ответы:

10

О(1) find-minincrease-keyinsertО(N)

vector<T>
fast_sort(const vector<T> & in) {
  vector<T> ans;
  pq<T> out;
  for (auto x : in) {
    out.insert(x);
  }
  for(auto x : in) {
    ans.push_back(*out.find_min());
    out.increase_key(out.find_min(), infinity);
  }
  return ans;
}
jbapple
источник
1
Я предполагал , что (de|in)crease-keyтолько сделал плюс или минус один.
Рафаэль
И существует ли DS, который позволяет увеличить ключ в постоянное время, но уменьшить в логарифмическом (или более)? (За небольшую кучу)
Гонсало Солера
2
@GonzaloSolera: доказательство невозможности в этом ответе не заботится о ключе уменьшения; O (1) find-min, клавиши увеличения и вставки уже являются проблемой вместе (и зависимость доказательства от вставки на самом деле не нужна; достаточно o (n) heapify, или мы можем, вероятно, повторно использовать одну и ту же кучу в нескольких сортировки, чтобы доказать, что это нарушает границы сортировки сравнения независимо от стоимости heapify или insert).
user2357112 поддерживает Monica
Хорошо, извини, я пропустил прочитать это. Спасибо за ваш комментарий!
Гонсало Солера