web-dev-qa-db-ja.com

C ++の優先度キューの時間の複雑さ

ヒープの作成にはO(n)時間かかりますが、ヒープ(または優先度キュー)への挿入にはlog(n)時間かかります。n個の入力を取得して優先度キューに挿入すると、操作の時間の複雑さO(n)またはO(n * log(n)))。

また、ヒープ全体を空にする場合(つまり、n個の削除)にも同じ結果が保持されますか?

6
Kshitij Kohli

サイズnの配列があり、すべてのアイテムからヒープを一度に構築する場合、FloydのアルゴリズムはO(n)複雑さでそれを行うことができます。 ヒープの構築 。これは、コンテナパラメータを受け入れる std :: priority_queueコンストラクタ に対応します。

nアイテムを一度に1つずつ追加する空の優先度キューがある場合、複雑さはO(n * log(n))です。

したがって、キューを作成する前にキューに入れるすべてのアイテムがある場合、最初の方法の方が効率的です。キューを維持する必要がある場合は、2番目の方法(アイテムを個別に追加)を使用します。つまり、一定期間にわたる要素の追加と削除です。

優先キューからnアイテムを削除することもO(n * log(n))です。

std :: priority_queue のドキュメントには、すべての操作の実行時の複雑さが含まれています。

10
Jim Mischel