美文网首页《算法导论》笔记
15.5 最优二叉搜索树

15.5 最优二叉搜索树

作者: 冰糖雪梨葫芦甜 | 来源:发表于2018-11-10 17:26 被阅读0次

    背景

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

    定义

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

    递归公式

    e[i,j]
    = q_{i-1} ,若 j = i - 1
    = \min_{i\leq r\leq j}\left\{ e[i,r-1]+e[r+1,j]+w(i,j)\right\} ,若i<=j (15.14)
    w[i,j]
    = q_{i-1} ,若 j=i-1
    = w[i,j-1]+p_{j}+q_{j} ,若 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
    

    相关文章

      网友评论

        本文标题:15.5 最优二叉搜索树

        本文链接:https://www.haomeiwen.com/subject/dkozxqtx.html