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


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;
}

1
Я предполагал , что (de|in)crease-keyтолько сделал плюс или минус один.
— Рафаэль

И существует ли DS, который позволяет увеличить ключ в постоянное время, но уменьшить в логарифмическом (или более)? (За небольшую кучу)
— Гонсало Солера

2
@GonzaloSolera: доказательство невозможности в этом ответе не заботится о ключе уменьшения; O (1) find-min, клавиши увеличения и вставки уже являются проблемой вместе (и зависимость доказательства от вставки на самом деле не нужна; достаточно o (n) heapify, или мы можем, вероятно, повторно использовать одну и ту же кучу в нескольких сортировки, чтобы доказать, что это нарушает границы сортировки сравнения независимо от стоимости heapify или insert).
— user2357112 поддерживает Monica

Хорошо, извини, я пропустил прочитать это. Спасибо за ваш комментарий!
— Гонсало Солера
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.