最优二叉查找树优化算法

Knuth[184]已经证明对于所有的1<=i<j<=n,总存在最优子树的根使得root[i, j-1]<=root[i, j]<=root[i+1, j]。利用这个事实来修改OPTIMAL-BST程序,使其在Θ(n^2)时间内执行。

OPTIMAL-BST(p, q, n)
for i<-1 to n+1
    do e[i, i-1]<-q[i-1]
       w[i, i-1]<-q[i-1]
for l<-1 to n
    do for i<-1 to n-l+1
           do j<-i+l-1
              e[i, j]<-∞
              w[i, j]<-w[i, j-1]+p[j]+q[j]
              x=root[i, j-1] ? root[i, j-1] : i
              y=root[i+1, j] ? root[i+1, j] : j
              for r<-x to y
                  do t<-e[i, r-1]+e[r+1, j]+w[i, j]
                     if t<e[i, j]
                         then e[i, j]<-t
                              root[i, j]<-r
return e and root

你可能感兴趣的:(算法,优化)