Data structures 最优二叉搜索树和AVL树的比较?

Data structures 最优二叉搜索树和AVL树的比较?,data-structures,binary-search-tree,dynamic-programming,graph-algorithm,avl-tree,Data Structures,Binary Search Tree,Dynamic Programming,Graph Algorithm,Avl Tree,我正在准备期末考试,在讨论这些话题时,我遇到了一些疑问 我知道最优二叉搜索树根据节点的频率为树提供了最优的结构。其思想是将具有较高频率(同时满足bst属性)的节点保持在顶部,以获得最佳解决方案 而Avl是BST,它在旋转时执行平衡,因此提供平衡树,但频率在这里不起作用 因此,我的问题是,如果我们知道,对于各个节点的频率,我们得到一个最佳的bst结构,其形式如下: 例如: 例如,链表是一种结构,但它是最佳的,因为频率是[15,13,10,4,2..] 但如果用AVL解决了这个问题,AVL将平衡树并

我正在准备期末考试,在讨论这些话题时,我遇到了一些疑问

我知道最优二叉搜索树根据节点的频率为树提供了最优的结构。其思想是将具有较高频率(同时满足bst属性)的节点保持在顶部,以获得最佳解决方案

而Avl是BST,它在旋转时执行平衡,因此提供平衡树,但频率在这里不起作用

因此,我的问题是,如果我们知道,对于各个节点的频率,我们得到一个最佳的bst结构,其形式如下: 例如:

例如,链表是一种结构,但它是最佳的,因为频率是[15,13,10,4,2..]

但如果用AVL解决了这个问题,AVL将平衡树并形成一个不同的结构,使其不适合这些频率。 所以,我的问题是,如果我们知道节点各自的频率,那么与最优二叉搜索树相比,对这些数据应用AVL不是正确的选择? 在这种情况下,最优二叉搜索树是更好的选择吗

如果有人能澄清我的疑虑,我将不胜感激


提前感谢。

最佳搜索树几乎永远不会有用,因为您很少能够提前预测查询频率。即使可以,一个有十亿个节点的AVL树的最坏情况高度约为44。因此,在现代处理器上查找任何元素都需要43次指针遍历,可能需要170条指令。在完美的条件下,一棵最优的树可能会把它砍成4棵。如果应用程序中166条指令是每次查找的重要性能差异,则很难找到。它们确实存在,但它们非常罕见。我同意在实际应用中,提前预测频率是非常罕见的情况。所以,你们的意思是说,考虑到现代处理器更好的性能,最优二叉搜索树对现代处理器并没有多大用处。此外,使用avlIf创建数十亿个具有平衡的节点会很慢如果您需要创建一个具有十亿个插入和不删除的AVL树,那么,是的,在不进行重新平衡的情况下对数据进行排序和构建树可能会更快。(重新平衡非常便宜,因此差异可能非常小。)但是,这是一种非常罕见的情况。通用数据结构的美妙之处在于,它们98%的时间都是可用的,没有详细的性能考虑。这就是为什么实际上总是先用最简单的方法实现(例如,使用普通插入构建树),然后在发现瓶颈后进行优化。好的。谢谢你的详细介绍​ 解释。非常有用。最佳搜索树几乎从来没有用过,因为您很少能够提前预测查询频率。即使可以,一个有十亿个节点的AVL树的最坏情况高度约为44。因此,在现代处理器上查找任何元素都需要43次指针遍历,可能需要170条指令。在完美的条件下,一棵最优的树可能会把它砍成4棵。如果应用程序中166条指令是每次查找的重要性能差异,则很难找到。它们确实存在,但它们非常罕见。我同意在实际应用中,提前预测频率是非常罕见的情况。所以,你们的意思是说,考虑到现代处理器更好的性能,最优二叉搜索树对现代处理器并没有多大用处。此外,使用avlIf创建数十亿个具有平衡的节点会很慢如果您需要创建一个具有十亿个插入和不删除的AVL树,那么,是的,在不进行重新平衡的情况下对数据进行排序和构建树可能会更快。(重新平衡非常便宜,因此差异可能非常小。)但是,这是一种非常罕见的情况。通用数据结构的美妙之处在于,它们98%的时间都是可用的,没有详细的性能考虑。这就是为什么实际上总是先用最简单的方法实现(例如,使用普通插入构建树),然后在发现瓶颈后进行优化。好的。谢谢你的详细介绍​ 解释。真的很有帮助。
10
  \
   12
     \
      14
        \
         16...And so on