繁体   English   中英

最佳搜索树:计算搜索树的成本并显示它不是最优的

[英]Optimal Search Tree : Calculate the cost of the search tree and show that it is not optimal

考虑以下二叉搜索树,以及以下查找频率:

       13                          Key       | 13 | 11 | 26 | 1 | 12 | 28                                                                                
     /    \                        -----------------------------------------                                                
   11      26                      Frequency | 26 |  5 | 25 | 1 |  3 | 15                                         
  /  \      \                                                 
 1   12      28                                               

我得到了这个问题:

针对给定的搜索频率计算上述搜索树的成本,并显示搜索树对于给定的搜索频率不是最佳的。

我计算了成本,但我的老师说我做错了,但没有解释原因。

因此,我们需要为计算成本做的是检查第一个节点的位置。 13是1级,频率13是26 所以我们做26*1=26

节点11和26处于级别2,节点1,12和28处于级别3。

最后我们有成本: 26*1 + 5*2 + 25*2 + 1*3 + 3*3 + 15*3 我的老师说这个计算不正确,但没有解释原因。

另外,您如何证明树不是最佳的? 这是我从脚本中得到的定义:

K是一组密钥, R是工作负载。 对于R iff P(T) = min{P(T') | T' is search tree for K}K搜索树T是最佳的 P(T) = min{P(T') | T' is search tree for K}

@templatetypedef非常感谢您抽出宝贵的时间和帮助! 你的回答对我很好,我从中理解了很多东西。 这是树,我发现它比任务中的这棵树更优化:

        26
       /  \
      13   28
     /
    11
   /  \
  1    12

上面的树有143成本,这个有138 所以这个真的更优化,任务解决了:)

从根本上说,您正在接近正确计算BST中的总查找时间的问题。 您将使用树中的每个节点,使用深度来确定执行以该节点结束的查找所需的比较次数,将这些值乘以查找次数,并对结果求和。 我并没有仔细地仔细检查你的确切计算,所以你可能错过了一些东西。

您的第二个问题是确定二叉搜索树对于给定的查找集是否是最佳的。 您已经给出了严格的数学定义,但在这种情况下,我认为在更高层次上解释这一点可能会更容易一些。

您之前在此处进行的计算是一种从BST开始的方式以及有关将执行哪些查找的信息,然后计算与在执行这些查找过程中最终将进行的比较次数相对应的数字。 这个数字实际上告诉你这些查找的速度有多快 - 更高的数字意味着查找需要更长的时间,更低的数字意味着查找将花费更少的时间。

现在,假设您想制作一个BST,它将花费最少的总时间来执行相关的查找。 换句话说,您希望给定的一组键和查找频率具有“最佳”BST。 该BST将是总查找成本最低的那个,其中该成本是使用您之前处理的方法计算的。 具有该属性的BST的术语 - 它对于您可以制作的所有可能BST中的那些频率具有最佳查找速度 - 是最佳BST。

这里的问题是表明你拥有的树不是最佳的。 这意味着您需要证明这不是您可以制作的最佳树。 一种方法是找到更好的树。 那么你能找到另一个具有相同键的BST,其总查找时间低于你给出的那个吗?

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM