#include <iostream>
using namespace std;
void OptimalBinarySearchTree(double a[] , double b[] , int n , double **m , int **s , double **w)
{
//初始化构造无内部节点的情况
for(int i = 0 ; i <= n ; i++){
w[i+1][i] = a[i];
m[i+1][i] = 0;
}
for(int r = 0 ; r < n ; r++)//r代表起止下标的差
for(int i = 1 ; i<= n-r ; i++){//i为起始元素的下标
int j = i+r;//j为终止元素下标
//构造T[i][j] 填写w[i][j],m[i][j],s[i][j]
//首选i作为根,其左子树为空,右子树为节点
w[i][j] = w[i][j-1]+a[j]+b[j];
m[i][j] = m[i+1][j];
s[i][j] = i;
//不选i作为根,设k为其根,则k=i+1,……j
//左子树为节点:i,i+1……k-1,右子树为节点:k+1,k+2,……j
for(int k = i+1 ; k <= j ; k++){
double t = m[i][k-1]+m[k+1][j];
最优二叉搜索树-动态规划
最新推荐文章于 2015-04-17 21:43:31 发布