//最优二叉查找树,利用动态规划实现
#include<iostream>
using namespace std;
void Optimal_BST(double *p,double *q,int length,double (*e)[20],int (*root)[20])
{
int i,j,k,r;
double t;
double w[20][20]={0};
for(i=1;i<=length+1;i++)
{
e[i][i-1]=q[i-1];
w[i][i-1]=q[i-1];
}
//i为关键字之间的长度
for(i=1;i<=length;i++)
{
//从下标为j开始的关键字到下标为k的关键字
for(j=1;j<=length-i+1;j++)
{
k=i+j-1;
e[j][k]=0x7fffffff;
w[j][k]=w[j][k-1]+p[k]+q[k];
//选取j到k之间的某个下标的关键字作为从j到k的根,如果组成的树的期望值当前最小,则r为从j
//到k的根节点
for(r=j;r<=k;r++)
{
t=e[j][r-1]+e[r+1][k]+w[j][k];
if(e[j][k]>t)
{
e[j][k]=t;
//r即为从下标j到k的根节点
root[j][k]=r;
}
}
}
}
}
void Construct_Optimal_BST(int (*root)[20],int i,int j,bool flag)
{
if(flag==0)
{
cout<<"k"<<root[i][j]<&l
C++ 最优二叉搜索树
最新推荐文章于 2024-09-12 09:00:00 发布
这是一篇关于C++实现最优二叉搜索树的技术博客,博主Slience分享了如何使用动态规划来构造最优化的二叉搜索树。文章强调自我提升的重要性,并鼓励读者面对挑战时保持乐观。
摘要由CSDN通过智能技术生成