ポテンシャル関数バイナリヒープ抽出最大O(1)


10

最大ヒープが償却時間で完了するように、最大​​ヒープの潜在的な関数を理解する手助けが必要です。潜在的な方法をよく理解していないことを付け加えておきます。O(1)

抽出のコストを削減するために、挿入関数はさらに「支払う」必要があることを知っています。これは、ヒープの高さに関するものでなければなり(if log n がヒープの高さを与える場合挿入は2 log n またはn k = 1 2 log k log(n)2log(n)k=1n2log(k)

回答:


13

以下を試してください:

ヒープHの要素iの重みは、対応するバイナリツリーでのその深さです。したがって、ルートの要素の重みは0で、その2つの子の重みは1などです。潜在的な機能として定義するwiiH

Φ(H)=iH2wi.

dlog(n)2dO(1)O(logn)Φ(H)O(log(n)+Δ(Φ(H)))=O(logn)

2log(n)O(1)

潜在的な機能に関する一般的な質問がある場合は、これを別の質問として提示する必要があります。


Δ(Φ(H)))Δ

Δ(Φ(H))2log(n)

O(1)の修理はどうですか?ヒープの修復における潜在的な機能の使用は何ですか?明確にして
いただけ

O(logn)O(1)

@ A.Schulzつまり、これは本質的に、潜在的な関数が2logn減少するたびに(修復時に等しく増加することもしないこともある)、抽出操作がn回行われることを意味します。最終的にツリーにノードがなくなるため、そのようなものの全体的な複雑さは一定の時間になります。私は正しいですか?
Sohaib 2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.