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

C++の二項係数


c(n、k)または n として表される二項係数 c r x k の係数として定義されます (1 + X) n の二項展開で 。

二項係数は、n個のオブジェクトからk個のアイテムが選択される方法の数の値も示します。つまり、n個の要素セットのk個の組み合わせです。考慮されていないアイテムの選択の順序。

ここでは、2つのパラメーターnとkが与えられ、二項係数 n の値を返す必要があります。 c k

Input : n = 8 and k = 3
Output : 56

この問題には複数の解決策があります

一般的な解決策

再帰呼び出しを使用してc(n、k)の値を計算する方法があります。再帰呼び出しを使用する二項係数の値を見つけるための標準式は-

です。

c(n、k)=c(n-1、k-1)+ c(n-1、k)

c(n、0)=c(n、n)=1

上記の式を使用した再帰呼び出しの実装-

#include <iostream>
using namespace std;
int binomialCoefficients(int n, int k) {
   if (k == 0 || k == n)
   return 1;
   return binomialCoefficients(n - 1, k - 1) + binomialCoefficients(n - 1, k);
}
int main() {
   int n=8 , k=5;
   cout<<"The value of C("<<n<<", "<<k<<") is "<<binomialCoefficients(n, k);
   return 0;
}

出力

The value of C(8, 5) is 56

別の解決策 重複するサブ問題を使用している可能性があります。したがって、サブ問題を回避するために動的計画法アルゴリズムを使用します。

#include <bits/stdc++.h>>
using namespace std;
int binomialCoefficients(int n, int k) {
   int C[k+1];
   memset(C, 0, sizeof(C));
   C[0] = 1;
   for (int i = 1; i <= n; i++) {
      for (int j = min(i, k); j > 0; j--)
         C[j] = C[j] + C[j-1];
   }
   return C[k];
}
int main() {
   int n=8, k=5;
   cout<<"The value of C("<<n<<", "<<k<<") is "<<binomialCoefficients(n,k);
   return 0;
}

出力

The value of C(8, 5) is 56

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

    二項ツリーとは何ですか? 二項ツリーは順序付けられたツリーデータ構造です。たとえば、B0は単一のノードで構成されますが、Bkとして表される二項ツリーは2つの二項ツリーで構成されます。つまりBk-1は互いにリンクされています。一方の二項ツリーのルートは、もう一方の二項ツリーのルートの左端の子です。二項ツリーは、主に資産または株式の基本的および技術的な分析に使用されます。 二項ツリーのノードは、資産の本質的な価値を表します。投資家や市場の購入者が投資の適切な時期と価値を分析するのに役立ちます。 二項ヒープとは何ですか? 二項ヒープは、複数の二項ツリーの組み合わせで形成されるデータ構造です。

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

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