キーの減少操作とキーの増加操作の両方を含む優先キュー


11

A 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 最小要素のキーを増やして最大のキーにした場合、(少なくとも私には)非常に一定量の再調整を行う必要がないことはすぐにはわかりません。
Joe

回答:


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プラスマイナス1 だと思っていました。
ラファエル

また、一定の時間でキーの増加操作を可能にし、対数(またはそれ以上)で減少するDSは存在しますか?(最小ヒープの場合)
Gonzalo Solera

2
@GonzaloSolera:この回答の不可能性の証明は減少キーを気にしません。O(1)find-min、increase-key、およびinsertはすでに問題となっています(そして、挿入に対する証明の依存は実際には必要ありません。O(n)heapifyで十分です。または、同じヒープを複数で再利用できますソートは、ヒープ化または挿入のコストに関係なく、比較ソート境界に違反していることを証明します)。
user2357112はモニカ2018

申し訳ありませんが、私はそれを読み逃しました。ご意見をありがとうございます!
ゴンサロソレラ2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.