设 S={x1,x2,...,xn} 是有序集,且 x1<x2<...<xn,表示有序集S的二叉搜索树利用二叉树的结点来存储有序集中的元素。在该二叉搜索树中搜索一个元素x,结果有两种情形:
-
在二叉搜索树的内结点中找到 x=xi(即找到了实结点),设这种情况的概率为 pi
-
在二叉搜索树的叶节点中确定 x∈(xi,xi+1)(即找到了虚结点),设这种情况的概率为 qi
设根节点的深度为0,存储元素 xi的结点深度为 ci,叶节点(xj,xj+1)的结点深度为 dj,在该二叉搜索树中进行一次搜索所需的平均比较次数为 m,那么有公式:
m=∑i=1npi(1+ci)+∑j=0nqjdj
m又称为二叉搜索树 T 的平均路长,本题的要求是对于有序集 S 及其存取概率分布(q0,p1,q1,..,pn,qn),在所有表示有序集 S 的二叉搜索树中找出一颗具有最小平均路长的二叉搜索树。

输入格式:
第一行给出有序集中的元素数量 n (2<n<10)
第二行给出内结点(实结点)的存取概率分布 p1,..,pn
第三行给出叶节点(虚结点)的存取概率分布 q0,q1,..,qn
输出格式:
第一行输出最小 m ,保留两位小数。
<
文章介绍了如何在给定有序集合及其存取概率分布的情况下,通过计算在所有可能的二叉搜索树中找到具有最小平均比较次数(平均路长)的树结构。算法涉及构建代价矩阵、分割点的选择和二叉树的递归构造。
最低0.47元/天 解锁文章
3321

被折叠的 条评论
为什么被折叠?



