木
1ヒープ
1.1ヒープとは
2つの基本的な操作が必要です:挿入;最大(小さい)値の削除
検索ツリーの利点:ノードの挿入はツリーの高さに関連します。ノードの削除、つまり、左端または右端の最大値または最小値を削除するため、検索の時間効率が向上します。それは、ツリーベースの身長挿入または削除されているかどうかをツリー
あなたが最大のものを毎回削除する場合は、右端のノードを毎回削除、ツリーが曲がっさせると、木の高さは、ログインしなくなった2 n個の。だから、
どのようにバイナリ検索ツリーを使用せずに構造のバランスをとるには、完全なバイナリツリーを使用するのが最善の方法です
。ヒープの特徴の1つ:完全なバイナリツリーストレージを使用すると、ノードはその左の値よりも大きくなり、右のサブツリー
1.2ヒープの抽象データ型の説明
1.3最大ヒープ操作
作成する
ヒープ内の最初のデータの格納は、配列の添え字が1で、添え字が歩哨として0の位置から始まります
。35を挿入すると、順序が壊れ、35> 31になるため、
35と31を調整する必要があります。
挿入後の位置の交換58、58> 31,58および31
トランスデューサーの完了後の交換、58> 44、58および44交換可能
インサート
下付き文字が1の場合、比較を続行する必要がないため、
for(;H->Elements[i/2]<item && i>1;i/=2)
H->Elements[i]=H->Elements[i/2];
//每次把节点和item比较,若小于,则把它的值赋给它的子节点
また、センチネルH-> Elements [0] = MaxDataがある場合は、上記と1つの条件を考慮する必要はありません。
削除
最大値を削除します。つまり、53を
削除し
ます。削除後、最後の値31をルートノードにコピーします。
親2 <= H->サイズ:左の子があるかどうかを確認します。
子=親2:左の子が最大の、
そして判断を行い、最大の子を見つける
子を= H->サイズ:!makeは必ず彼が右の息子がいます
最大ヒープ確立
上の図は、調整が必要なヒープではありません。
息子のある最後のノードには、左または右の息子が1つしかないため、この部分をヒープに調整してから
、前のノードを順番に調整できます。
2ハフマンツリーとハフマンコーディング
2.1ハフマンツリーとは
2.2ハフマンツリーの構造
最小の2つを選択する方法は?
- ヒープ
- ソート
合計Nサイクル、毎回logNを超えない
2.3ハフマン符号化
最小限のコストと明確な
3セットと操作
3.1セットの表現
3.2セット操作
例:検索
の労働組合、2を5連続することはますます高くツリーを行いますと、検索効率が徐々に低下しますので、そこに次の解決策は以下のとおりです(ただし、ツリー内のノードの数を知っておく必要があります)
、親ので、ルートノードのを強調する必要がない場合は、ツリー
b内のノードの数に変更して、aに掛けることができます。