さび(52) - 最大バイナリヒープ二分ヒープ

バイナリヒープ(英語:バイナリヒープ)は、特殊なスタックで、バイナリヒープは、完全なバイナリツリーまたは約完全2分木です。バイナリヒープスタック満たす特性:親ノードのキーは常に固定シーケンスの任意の子ノードのためのキーの関係を保ち、サブツリー左右の部分木の各ノードは、バイナリヒープあります。

親ノードの鍵は常に以上の子ノード内の任意のキーに等しい場合、「最大ヒープ」です。親ノードの鍵は常に未満または子ノード内の任意のキーに等しいとき、「最小ヒープ」です。

None
Some(90)
[90, 87, 61, 69, 31, 9, 23, 11]


------------------
(program exited with code: 0)

请按任意键继续. . .
use std::collections::BinaryHeap;
fn main() {
    let mut my_heap=BinaryHeap::new();
    println!("{:?}",my_heap.peek());
    let x=[11,31,9,87,90,61,23,69];
    for i in &x{
		my_heap.push(i);
	}
    println!("{:?}",my_heap.peek());
    println!("{:?}",my_heap);	
}

バイナリヒープは、一般的に、アレイによって表されます。ルートノードの位置は、配列1の子ノードである場合、それぞれ2N n番目の位置、および2N + 1。したがって、サブノード2および3の最初の位置、サブノード4及び5の第二の位置。などなど。親と子ノードを見つけるのは簡単基づいて、このようなストレージ・アレイ。

インデックスベースのストレージアレイ0の場合、次の子が標識されたノードをノードiが2I + 1及び2I + 2であり;添字親ノードが⌊floorある((I - 1)/ 2)⌋。関数floor(x)は、すなわちxより大きくない最大整数撮影機能「丸みダウン」、又は「丸みダウン」である(「丸め」は、異なる数の軸に最も直接的なアクセスである応じて切り捨て必要な値の最大値より大きくない左の値の要求値に近いです)。例えば、床(1.1)、床(1.9)に1を返します。

次の図の2つのスタック:


            1                                 11                          
         /      \                          /      \ 
       2         3                       9         10
    /    \     /   \                   /   \     /    \ 
   4      5   6     7                5      6   7      8
  / \    / \                        / \    / \
 8  9   10 11                      1   2  3   4 

配列に格納された2つのヒープは1から始まります。

場所:1234567891011
左:1234567891011
右:1191056781234
大型スタックと、ストレージは非効率的です。ノードの子は、別のメモリページで可能性があるため。B-ヒープメモリは、同じメモリページに各サブツリーより効率的な方法です。

メモリヒープポインタリスト場合は、この方法は、リーフノードにアクセスする必要があります。バイナリツリーは順次これらのノードを横断する(スレッド)モードを「スレッド」することができます。

公開された473元の記事 ウォン称賛14 ビュー60000 +

おすすめ

転載: blog.csdn.net/AI_LX/article/details/105082901