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

行列の連鎖乗積のためのCプログラム


この問題では、メトリックのシーケンス(配列)が与えられます。私たちのタスクは、行列の連鎖乗積のためのCプログラムを作成することです。 。最小数の乗算が必要になるように、これらの行列を乗算する方法を見つける必要があります。

行列の配列には、行列の次元を arr [i-1] X arr [i]として定義するn個の要素が含まれます。 。

問題を理解するために例を見てみましょう

入力

array[] = {3, 4, 5, 6}

出力

説明

行列の次数は-

になります
Mat1 = 3X4, Mat2 = 4X5, Mat3 = 5X6

これらの3つの行列の場合、乗算する方法は2つあります。

mat1*(mat2*mat3) -> (3*4*6) + (4*5*6) = 72 + 120 = 192
(mat1*mat2)*mat3 -> (3*4*5) + (3*5*6) = 60 + 90 = 150

(mat1 * mat2)* mat3の場合、マルチプリケーションの最小数は150になります。

この問題は、動的計画法で最適な部分構造と重複する部分構造の両方の特性を備えているため、動的計画法を使用して解決できます。

これが動的計画法を使用した行列の連鎖乗積のためのCプログラムです。

#include <stdio.h>
int MatrixChainMultuplication(int arr[], int n) {
   int minMul[n][n];
   int j, q;
   for (int i = 1; i < n; i++)
      minMul[i][i] = 0;
   for (int L = 2; L < n; L++) {
      for (int i = 1; i < n - L + 1; i++) {
         j = i + L - 1;
         minMul[i][j] = 99999999;
         for (int k = i; k <= j - 1; k++) {
            q = minMul[i][k] + minMul[k + 1][j] + arr[i - 1] * arr[k] * arr[j];
            if (q < minMul[i][j])
            minMul[i][j] = q;
         }
      }
   }
   return minMul[1][n - 1];
}
int main(){
   int arr[] = {3, 4, 5, 6, 7, 8};
   int size = sizeof(arr) / sizeof(arr[0]);
   printf("Minimum number of multiplications required for the matrices multiplication is %d ",    MatrixChainMultuplication(arr, size));
   getchar();
   return 0;
}

出力

Minimum number of multiplications required for the matrices multiplication is 444

  1. 長方形の面積と周囲長のためのCプログラム

    長方形の長さと幅を考えると、その面積と周囲長を見つける必要があります。 長方形は、4つの辺とそれぞれ90度の4つの角度を含む2D図形です。長方形のすべての辺が等しいわけではなく、長方形の反対側だけが等しいだけです。長方形の対角線も同じ長さです。 以下は長方形の図式表現です。 ここで、Aは長方形の幅を表し、Bは長方形の長さを表します。 エリアを見つけるには 長方形の式は次のとおりです。長さx幅 また、長方形の周囲長は− 2 x(長さ+幅) 。 例 Input: 20 30 Output: area of rectangle is : 600    peri

  2. 配列要素の乗算のためのC++プログラム

    整数要素の配列で与えられ、タスクは配列の要素を乗算して表示することです。 例 Input-: arr[]={1,2,3,4,5,6,7} Output-: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 Input-: arr[]={3, 4,6, 2, 7, 8, 4} Output-: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 以下のプログラムで使用されるアプローチは次のとおりです − 一時変数を初期化して、最終結果を1で格納します ループを0からnまで開始します。nは配列のサイズです 最終結果を得るには、tempの値にarr[i]を掛け続