C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++での二項ヒープのメモリ表現


二項ツリーとは何ですか?

二項ツリーは順序付けられたツリーデータ構造です。たとえば、B0は単一のノードで構成されますが、Bkとして表される二項ツリーは2つの二項ツリーで構成されます。つまりBk-1は互いにリンクされています。一方の二項ツリーのルートは、もう一方の二項ツリーのルートの左端の子です。二項ツリーは、主に資産または株式の基本的および技術的な分析に使用されます。

二項ツリーのノードは、資産の本質的な価値を表します。投資家や市場の購入者が投資の適切な時期と価値を分析するのに役立ちます。

二項ヒープとは何ですか?

二項ヒープは、複数の二項ツリーの組み合わせで形成されるデータ構造です。

バイナリヒープHのプロパティは次のとおりです-:

  • Hの各二項ツリーはヒープ順になっています。したがって、ノードのキーはその親のキー以上です。

  • Hには最大で1つの二項木があり、その根には一定の次数があります。

バイナリヒープの例は次のとおりです-:

C++での二項ヒープのメモリ表現

二項ヒープノードのメモリ表現

バイナリヒープの各ノードは、5つのフィールドを持つメモリ内の表現です。つまり

  • 親ポインタ -:バイナリヒープ構造で他のノードにリンクされるように、親ノードのアドレスを格納します。

  • キー-: ノードが保持しているデータまたはキーを保存します。

  • 程度-: バイナリヒープノードの次数またはレベルを指定します。

  • 左の子ポインタ-: 該当する場合は、すぐ左の子のアドレスを保存して、左のノードに接続します。

  • 兄弟ポインター-: 直接の兄弟のアドレスが保存されます。

C++での二項ヒープのメモリ表現

例-:

1。単一ノードのメモリ表現

C++での二項ヒープのメモリ表現

2。親と子のノードのメモリ表現

C++での二項ヒープのメモリ表現

3。兄弟ノードのメモリ表現

C++での二項ヒープのメモリ表現


  1. C++での二分木の剪定

    バイナリツリーのヘッドノードルートがあり、さらにすべてのノードの値が0または1であるとします。1を含まないすべてのサブツリーが削除された同じツリーを見つける必要があります。したがって、ツリーが次のような場合- これを解決するには、次の手順に従います- 再帰メソッドsolve()を定義します。これにより、ノードが取得されます。メソッドは次のようになります- ノードがnullの場合、nullを返します ノードの左側:=solve(ノードの左側) ノードの権利:=solve(ノードの権利) ノードの左側がnullで、ノードの右側もnullで、ノード値が0の

  2. C ++の二項ヒープ?

    二項ヒープは、二分ヒープの拡張として定義され、二分ヒープによって提供される他の操作と一緒に、より高速なマージまたは結合操作を提供します。 二項ヒープは、二項ツリーのコレクションとして扱われます。 二項ツリーとは何ですか? 次数kの二項ツリーは、次数k-1の2つの二項ツリーを取得し、一方を左端の子またはその他として扱うことで構築できます。 次数kの二項ツリーには以下のプロパティがあります。 BinomialTreeのノード数は正確に2kです。 。 BinomialTreeの深さはkです。 深さiには正確にkCiノードがあります。ここでi=0、1 、。 。 。 、k。