ウィキペディアによると、これは最小ヒープ:https://en.wikipedia.org/wiki/Min-max_heapです。私はO(n)にこのmin-maxヒープを構築する方法があるかどうか疑問に思っていました。私はminヒープとmaxヒープの両方でこれを行うことができると知っていますが、これに対するアプローチは何か分かりません。要素を挿入するとO(log n)時間の複雑さがかかり、この種のツリーはO(n log n)より効率的に構築できないような気がしますが、誰かが答えを持っていることを願っています。ありがとう。O(n)時間の複雑さで最小最大ヒープを構築する
0
A
答えて
1
はい、可能です。 ビルド・ヒープループでは、最小ヒープまたは最大ヒープと同様に、単にを呼び出します。その関数は、それが最小レベルか最大レベルかに応じて、それに応じてアイテムを移動します。
一般的な情報については、オリジナルペーパーMin-Max Heaps and Generalized Priority Queuesを参照してください。このペーパーでは、ビルドヒープは実装されていませんが、を呼び出す独自のコードを記述すると、期待通りに機能します。すなわち:
for i = A.length/2 downto 0
TrickleDown(i)
はi
が分レベルまたは最大レベルにあるかどうかを判断し、適切な方法、TrickleDownMin
又はTrickleDownMax
を呼び出します。
関連する問題
- 1. ヒープを使用したKth最小の時間複雑度
- 2. 最小/最大バイナリヒープを構築する
- 3. 時間Oの複雑さ(n(nはをログ)ログ)+ nはO(L)
- 4. AVLツリーは複雑にO(n)で構築できますか?
- 5. O(1)時間の平衡二分探索時間の最小/最大要素
- 6. 時間複雑度:O(logN)またはO(N)?
- 7. K最近点。時間複雑度O(n)ではなく、O(nLogn)である。どうやって?
- 8. このコードセグメントの時間複雑度はO(n^2)かO(n^3)
- 9. mergesortの複雑さO(nlogn)+ O(n)?
- 10. 最小最大ヒープでの最大操作の削除
- 11. O(n)時間の複雑さを持つN-queenについての説明?
- 12. なぜ配列挿入の時間複雑さはO(n)で、O(n + 1)ではないのですか?
- 13. O(n)時間未満でデータ構造内の要素間の最小の差を得る
- 14. 複雑さO(log(n))はO(sqrt(n))と等価ですか?
- 15. ハッシュテーブル操作の時間複雑度はO(1)またはO(N)ですか?
- 16. 最小最大ヒープの最大要素の削除
- 17. O(1)、O(n log n)、O(log n)の複雑さを持つアルゴリズムの例
- 18. バイナリツリーO(n)のInOrder Treeトラバーサルの時間複雑度?
- 19. メジアンJavaの最大ヒープと最小ヒープ実装
- 20. O(N)単純なPython関数の時間複雑度
- 21. ヒープをヒープ化する時間の複雑さは何ですか
- 22. ヒープのアルゴリズム時間の複雑度
- 23. 時間の複雑さn ^(O(k))は何を表していますか?
- 24. 時間複雑度がO(sqrt(n)* log(n))のアルゴリズムはありますか?
- 25. SWIFT 2.2 DatePickerの最小時間と最大時間
- 26. 最小ヒープを超える最大ヒープを使用するタイミングは?
- 27. 次のスニペットO(n^2)の時間複雑さはありますか?
- 28. このコードを最小ヒープから最大ヒープに変更するには
- 29. 特定のアルゴリズム - 複雑さはO(N)
- 30. O(n^3)未満の最大フローアルゴリズム
このwikipediaの記事は、FloydのO(n)アルゴリズムを使ってmin-maxヒープを構築できることを示しています。そのアルゴリズムがなぜO(n)であるのかを説明する参考文献もあります。 – rici
私は本当にそのalogirthmを理解しようとしましたが、アルゴリズムを勉強し始めたばかりなので、私が理解することはかなり難しいので、ここで助けを求めていたのです。 – Cherry
簡単なアルゴリズムを理解する最善の方法は、鉛筆と紙です。いくつかのインプットで試してみてください。おそらくどのように動作するのでしょうか。 (これは、ヒープソートアルゴリズムでヒープを構築するのに使用されるのと同じアプローチです。これは簡単に実行できます)。 – rici