const int maxn=6;
double p[maxn]={0.00,0.15,0.10,0.05,0.10,0.20};
double q[maxn]={0.05,0.10,0.05,0.05,0.05,0.10};
int root[maxn][maxn];
double w[maxn][maxn],ee[maxn][maxn];
void BST()
{
for(int i=1;i<=maxn;i++)
{
w[i][i-1]=q[i-1];
ee[i][i-1]=q[i-1];
}
for(int k=1;k<maxn;k++)
for(int i=1;i<maxn+1-k;i++)
{
int j=i+k-1;
ee[i][j]=9999;
w[i][j]=w[i][j-1]+p[j]+q[j];
for(int r=i;r<=j;r++)
{
double t=ee[i][r-1]+ee[r+1][j]+w[i][j];
if(t<ee[i][j])
{
ee[i][j]=t;
root[i][j]=r;
}
}
}
}
int main()
{
BST();
for(int i=1;i<maxn;i++)
{
for(int j=1;j<maxn;j++)
cout<<root[i][j]<<' ';
cout<<endl;
}
}
最优二叉搜索树
最新推荐文章于 2022-07-29 22:38:50 发布