2014-06-05 69 views
0

大約3年前我在C中寫了Matrix Chained乘法算法,並且我剛開始學習PHP。PHP中的矩陣鏈乘法

這裏是在C算法:

#include<stdio.h> 
#include<limits.h> 


int MatrixChainOrder(int p[], int n) 
{ 


int m[n][n]; 

int i, j, k, L, q; 

for (i = 1; i < n; i++) 
    m[i][i] = 0; 

// L is chain length. 
for (L=2; L<n; L++) 
{ 
    for (i=1; i<=n-L+1; i++) 
    { 
     j = i+L-1; 
     m[i][j] = INT_MAX; 
     for (k=i; k<=j-1; k++) 
     { 
      // q = cost/scalar multiplications 
      q = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j]; 
      if (q < m[i][j]) 
       m[i][j] = q; 
     } 
    } 
} 

return m[1][n-1]; 
} 

int main() 
{ 
int arr[] = {1, 2, 3, 4}; 
int size = sizeof(arr)/sizeof(arr[0]); 

printf("Minimum number of multiplications is %d ", 
        MatrixChainOrder(arr, size)); 

getchar(); 
return 0; 
} 

我在PHP新的,我想幫我這個算法轉換爲PHP。

謝謝。

+2

你是什麼意思與 「幫助」 一詞?做所有的工作?或者你嘗試過什麼? –

+0

@史密斯先生我不希望你做所有的工作,我只是想幫助我,並給我一些樣品,將其轉換爲PHP。 例如,我不知道如何在php中編寫m [i] [j] = INT_MAX,以及如何在php中使用INT_MAX ... –

回答

-1

快速翻拍:)

function matrixChainOrder($p, $n) { 
    for ($i = 1; $i < $n; $i++) 
     $m[$i][$i] = 0; 

    for ($L = 2; $L < $n; $L++) 
    { 
     for ($i = 1; $i <= $n - $L + 1; $i++) 
     { 
      $j = $i + $L - 1; 
      $m[$i][$j] = PHP_INT_MAX; 
      for ($k = $i; $k <= $j - 1; $k++) 
      { 
       // $q = cost/scalar multiplications 
       $q = @$m[$i][$k] + @$m[$k + 1][$j] + @$p[$i - 1] * @$p[$k] * @$p[$j]; 
       if ($q < $m[$i][$j]) 
        $m[$i][$j] = $q; 
      } 
     } 
    } 
    return $m[1][$n-1]; 
} 

$arr = array(1, 2, 3, 4); 
$size = count($arr)/count($arr[0]); 

echo "Minimum number of multiplications is ".matrixChainOrder($arr, $size); 
1

PHP語法基於C並且與後者直接類似。

檢查出來:

function MatrixChainOrder($p, $n) { 
    $m = array(); 
    for ($i = 1; $i < $n; $i++) 
     $m[$i][$i] = 0; 
    // L is chain length. 
    for ($L=2; $L < $n; $L++) { 
     for ($i=1; $i <= $n-$L+1; $i++) 
     { 
      $j = $i+$L-1; 
      $m[$i][$j] = PHP_INT_MAX; 
      for ($k=$i; $k <= $j-1; $k++) 
      { 
       // q = cost/scalar multiplications 
       $q = $m[$i][$k] + $m[$k+1][$j] + $p[$i-1]* $p[$k]* $p[$j]; 
       if ($q < $m[$i][$j]) 
        $m[$i][$j] = $q; 
      } 
     } 
    } 
    return $m[1][$n-1]; 
} 

$arr = array(1, 2, 3, 4); 
$size = count($arr); 

printf("Minimum number of multiplications is %d ", MatrixChainOrder($arr, $size));