私は問題を解決するために最小ヒープを学習して実装しようとしています:doubleを作成し、それらをソートされた配列に挿入するループ、C
基本的に、私は最小から最大にソートされたダブルのセットから始めます。次に、doubleを(おそらくランダムに)生成し、新しく生成されたdoubleを、ソートしたままセットに追加する必要があります。また、ダブルを挿入するたびに、セットから最小のダブルを削除します。
(編集-セットを完全にソートする必要はありません。目標は、doubleを挿入するたびに最小要素を検索して削除できるようにすることです。セットをソートしたままにすることが、私の最初の素朴な解決策でした。)
最小ヒープが実行されたようなもののように聞こえます。
試み
Cでは、配列サイズが事前に宣言されているため、長さ=最終的に得られるdoubleの最大数の配列を作成する必要があります。次に、この配列のすべてのエントリに値max_doubleを入力します。
ここでガイドとして説明されているメソッドを使用して:http://opendatastructures.org/versions/edition-0.1e/ods-java/10_1_BinaryHeap_Implicit_Bi.html、この配列に値を挿入および削除する関数を作成できます。
挿入:配列の最後のエントリ(常にmax_doubleになります)を数値に置き換えます。次に、親ノードの値が新しく追加された値より小さくなるまで、親ノードの値と交換し続けます。
削除:ルートノードをmax_doubleに置き換えてから、その2つの子と比較し、2つの子がmax_doubleになるまで最小の子と交換します。
質問
私はこれらすべてに正しいアプローチを使用していますか?