4

バランスBSTは、(最大要素の検索と削除の両方を抽出することを意味する)をとすると、O(log(n))の時間が最大になります。 一方、Max-heapは、最大要素を抽出するのにO(log(n))時間もかかります。バランスの取れたバイナリ検索ツリー、またはmax要素を抽出するための最大ヒープはどちらが良いですか?

Extract-Max操作では、他の誰よりも先を見せている人はいますか?

+0

私はそれを知っています。しかし、もし我々が抽出 - 最大の一種の操作を実行する場合はどうなりますか?したがって、どちらが適切なデータ構造、バランスのとれたbstまたはmaxヒープになりますか。 –

+1

特殊な場合には、 'BST'は' Heap'よりも1回の操作しか取ることができず、そうでなければ両方が同じ数の操作で最大を抽出することができます。しかし、それ以上の操作はごくわずかです。 –

+2

@GAURANGVYASバランスの取れたBstの最も右のノードを見つけることはO(log(n))をとり、削除操作を実行するとO(1)をとるでしょう。 –

答えて

0

データ構造を考えるときは、時間と空間の両方の複雑さを考慮する必要があります。ここではスペースは同じですが、それでは時間に焦点を当ててみましょう:

バランスBST:

バランスBSTは、H = O(LG n)を維持し、すべての操作はO(LG n)が時間で実行されます⇒。

最大ヒープ

最大O(1)は、自分の時間の複雑さも同じであることを意味最大O(LG n)を

削除探します。

...最大ヒープまたはバイナリツリーがぴったりです。

はまた、この answerを読むことによって、あなたは同じ結論を出します。

ただし、既に構築されたBSTのバランスは、O(n)操作(Balancing a BST)であることに注意してください。だからもし私もそれをしなければならなかったら、私は最大のヒープのために行くだろう。 12:高度な使用方法について

は、Which data structure to use for accessing min/max in constant-time?


ソースをお読みください。

+0

これであなたの結論はどうなりますか? –

+0

そのような操作のためには、どちらも効率的です。私があなたであれば、実装が容易であるかどうか、またはそのようなデータ構造を提供するライブラリにアクセスできるかどうかがわかります。例えば、私が[tag:C++]で書いていて、私が好きなライブラリがあり、それがヒープを提供しているなら、私はそれに行くでしょう! – gsamaras

+0

私は木をバランスさせることがオーバーヘッドだと思う。そして、私は今の実装の単純さに心配していません。 –