2019年9月23日ヒープ

まず、概念:
1、(1)論理的に完全二分木
物理のアレイ(2)
(3)を満たす任意のノードは、ツリーのノードがパイル又は大ルートスタックと呼ばれるサブ値よりも大きい、または最大ヒープ
( 4)逆に、それは小さなパイル又はヒープ根、または最小ヒープある
杭の図小さな山及びここに画像を挿入説明
2、添字関係:(既知の親(親)添字)
配列[左:左の子インデックス2 = 。親+ 1、
右の子インデックス:配列[右] 2 =
親+ 2、
既知子(いずれかの右または左の子)(子)の添え字、次いで:
親度:配列[親] =(子-1)/ 2;
3、スタックの基本的な役割は見つけるすぐに設定された最高値を

第二に、操作
1、下方修正
前提:左と右のサブツリーのスタックをするように調整される
指摘:問題のスタックを表すサイズの配列は、スタックデータの数とみなされ、
調整処理(小スタックの例)
ここに画像を挿入説明
自身の要約:1)左の子を決定するステップと、
2)添字の左側の子を見つけ、比較境界かどうか;
3)配列[左]と配列[右]比較分アウト
4)を分析min及び配列[インデックス]の値、。分小さいので、アレイ[インデックス] =分、調整に反しEND IF
5)リピート

ここに画像を挿入説明
如图,调整前,int[] array = { 27,15,19,18,28,34,65,49,25,37 };
调整后,int[] array = { 15,18,19,25,28,34,65,49,27,37 };
操作向下调整的时间复杂度 O(log(n)) 空间复杂度O(1)2、
2、建堆
一个数组逻辑上可以看做一颗完全二叉树,但它还不是一个堆,将其构建成一个堆:
从倒数第一个非叶子结点的子树开始调整,一直调整至根节点,即可调整成堆
ここに画像を挿入説明
建堆操作:
时间复杂度为 O(n) | O(n*log(n)),空间复杂度为O(1)

第三に、アプリケーション・ヒープ:プライオリティキュー
1、内部原理:スタック構成する
2は、主操作:
(1)キュー
場合杭:
1)は、素子アレイの端部に挿入され、
親と2)の比較要素の大きい値、挿入END IFノードサイズ、
3)逆に、ノードが大きい交換親要素、再-2,3-ステップ
4)ルートノードまでここに画像を挿入説明
(2)キュー :(優先最大)
あなたは、ヒープ要素の上部を取り外し、ヒープの構造体への損傷を防ぐためには、直接削除されていませんが、ヒープの最上部には、配列の最後の要素と要素を交換して、道の下を調整することで、山に再調整
ここに画像を挿入説明(3)リターン・チーム最初の要素 :(最高の優先度)
を直接バックにヒープ要素の先頭に
3、プライオリティキュー内のJava:
ここに画像を挿入説明

公開された78元の記事 ウォンの賞賛4 ビュー4173

おすすめ

転載: blog.csdn.net/weixin_43580746/article/details/101223173