此算法是根据《算法导论》里面的介绍编写的。数据也是。代码运行后,结果数据正确。
以《算法导论》P213中未测试数据:
p[6]={-100,0.15,0.1,0.05,0.1,0.2};
q[6]={0.05,0.1,0.05,0.05,0.05,0.1};
运行结果:
《算法导论》中的结果p216:
代码如下:
#include <iostream>
void main()
{
float p[6]={-100,0.15,0.1,0.05,0.1,0.2};
float q[6]={0.05,0.1,0.05,0.05,0.05,0.1};
float e[7][6];
float w[7][6];
int root[6][6];
for(int i=1;i<7;i++)
e[i][i-1]=w[i][i-1]=q[i-1];//初始化d
for(int l=0;l<6;l++)//求间隔距离为L的序列子最优二叉树
{
for(int i=1;i<6-l;i++)//序列从i开始
{
int j=i+l;//到j结束
e[i][j]=1000;//初始化为-正无穷大
//遍历序列中的节点作为子树的根结点,并找到最小搜索代价放入e,同时把此根结点存放入root
w[i][j]=w[i][j-1]+q[j]+p[j];//这一个不太好理解。
//w的物理意义是这个序列的所有k点和d点的概率和。
//序列里面多了一个k点,同时,就要把这个Ki点和Di点加入到w里面。
for(int k=i;k<=j;k++)//计算以k为根结点的子二叉树的搜索代价
{
float tmp=e[i][k-1]+e[k+1][j]+w[i][j];
if(tmp<e[i][j])
{
e[i][j]=tmp;//如果搜索代价小于以前计算的,放入e(也就是说,e中一直存着目前最小的搜索代价)
root[i][j]=k;
}
}
}
}
printf("e:\n");
for(int i=1;i<7;i++){
for(int j=0;j<6;j++){
if(e[i][j]>10||e[i][j]<0){
printf(" ");
}
else{
printf("%1.2f,",e[i][j]);
}
}
printf("\n");
}
printf("w:\n");
for(int i=1;i<7;i++){
for(int j=0;j<6;j++){
if(w[i][j]>1||w[i][j]<0){
printf(" ");
}
else{
printf("%1.2f,",w[i][j]);
}
}
printf("\n");
}
printf("root:\n");
for(int i=1;i<6;i++){
for(int j=1;j<6;j++){
if(root[i][j]>10||root[i][j]<0){
printf(" ");
}
else{
printf("%d,",root[i][j]);
}
}
printf("\n");
}
}
- 大小: 15.5 KB
- 大小: 27.5 KB
分享到:
相关推荐
在本课程作业的代码“最优二叉查找树 动态规划法.cpp”中,可能包含了以下关键部分: 1. **数据结构定义**:定义二叉查找树节点的数据结构,包括键值、左子节点和右子节点的引用。 2. **概率分布输入**:程序需要...
【最优二叉搜索树问题】是一种在数据结构和算法领域中的经典问题,主要涉及动态规划的概念。该问题的目标是设计一棵二叉搜索树(BST),使得在给定的元素集合和存取概率分布下,搜索元素时的平均比较次数达到最小。 ...
一旦所有子树的成本都被计算出来,算法便可以通过递归地调用`constructOptimalBST`函数,根据动态规划过程中记录的最优根节点选择,构建出整个最优二叉查找树的结构。在构建过程中,函数会打印出树的结构信息,包括...
最优二叉搜索树,也称为最优化二叉查找树或者动态二叉搜索树,是计算机科学中的一个重要概念,尤其在算法设计与分析领域占据一席之地。这种数据结构主要用于提高查询效率,在某些特定操作序列下,它能比普通二叉搜索...
运用c语言,贪心算法构造最优二叉查找树。
本文主要探讨了在解决最优二叉搜索树问题时所采用的一种高效算法——动态规划算法。最优二叉搜索树(Optimal Binary Search Tree, OBST)是在特定概率下查找操作平均时间最短的二叉搜索树。在实际应用中,如数据库索引...
本篇介绍的Ruby代码提供了一个简洁而完整的最优二叉查找树的构建过程,通过动态规划的方法有效地解决了如何构建最优二叉查找树的问题。这对于理解最优二叉查找树的概念及其实际应用具有重要的意义。在实际开发中,...
《MIT公开课——算法导论教材》是一份源自美国麻省理工学院(MIT)的珍贵教育资源,专注于教授计算机科学中的核心概念——算法。这份教材涵盖了排序、树和Hash等基础但至关重要的算法,对于学习和理解计算机科学的...
用分治法解决快速排序问题及用动态规划法解决最优二叉搜索树问题及用回溯法解决图的着色问题.pdf
第19章 动态规划 19.1 算法思想 19.2 应用 19.2.1 0/1背包问题 19.2.2 矩阵乘法链 19.2.3 所有顶点对之间的最短路径 19.2.4 带有负值的单源最短路径 19.2.5 网组的无交叉子集 19.3 参考及推荐读物 第20章 回溯法 ...
最优二叉搜索树的构造通常采用自顶向下或自底向上的动态规划方法,分别从大问题分解为小问题或从小问题递归到大问题,从而找到最优解。这种树结构在数据库索引、搜索引擎等领域具有极高的实用价值。 在掌握这些算法...
本文将对一个用C++编写的二叉树源代码进行详细介绍,并展示其构造、遍历、线索化以及线索遍历等关键部分的实现。 首先,让我们了解二叉树的基本构造。在源代码中,二叉树的构造通常从创建一个根节点开始,然后通过...
二叉查找算法是一种在二叉树数据结构中高效地寻找目标元素的算法。它基于排序二叉树(也称为搜索二叉树),其中每个节点的值都大于其左子树中的任何节点,小于其右子树中的任何节点。这种特性使得二叉查找算法能以...
二叉树是一种特殊的树结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。在本文中,我们将探讨四种...理解并熟练掌握这些概念对于理解和实现各种树结构的算法至关重要,如二叉搜索树、AVL树、红黑树等。
该资源是ppt,查看了算法导论书籍等相关文献,做了一个报告,给我们实验室的同学,希望能帮助你,有什么问题,可以留言。。
书中涵盖了广泛的算法和设计技术,包括但不限于排序算法、搜索算法、图算法、动态规划、分治策略、贪心算法等。每一章都围绕一个算法、一种设计技巧、一个应用领域或相关主题展开,不仅提供了算法的详细描述,还通过...
麻省理工--算法导论,非计算机专业的建议不要下载。
- **动态规划**:一种递归算法,用于寻找多阶段决策问题中的最优策略。动态规划可以应用于离散时间系统。 #### 4. 应用领域 最优控制理论在多个领域有着广泛的应用: - **航空航天**:飞机、火箭等飞行器的轨迹...
算法方面的经典教材哦 和原书的内容完全一样
二叉查找树(Binary Search Tree, BST)是一种基础但非常重要的数据结构,它在计算机科学中扮演着核心角色,尤其是在算法和数据结构的学习中。二叉查找树的主要特性是每个节点的左子树只包含小于该节点的元素,右子...