ポテンシャル関数バイナリヒープ抽出最大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)=∑i∈H2wi.

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

2log⁡(n)O(1)

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


Δ(Φ(H)))Δ

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

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

O(log⁡n)O(1)

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