ヒープ
ヒープの二つの特徴があります。
- 配列によって表される完全二分木
- いずれかの単語の鍵(ルート)ノードは、すべてのノードのすべてのサブツリーの最大値(最大値)であります
- 最大ヒープ:最大、図。
- 最小スタック:最小、図。
- 特徴:整然としたパス
- プライオリティキューを達成する目的ではなく、インサートの配列よりも、要素の優先度を削除します。
インサートは理解:親ノードと比較して、アレイの端部を挿入する最も完全な二分木を表現、および、交換位置より大きい、より大きい未満ブレーク以上です。
理解削除:削除図マックスすなわち素子1インデックス=
- あるいは要素インデックス= 1、それ最も端に取って代わるの最後の要素。
- デジタル調整最後方位置;としては、図示しました。
public class Heap {
int[] elements; //存储数组
int size; //当前元素数量
int capacity; //最大容量
public Heap(int capacity) {
this.capacity = capacity;
elements = new int[capacity + 1]; //从index =1 开始存储, 0 为稍定
elements[0] = Integer.MAX_VALUE;
size = 0;
}
public void insert(int element) {
if (isFull()) throw new RuntimeException("full");
int index = ++size; // 实际存储从1 开始存入数组;
for (; elements[index / 2] < element; index /= 2) {
elements[index] = elements[index / 2];
}
elements[index] = element;
}
public int deleteMax() {
if (isEmpty())
throw new RuntimeException("empty");
int maxItem = elements[1];
int temp = elements[size--];
int parent = 1;
for (int child = 0; parent * 2 < size; parent=child) {
child = parent*2;
if (parent!=size && elements[child]<elements[child+1])
child++;
if (temp>elements[child]) break;
else
elements[parent] = elements[child];
}
elements[parent] = temp;
return maxItem;
}
}
センチネルの意味:
センチネルiが時間= 1、最大値、挿入方法をとり、I / 2 = 0、要素[I] = MAX_INT、効率を増大させることができるforループ。
設立のヒープ
:考えはことを理解
することを、アレイ(完全二分木)は、図のスタックではなく、最終的にゆっくりと考えを使用してヒープを構築することから徐々にノードに、最大値/最小値を見つけるために調整、削除した場合フレームワークは、最大ヒープ/スタック最小とすることができます。