Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 最优搜索树:计算搜索树的成本并表明它不是最优的_Algorithm_Optimization_Data Structures_Tree_Binary Search Tree - Fatal编程技术网

Algorithm 最优搜索树:计算搜索树的成本并表明它不是最优的

Algorithm 最优搜索树:计算搜索树的成本并表明它不是最优的,algorithm,optimization,data-structures,tree,binary-search-tree,Algorithm,Optimization,Data Structures,Tree,Binary Search Tree,考虑以下二叉搜索树,以及以下查找频率: 13 Key | 13 | 11 | 26 | 1 | 12 | 28 / \ -----------------------------------------

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

       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
成为一个工作负载。在
K
上的搜索树
T
对于
R
iff
P(T)=min{P(T')|T'是K}的搜索树是最佳的

@templatetypedef非常感谢您花时间和帮助!!你的回答对我来说很好,我从中了解了很多事情。这是一棵树,我发现它比任务中的这棵树更优化:

        26
       /  \
      13   28
     /
    11
   /  \
  1    12

上面这棵树的成本是
143
,而这棵树的成本是
138
。因此,这一个确实更为优化,任务也得到了解决:)

基本上,您正在接近正确计算BST中的总查找时间的问题。您将获取树中的每个节点,使用深度确定执行在该节点结束的查找所需的比较次数,将这些值乘以查找次数,并对结果求和。我没有仔细检查你的精确计算,所以你可能遗漏了什么

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

您前面所做的计算是一种从BST和将要执行的查找信息开始的方法,然后计算与在执行这些查找过程中最终进行的比较数量相对应的数字。这个数字本质上告诉你这些查找的速度有多快——数字越高意味着查找需要的时间越长,而数字越低意味着查找需要的时间越短

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

这里的问题是要表明您拥有的树不是最优的。这意味着你需要证明这不是你能做的最好的树。一种方法是找到一棵更好的树。那么,您是否可以找到另一个具有相同密钥的BST,其中总查找时间低于给定的时间


祝你好运

您好,非常感谢您花时间回答我,您的回答对我帮助很大!!:)我很感激,也很抱歉我的英语。我已经编辑了我的答案,写了更多的优化树,但我需要很多时间来找到它,我想是40分钟。对于考试,我有4个小时的时间,有10个任务。也许你们知道找到最好的树而不仅仅是更好的树的诀窍?我知道这项任务要求更好的树而不是最好的。但也许找到最好的树的诀窍很快就完成了?还是说没有把戏?如果技巧不长/不复杂,也许你可以告诉我:D有少量这样的节点,我认为你可以通过反复试验和直觉来找到最好的免费节点。有一些算法可以在多项式时间内生成最优树,但是手工操作会有点痛苦。再次感谢您在您回答之前我对这个主题没有任何线索,现在我感觉好多了,也很高兴:)