Черга з пріоритетністю як з операціями зменшення, так і збільшенням


11

Fibonnaci кучного підтримує наступні операції:

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

Усі операції без видалення - час (амортизований), а операції видалення - амортизований час.O(1)O(log⁡n)

Чи є реалізація черги з пріоритетом, яка також підтримується increase-key(node)в (амортизований) час?O(1)


@Raphael, якщо ви збільшите ключ від мінімального елемента, щоб він став найбільшим ключем, це не відразу очевидно (принаймні для мене), що вам не доведеться робити надмірно постійну кількість відновлення.
— Джо

Відповіді:


10

Припустимо , у вас є черги пріоритету , який має , і . Далі йде алгоритм сортування, який займає час :O(1) find-minincrease-keyinsertO(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) перебіг достатній, або ми, ймовірно, можемо повторно використати ту саму купу над декількома сортування, щоб довести, що це порушує порівняльні межі сортування, незалежно від вартості набору або вставлення).
— user2357112 підтримує Моніку

Гаразд вибачте, я пропустив це прочитати. Дякуємо за Ваш коментар!
— Гонсало Солера
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.