动态规划——最优二叉检索树问题

本文探讨了如何使用动态规划解决最优二叉检索树问题,以降低检索的平均代价。通过分析设计,阐述了如何选择合适的根节点以最小化树的高度,并介绍了动态规划的子结构特征。此外,文章提供了源代码实现并展示了运行结果。
摘要由CSDN通过智能技术生成

最优二叉检索树问题

二叉检索树是二叉树当中经典的应用之一,广泛应用于实际生活的检索当中。如何构建一棵二叉树使得检索时的平均代价最低即构建最优二叉检索树,是一个问题。通过动态规划的思想可以对其进行解决。

问题描述

给定n个结点,构造一棵二叉检索树,使得检索的代价最低,即最优二叉检索树。

分析设计

二叉检索树的原理、特点、概念及代价在这里不再论述和证明,默认为已知。

要想使二叉检索树的检索代价最低,就是要使二叉树的**高度最小化。**因此我们就要选择合适的节点作为根节点。

利用动态规划的思想解决这个问题,我们首先要找到能划分的子问题,即节点减少时的二叉检索树。因此最优二叉检索树一定具有最优子结构的特征,去除根节点的剩下的部分任然是最优二叉检索树。

C ( i , j ) C(i,j) C(i,j)表示包含i…j节点的数的搜索代价,设这棵树的根节点为r,对应的左右子树分别是 i…r-1 和 r+1…j,它们对应的叶子分别为 i-1…dr-1和 r…j。树就构造完了,分为两种情况

  1. 只有一个叶子组成的子树 j=i-1, 只有i-1, 那么 C ( i , j ) = q i − 1 C(i,j)= q_i-1 C(i,j)=qi1 这个子树为1个叶节点 不再划分左右子树;
  2. 子树还包含关键字 即继续划分左右子树 i ≤ j i\leq j ij。那么 C ( i , j ) = m i n [ C ( i , r − 1 ) + C ( r + 1 , j
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值