CLRS 15.5最优二叉搜索树

15.5-1
CONSTRUCT-OPTIMAL-BST(root)
    n ← length[root]
    print r[1, n] is the root
    PRINT-OBST(1, n)

PRINT-OBST(i, j)
    m = r[i, j]
    if i = m
         print
dm1 is the left child of km
    else
         print
kr[i,m1] is the left child of km
         PRINT-OBST(i, m-1)
    if j = m
         print
dm is the right child of km
     else
         print
kr[m+1,j] is the right child of km
         PRINT-OBST(m+1, j)

15.5-2
最右二叉搜索树如下图:
这里写图片描述
最后计算的代价为:3.12。

15.5-3
若有 ω 表,每次计算 ω[i,j] 只需要 Θ(1) 时间,没有维护表则需要 Θ(ji) 时间,所以现在相当于在第二个 for 里面再加一个 for 循环(不是嵌套在第三个 for 循环中),最后的复杂度依然是 Θ(n3)

15.5-4
第9、10行替换为:
   if i = j
       r = j
       e[i,j]=
pi+qi1+qj
   else
       for r = root[i,j-1] to root[i+1,j]

在计算所有的 ji=k e[i,j]时(含有 k 个结点),每个e[i,j]需要花费 root[i+1, j] – root[i, j-1] + 1次迭代,所有的ji=ke[i,j]花费root[k,1] – root[1,k] + n – k。由于1 ≤ root[k, 1], root[1, k] ≤ n,所以root[k,1] – root[1,k] + n – k=Θ(n)。最后 k 的变化范围是 0 n1 ,总的时间复杂度是 Θ(n2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值