【pta】7-3 最优二叉搜索树

文章介绍了如何在给定有序集合及其存取概率分布的情况下,通过计算在所有可能的二叉搜索树中找到具有最小平均比较次数(平均路长)的树结构。算法涉及构建代价矩阵、分割点的选择和二叉树的递归构造。

设 S={x1​,x2​,...,xn​} 是有序集,且 x1​<x2​<...<xn​,表示有序集S的二叉搜索树利用二叉树的结点来存储有序集中的元素。在该二叉搜索树中搜索一个元素x,结果有两种情形:

  1. 在二叉搜索树的内结点中找到 x=xi​(即找到了实结点),设这种情况的概率为 pi​

  2. 在二叉搜索树的叶节点中确定 x∈(xi​,xi+1​)(即找到了虚结点),设这种情况的概率为 qi​

设根节点的深度为0,存储元素 xi​的结点深度为 ci​,叶节点(xj​,xj+1​)的结点深度为 dj​,在该二叉搜索树中进行一次搜索所需的平均比较次数为 m,那么有公式:

m=∑i=1n​pi​(1+ci​)+∑j=0n​qj​dj​

m又称为二叉搜索树 T 的平均路长,本题的要求是对于有序集 S 及其存取概率分布(q0​,p1​,q1​,..,pn​,qn​),在所有表示有序集 S 的二叉搜索树中找出一颗具有最小平均路长的二叉搜索树。

image-20210225215359687.png

输入格式:

第一行给出有序集中的元素数量 n (2<n<10)

第二行给出内结点(实结点)的存取概率分布 p1​,..,pn​

第三行给出叶节点(虚结点)的存取概率分布 q0​,q1​,..,qn​

输出格式:

第一行输出最小 m ,保留两位小数。

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值