15.5 最优二叉搜索树

背景

假定我们正在设计一个程序,实现英语文本到中文的翻译。对英语文本中出现的每个单词,我们需要查找对应的中文。为了实现这些操作,我们可以创建一个二叉搜索树,将n个英语单词作为关键字,对应的中文作为关联数据。

定义

给定一个n个不同关键字的已排序的序列K=,我们希望用这些关键字构造一颗二叉搜索树,对于给定的搜索频率,该二叉搜索树所需的期望代价最小。称这个二叉树为最优二叉搜索树。

递归公式


,若 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

你可能感兴趣的:(15.5 最优二叉搜索树)