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

时间:2017-09-18 18:31:36

标签: algorithm optimization data-structures tree binary-search-tree

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

       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成为工作负载。 T上的搜索树K最适合R iff P(T) = min{P(T') | T' is search tree for K}

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

        26
       /  \
      13   28
     /
    11
   /  \
  1    12

上面的树的费用为143,而且这个费用为138。所以这个更优化,任务解决了:)

1 个答案:

答案 0 :(得分:4)

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

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

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

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

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

祝你好运!