私は、最大両端ヒープを実装しています。これはダブルエンド優先順位キューの一種です。 min-maxヒープの詳細については、hereを参照してください。最小最大ヒープでの最大操作の削除
挿入操作と削除操作のコードは単純でネット上で利用できます。しかし、私はまた、delete-max操作をmin-maxヒープで実装しようとしています。
最初は、max-minヒープでdelete-maxヒープと同じになると感じました(最大要素を含むmin-maxヒープのサブツリーを考えてみると、 minヒープ)。したがって、実装はmin-maxヒープのdelete-minとシンプルで類似しています。
しかし、問題がある:
70は、最大要素であり、最小 - 最大ヒープの最後の要素(12)はしていないが、上記の図に見られるように70を含むサブツリーです。したがって、70の削除後に左のサブツリーに残っているギャップを置き換えるために使用できますか?
max-minヒープのdelete-maxプロシージャを実行し、ギャップを置き換えるために20を使用すると、ヒープに挿入される次の要素は10の右の子になり、永遠に9の右の子供が存在しません。
だから誰でも助けてくれますか?
ランダムキーの削除に関する質問は、delete-maxの後にヒープを修正する方法に関する質問とは異なりますので、別の質問として尋ねます。 – templatetypedef
@templatetypedefこの問題を「最大要素を削除する方法」に焦点を当てて編集しました。ここでは、「min-maxヒープからノードを削除する方法」に関する提案された解決策を使って特定の質問を見つけることができます:http://stackoverflow.com/q/39392864/3924118 – nbro