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


11

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

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

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

Чи є реалізація черги з пріоритетом, яка також підтримується 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.