行列の乗算再帰的なソリューション

N×Nの行列に与えられた二つの製品を求めています

以下に示すように、次のように、乗算処理が行われます。

1.アウト、アウトマトリックス2の第1の行列1行

2行と列の乗算値1

3.左列の行列は、2値2(再帰的な手順)を乗じたものです

1および4 VALUE3(再帰的な手順)を乗算した行列の残りの列

マトリックス1およびマトリックス2の残りの部分は、残りのvalue4(再帰的な手順)を乗じたものです

前記結果値1は〜value4アレイに結合します

注規則コードを書くとき、値1は値1、値2、VALUE3、value4は数であり、空の配列または非空の二次元配列でなければなりません

PHPで実装され、一般的な考え方は難しいことではありませんが、合併結果の詳細に細心の注意を払います:

  1 <?PHP
   2  
  3  クラスMatrixProduct
   4  {
   5      保護 $の行列1$の行列2   6      保護され ます$ result ;
  7  
  8      パブリック 関数 __construct($の行列1$の行列2   9      {
 10          $この - >行列1 = $行列1 11          $この - >行列2 = $行列2 12          $この - >結果= $この - > matrixProduction($この - >行列1、$この - > 行列2)。
13      }
 14  
15      パブリック 関数ショー()
 16      {
 17          foreachの$この - >結果として $行){
 18              foreachの$行 として $データ){
 19                  のprintf( '%5D'、$データ)。
20              }
 21は、             エコー PHP_EOLを22          }
 23      }
 24  
25      保護 関数 popRow(&$行列26      {
 27          リターン $行列)?[]:[ array_shift$行列)]。
28      }
 29  
30      保護 機能 popColumn(&$行列31      {
 32          $列 = [];
33          foreachの$行列 として $キー =>&$行){
 34件の             $データ = array_shift$行)。
35              ならエンプティ$データ)|| $行)){
 36                  未設定$行列 [ $キー])。
37              }
 38              $列 [] = [ $データ]。
39          }
 40          リターン $列41      }
 42  
43      保護 機能 countProduction($行$列44      {
 45          のために$ iは= 0、$合計 = 0; $ iが < カウント$行を [0])。$ I ++ ){
 46              $の和 + = $行 [0] [ $ I ] * $列 [ $ I ] [0 ]。
47          }
 48          リターン $和;
49      }
 50  
51      保護 機能合併($値1$の値2$のVALUE3$のvalue4 52      {
 53          であれば空の$値2)&& $ VALUE3 )){
 54              リターン $値1 55          } {
 56              $ array12 = array_merge([ $値1 ]、!IS_ARRAY$の値2)[?$の値2 ]:$の値2 [0]?[])。
57              もし(!IS_ARRAY$ VALUE3 )){
 58                  $ array34 = array_merge([ $の値3 ]、!IS_ARRAY$のvalue4)?[ $のvalue4 ]:$のvalue4 [0]?[])。
59                  リターン [ $ array12$ array34 ]。
60              } {
 61                  のために$ I = 0、$ array34 = []; $ iは < カウント$のVALUE3を ;)$ iが ++ ){
 62                      $ array34 [] = array_merge$のVALUE3 [ $ I ]、$ value4を [ $ I ] ?? []);
63                  }
 64                  リターン array_merge([ $ array12 ]、$ array34 )。
65              }
 66          }
 67      }
 68  
69      保護 機能 matrixProduction($の行列1$の行列2 70      {
 71          $行 = $この - > popRow($の行列1 )。
72          $列 = $この - > popColumn($の行列2 )。
73          ならエンプティ$行)|| 空の$列)){
 74              リターン[]。
75          }
 76  
77          $の値1 = $この - > countProduction($行$列)。
78          $の値2 = $この - > matrixProduction($行$の行列2 )。
79          $のVALUE3 = $この - > matrixProduction($の行列1$列)。
80          の$ value4 = $この - > matrixProduction($の行列1$の行列2 )。
81  
82          リターン $この - >合併($値1$ value2を$の値3$のvalue4 )。
83      }
 84  }
 85  
86  $の行列1 = [
 87      、[1、2、3、4]、
 88      [1、2、3、4]、
 89      [1、2、3、4]、
 90      [1、2、3 、4]、
 91  ]。
92  
93  $行列2 = [
 94      、[1、2、3、4]、
 95      [5、6、7、8]
96      [9、10、11、12]、
 97      [13、14、15、16 ]
 98  ]。
99  
100  $生産 = 新しい MatrixProduct($の行列1$の行列2 )。
101  $生産 - >ショー();

 

おすすめ

転載: www.cnblogs.com/SHQHDMR/p/11089228.html