改进 space 矩阵链乘法的复杂性
Improving space complexity in matrix chain multiplication
我想知道有没有什么方法可以将space矩阵乘法问题的动态规划求解的复杂度从O(N^2)提高到更好的程度?
这是一个 space 复杂度 O(n)
的解决方案
#include <iostream>
using namespace std;
int min_cost(int a[], int n) {
int* b = new int(n);
b[1] = 0;
b[2] = a[0]*a[1]*a[2];
for (int j = 3; j < n; j++) {
b[j] = min( b[j-1] + a[0]*a[j-1]*a[j], b[j-2] + a[j-1]*a[j-2]*a[j] + a[0]*a[j-2]*a[j]);
}
return b[n-1];
}
int main() {
int arr[] = {10, 20, 30};
int size = sizeof(arr)/sizeof(arr[0]);
printf("Minimum number of multiplications is %d ", min_cost(arr, size));
return 0;
}
我想知道有没有什么方法可以将space矩阵乘法问题的动态规划求解的复杂度从O(N^2)提高到更好的程度?
这是一个 space 复杂度 O(n)
的解决方案#include <iostream>
using namespace std;
int min_cost(int a[], int n) {
int* b = new int(n);
b[1] = 0;
b[2] = a[0]*a[1]*a[2];
for (int j = 3; j < n; j++) {
b[j] = min( b[j-1] + a[0]*a[j-1]*a[j], b[j-2] + a[j-1]*a[j-2]*a[j] + a[0]*a[j-2]*a[j]);
}
return b[n-1];
}
int main() {
int arr[] = {10, 20, 30};
int size = sizeof(arr)/sizeof(arr[0]);
printf("Minimum number of multiplications is %d ", min_cost(arr, size));
return 0;
}