提示:本文章不含代码,纯应试解题~(中国地质大学(武汉)研究生算法考试题目)
前言
最优二分检索树(Optimal Binary Search Tree, OBST)问题是一个经典的动态规划问题,它涉及到在给定一组有序关键字及其搜索概率的情况下,构建一棵二叉搜索树,使得查找这些关键字的平均代价最小。
说人话就是——想象一下,你有一个装满不同书籍的书架,每本书都有人可能会来查找。每个人来找书的时候,他们可能对某几本书更感兴趣,所以这些书被查找的频率会更高。现在,你想要重新排列这些书,使得人们找书的平均时间最短。
最优二分检索树就像是这样一个书架的最优排列方式。在这个排列中,每本书(或者说每个关键字)都放在一个位置上,这样当人们来找书时,他们平均需要翻阅的书的数量最少。这就像是在计算机中搜索数据,我们希望找到一种方式,使得搜索数据的平均步骤数最少。
提示:以下是本篇文章正文内容
一、问题描述
1.题目
设 n = 4 , ( a 1 , a 2 , a 3 , a 4 ) = ( d o , i f , r e a d , w h i l e ) , P ( 1 : 4 ) = ( 3 , 3 , 1 , 1 ) , Q ( 0 , 4 ) = ( 2 , 3 , 1 , 1 , 1 ) 设n=4,(a_1,a_2,a_3,a_4)=(do,if,read,while),\\ P(1:4)=(3,3,1,1),Q(0,4)=(2,3,1,1,1) 设n=4,(a1,a2,a3,a4)=(do,if,read,while),P(1:4)=(3,3,1,1),Q(0,4)=(2,3,1,1,1)
2.递推公式介绍
公式一:
W ( i , j ) = Q ( i ) + ∑ i < r < = j [ P ( r ) + Q ( r ) ] = W ( i , j − 1 ) + P ( j ) + Q ( j ) \begin{aligned} W(i,j) &= Q(i)+\sum_{i<r<=j}[P(r)+Q(r)]\\ &=W(i,j-1)+P(j)+Q(j) \\ \end{aligned} W(i,j)=Q(i)+i<r<=j∑[P(r)+Q(r)]=W(i,j−1)+P(j)+Q(j)
W(i,j)表示i~j范围内的搜索成本。
举个栗子~
如下图所示:对应的 W W W就是 W = ( 0 , 1 ) W=(0,1) W=(0,1),且
W ( 0 , 1 ) = W ( 0 , 0 ) + P ( 1 ) + Q ( 1 ) W(0,1)=W(0,0)+P(1)+Q(1) W(0,1)=W(0,0)+P(1)+Q(1)
公式二:
设最优二叉检索树的成本为 C ( 0 , n ) C(0,n) C(0,n),有
C ( 0 , n ) = m i n 1 < = k < = j { C ( 0 , k − 1 ) + C ( k , n ) + 1 } C(0,n)=min_{1<=k<=j}\{C(0,k-1)+C(k,n)+1\} C(0,n)=min1<=k<=j{
C(0,k−1)+C(k,n)+1}
对于任意 i i i到 j j j的节点,其最优二叉搜索树的成本为:
C ( i , j ) = m i n i < k < = j { C ( i , k − 1 ) + C ( k , j ) } + W ( i , j ) C(i,j)=min_{i<k<=j}\{C(i,k-1)+C(k,j)\}+W(i,j) C(i,j)=mini<k<=j{
C(i,k−1)+C(k,j)}+W(i,j)
小声哔哔:懒得推(hiahia~)
二、解题步骤
1.W的计算
W ( i , j ) = W ( i , j − 1 ) + P ( j ) + Q ( j ) \begin{aligned} W(i,j) &= W(i,j-1)+P(j)+Q(j) \\ \end{aligned} W(i,j)=W(i,j−1)+P(j)+Q(j)
step 0
首先是初始化过程,即初始化所有未成功检索的节点
W ( 0 , 0 ) = Q ( 0 ) = 2 W(0,0)=Q(0)=2 W(0,0)=Q(0)=2 W ( 1 , 1 ) = Q ( 1 ) = 3 W(1,1)=Q(1)=3 W(1,1)=Q(1)=3 W ( 2 , 2 ) = Q ( 2 ) = 1 W(2,2)=Q(2)=1 W(2,2)=Q(2)=1 W ( 3 , 3 ) = Q ( 3 )