背景
假定我们正在设计一个程序,实现英语文本到中文的翻译。对英语文本中出现的每个单词,我们需要查找对应的中文。为了实现这些操作,我们可以创建一个二叉搜索树,将n个英语单词作为关键字,对应的中文作为关联数据。
定义
给定一个n个不同关键字的已排序的序列K=<k1,k2,...,kn>,我们希望用这些关键字构造一颗二叉搜索树,对于给定的搜索频率,该二叉搜索树所需的期望代价最小。称这个二叉树为最优二叉搜索树。
递归公式
,若 j = i - 1
,若i<=j (15.14)
,若 j=i-1
,若 j>=i$ (15.15)
相关算法
应用动态规划的算法optimalBST
伪代码
下面的伪代码接受概率列表 p1,...,pn 和 q0,...,qn 及规模 n 作为输入,返回表 e 和 root。
optimalBST(p,q,n)
let e[1..n+1,0..n],w[1..n+1,0..n],and root[1..n,1..n]be new tables
for i=1 to n+1
e[i,i-1] = q[i-1]
w[i,i-1] = q[i-1]
for l=1 to n
for i=1 to n-l+1
j = i+l-1
e[i,j] = MAX_INT
w[i,j] = w[i,j-1]+p[j]+q[j]
for r=i to j
t = e[i,r-1]+e[r+1,j]+w[i,j]
if t<e[i,j]
e[i,j] = t
root[i,j] = r
return e and root
网友评论