C++の最大ヒープの最小要素。
問題の説明
最大ヒープの値が最小の要素を見つけます。
最大ヒープ以下を考えてみましょう。
ルートノードの最大ヒープ値は、常にその子ノードよりも大きくなります。このプロパティにより、値はリーフノードの1つに存在すると結論付けることができます。ヒープにn個のノードが含まれている場合、ceil(n / 2)リーフがあります。
最大ヒープは完全なバイナリツリーであるため、配列で表すことができます。このようなヒープでは、最初のリーフはfloor(n / 2)インデックスの後に存在します。したがって、この例では、最初の休暇はインデックス5に存在します。
アルゴリズム
以下のアルゴリズムを使用して、最大ヒープ内の最小値を見つけることができます-
1. Find first leaf in a heap and consider its value as min 2. Iterate all remaining leaves and update min value if leaf with smaller value is found
例
#include <iostream> #define SIZE(arr) (sizeof(arr) / sizeof(arr[0])) using namespace std; int getMinElement(int *heap, int n){ int minElement = heap[n / 2]; for (int i = n / 2 + 1; i < n; ++i) { minElement = min(minElement, heap[i]); } return minElement; } int main(){ int heap[] = {120, 90, 100, 70, 75, 80, 60, 25, 40, 35}; cout << "Min value: " << getMinElement(heap, SIZE(heap)) << "\n"; return 0; }
出力
上記のプログラムをコンパイルして実行する場合。次の出力を生成します-
Min value: 25
-
C ++の二項ヒープ?
二項ヒープは、二分ヒープの拡張として定義され、二分ヒープによって提供される他の操作と一緒に、より高速なマージまたは結合操作を提供します。 二項ヒープは、二項ツリーのコレクションとして扱われます。 二項ツリーとは何ですか? 次数kの二項ツリーは、次数k-1の2つの二項ツリーを取得し、一方を左端の子またはその他として扱うことで構築できます。 次数kの二項ツリーには以下のプロパティがあります。 BinomialTreeのノード数は正確に2kです。 。 BinomialTreeの深さはkです。 深さiには正確にkCiノードがあります。ここでi=0、1 、。 。 。 、k。
-
C ++のlog1p()
関数log1p()は、(a + 1)の自然対数(基数e対数)を計算するために使用されます。ここで、aは任意の数値です。 (a + 1)の自然対数の値を返します。 -1未満の値を渡すと、Not a number(Nan)が返されます。 log1p()の数式は次のとおりです。 log1p(a) = base-e log(a+1) C ++言語でのlog1p()の構文は次のとおりです。 float log1p(float variable_name); ここで variable_name −対数値が計算される変数に付けられた名前。 これは、C ++言語でのlog1p()の例です