首页 > 编程知识 正文

最优加权二叉树,最优二叉树怎么做

时间:2023-05-03 18:04:45 阅读:168564 作者:3061

二叉树搜索树:中顺序扫描是有序排列的二叉树中加权节点的集合。 在寻求如何使结构二叉树的平均搜索次数最小时,首先考虑暴力算法,列举所有可能的序列,然后针对每个序列依次选择各点作为根节点,求出其他各序列的最小值,并保存该最小值。 在最后得到的序列中取最小值,发现代码的时空开销非常大,因此该方法不适用于平均比较次数。 e(t )=(deptht ) k ) p ) k ) )1) p ) k )【i=k k0】(depthr ) k )1) p ) k ) k )【i=k=j】因此,求得最优解是e 1-n可以使用1-2,1-n/2也可以使用1-2 )/*用r表示在small中搜索根节点搜索二叉树; int r; 双w; (; intmain(((/*对角线是自己的概率是搜索树,所以左下角的矩阵为0 )0*/int n,I; cin n; double *weight=new double[n]; for(I=0; i n; I ) {cin weight[i]; }Node ** target=new Node*[n 1]; for(I=0; i n 1; I ) {target[i]=new Node[n 1]; //初始化矩阵for(I=0; i n 1; I ) for(intj=0; j n 1; j({target[I][j].small=0; target[i][j].r=-1; (初始化//对角线for ) I=1; i n 1; I ) { target [ I ] [ I ].small=weight [ I-1 ]; target[i][i].r=0; target[i][i].w=weight[i - 1]; }for(intL=1; l n 1; l ) for(intI=1; i l n 1; I ) intj=LI,r=i,k; target [ I ] [ j ].w=target [ I ] [ j-1 ].wweight [ j-1 ]; double min=target [ I ].w target [ i1 ] [ j ].small target [ I ] [ I-1 ].small; for(k=I; k=j; k ) {双精度时间; if(k==I ) ) temp=target [ I ] [ j ].w target [ k1 ] [ j ].small; }elseif(k==j ) temp=target [ I ] [ j ].w target [ I ] [ k-1 ].small; } else { temp=target [ I ] [ j ].w target [ k1 ] [ j ].small target [ I ] [ k-1 ].small; (if ) tempmin ) {min=temp; r=k; }} target[i][j].small=min; target[i][j].r=r; }for(I=1; i n 1; I ) for(intj=1; j n 1; j () cout ) (target[I][j].r ),) target[i][j].small ); }cout endl; }return 0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。