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

C++でのマルコフ行列のプログラム


行数が「r」、列数が「c」の行列M [r] [c]が与えられた場合、与えられた行列がマルコフ行列であるかどうかを確認する必要があります。入力行列がマルコフ行列の場合は、出力「マルコフ行列です」を出力し、マルコフ行列でない場合は「マルコフ行列ではありません」を出力します。

マルコフ行列

さて、マルコフ行列とは何ですか? 行列Mは、各行の合計が1に等しい場合に限り、マルコフ行列です。

以下の例のように-

$$ \ begin {bmatrix} 0.2&0.3&0.5 \\ 0.1&0.7&0.2 \\ 0.4&0.5&0.1 \\\ end {bmatrix} \\ $$

上記の例では、各行を合計すると-

1st row sum = 0.2+0.3+0.5 = 1.0
2nd row sum = 0.1+0.7+0.2 = 1.0
3rd row sum = 0.4+0.5+0.1 = 1.0

ここでは、すべての行の合計が1.0であるため、上記の行列はマルコフ行列です。

Input: m[][] = { {0.2, 0.3, 0.5} ,
   {0.1, 0.7, 0.2},
   {0.4, 0.5, 0.1}}
Output: It is a Markov matrix
Input: m[][] = {  {0, 0, 1} ,
   {0, 0.7, 0.3},
   {0.5, 0.5, 0}}
Output: It is a Markov matrix 

アプローチ

別の1-d行列を作成し、その行列のすべての行の合計を格納します。次に、配列全体を反復処理し、配列内のすべての要素が1であるかどうかを確認します。1の場合、指定された行列はマルコフ行列であり、そうでない場合、行列はマルコフ行列ではありません

アルゴリズム

Start
Step 1 -> Define macro as #define n 3
Step 2 -> declare function to check for markov matrix
   bool check(double arr[][n])
      Loop For int i = 0 and i <n and i++
         Declare double sum = 0
         Loop For int j = 0 and j < n and j++
            Set sum = sum + arr[i][j]
            If (sum != 1)
               return false
            End
         End
   Return true
Step 3 -> In main ()
   Declare double arr[3][3] = { { 0, 0, 1 },
      { 0.5, 0, 0.5 },
      { 0.9, 0, 0.1 } }
   If (check(arr))
      Print its a markov matrix
   Else
      Print its not a markov matrix
Stop

#include <iostream>
using namespace std;
#define n 3
//check for markov matrix
bool check(double arr[][n]){
   for (int i = 0; i <n; i++){
      double sum = 0;
      for (int j = 0; j < n; j++)
         sum = sum + arr[i][j];
      if (sum != 1)
         return false;
   }
   return true;
}
int main(){
   double arr[3][3] = { { 0, 0, 1 },
      { 0.5, 0, 0.5 },
      { 0.9, 0, 0.1 } };
   if (check(arr))
      cout << "its a markov matrix ";
   else
      cout << "its not a markov matrix ";
}

出力

its a markov matrix

  1. QuickSort用のC++プログラム?

    クイックソートは、比較を使用してソートされていないリスト(配列)をソートするソート手法です。クイックソートは、パーティション交換ソートとも呼ばれます。 等しいソート項目の相対的な順序が保持されないため、安定したソートではありません。クイックソートは配列を操作できるため、ソートを実行するために少量の追加メモリが必要です。常に最悪の場合のパーティションを選択するわけではないことを除いて、選択ソートと非常によく似ています。したがって、選択ソートのより適切な形式と見なすことができます。 QuickSortは、最も効率的な並べ替えアルゴリズムの1つであり、配列を小さい配列に分割することに基づいていま

  2. 隣接行列を実装するためのC++プログラム

    グラフの隣接行列は、サイズV x Vの正方行列です。VはグラフGの頂点の数です。この行列では、各辺にV個の頂点がマークされています。グラフにiからjの頂点までのエッジがある場合、i thの隣接行列に 行とjth 列は1(または加重グラフの場合はゼロ以外の値)になります。それ以外の場合、その場所は0を保持します。 隣接行列表現の複雑さ: 隣接行列表現は、計算中にO(V2)のスペースを取ります。グラフに最大数のエッジと最小数のエッジがある場合、どちらの場合も必要なスペースは同じになります。 入力: 出力: 0 1 2 3 4