find-min (それぞれ find-max)、 delete-min (それぞれ delete-max)および insert は、最小ヒープ(または最大ヒープ)の最も重要な3つの操作であり、通常、 O(1)、 O(logn) そして O(logn) バイナリツリーで最小/最大ヒープを実装する場合は、それぞれ。
代わりに、ソートされた(減少しない)配列によって最小ヒープを実装するとします(最大ヒープの場合も同様です)。 find-min そして delete-min の O(1) 複雑さ insert ポインタを維持できるため、アプリケーションでは必要ありません pこれは常に配列の最小要素を指します。最小要素が削除されたら、移動するだけですp 配列の次の要素への1ステップ。
ソートされた配列への挿入の扱いは簡単ではありません。新しい要素が与えられたe、バイナリ検索を使用して配列内の位置を特定し、挿入することができます。しかし、ポイントは、そこに挿入したい場合、多くの古い要素を移動する必要があるということです(O(n))新しい要素が存在するための空席を作るために周り。これはほとんどのアプリケーションにとって非常に非効率的です。要素が挿入された後に配列を再ソートすることもできます。これには、O(nログn ) 時間。
最後のポイントは、データ構造を実装する方法は、実際にはアプリケーションによって異なります。NO、単一の実装では、すべての場合に最適です。アプリケーションを分析し、最も頻繁な操作を見つけて、適切な実装を決定します。