2016-07-29 15 views
3

CLRSでは、155ページのmax-heapについて、max-heapifyの実行時間はT(n) = T(2n/3) + O(1)と記述されています。CLRSは、max-heapifyの実行時間が `T(n)= T(2n/3)+ O(1)`の繰り返しで記述されると完全に正確ですか?

私は、ノードの最も深いレベルが半分であるほぼ完全なバイナリツリー(常にヒープの場合)を持つ場合、最初の再帰呼び出しがサイズ​​のサブ問題にある理由を理解しています最も深いレベルでこれらのノードを含むサブツリーのルートである子を再帰する)。詳細な説明はhereです。

私が理解していないのは、最初の再帰呼び出しの後、サブツリーが完全なバイナリツリーになり、次の再帰呼び出しはサイズn/2の問題になります。

したがって、max-heapifyの実行時間は、再帰T(n) = T(2n/3) + O(1)によって記述されていると正確に述べていますか?

+1

CLRSのコピーは私にはありませんが、おそらくT(n)≤ T(2n/3)+ O(1)と言っていましたか? T(n)が単調であると仮定すると、控えめな上限が得られる。 – templatetypedef

+0

はい、私は@templatetypedefに意味があります。いずれかの方法で再帰を解くと、O(n)の実行時間が与えられます。 – evianpring

+1

@ジム・ミッシェル(Jim Mischel)重複すると思われる質問は全く同じ質問ではありません。私が言ったことは、私の質問の一部分の説明です。問題は、その最初の計算(最初の再帰呼び出しの場合、その重複した質問で説明されている)の後、再帰呼び出しのサブツリーが完全なツリー(半分ではない)になって以来、その計算はもう適用できません。 – evianpring

答えて

2

私のコメントを答えに変換する:n個のノードで最大ヒープを構築するのに必要な時間T(n)がnの非減少関数であると仮定すると、T(m)≤ T (n)は任意のm ≤ nです。あなたは2n/3の比率が最悪ケースの比率であり、再発の最初のレベルの後には到達しないということは正しいですが、上記の仮定の下では、T(n/2)≤

T(n)が≤ T(2N/3)+ O(1)

としてT(2N/3)ので、我々は再発上限することができ、厳密な等価「はdoesnの場合であってもホールド。それは、T(n)= O(log n)と結論づけるためにマスター定理を使用することができます。

関連する問題