📜  探戈树数据结构

📅  最后修改于: 2021-04-17 10:53:08             🧑  作者: Mango

探戈树是一种在线算法。它是二叉搜索树的一种。它比离线加权平衡二分搜索树更好,因为它达到了O(log{ }log{ }n)相对于竞争比率O(log n)离线权重平衡的二进制搜索树。只需要O(log{ }log{ }n)在树的每个节点上增加额外的内存位,以提高权重平衡二进制搜索树的性能。
探戈树在概念上是一棵树,因为它将二分搜索树分为优先路径非优先路径,这些优先路径本身以辅助树的形式存储。

首选子级和首选路径
普通二叉搜索树查找技术将Tango树的任何节点的首选子级定义为最近接触的子级。详细介绍首选子节点,让我们假设一个子树T的根节点为n,右子节点为p,左子节点为q。如果以p为根的子树中存在以n为根的子树的最近访问节点,则将p称为n的首选子级。
首选路径定义为从根节点开始并沿着路径的所有首选子级到达叶节点的路径。

树_

探戈树

首选路径的辅助树
通过将首选路径的节点存储在平衡的二进制搜索树(特别是红黑树)中来表示首选路径。然后,对于路径P的每个非叶子节点,都有一个非首选子节点q 。这个非首选子级充当新辅助树的根,然后附加以该根为根的新辅助树q到其父级,并以这种方式,很容易将辅助树链接在一起。根据我们自己的需要,还可以选择在辅助树的每个节点中存储一些额外的信息,例如其下方子树中节点的最小深度等。

探戈树上的操作
探戈树上最常见的两个操作是搜索更新

  • 在探戈树中更新

    由于每次更新后节点的首选子节点都会不断变化,因此需要不断更新,因此它需要维护Tango树的结构。无论何时首选更改,首选路径都会在已更改的特定节点处分为两部分,并且首选路径的顶部需要连接到另一个首选路径的末端。为此,请将更新分为两部分:

    1. 裁切过程

      在此操作中,将首选路径在给定节点处分为两条路径-顶部和底部。顶部是包含某个节点级别以上的节点的辅助树,而底部则是包含给定节点级别以下的节点的辅助树。

    2. 加盟流程

      在此操作中,我们将两个辅助树合并在一起。但是,只有在其中一棵合并树的底部节点是另一棵合并树的顶部节点的父节点的情况下,才可以合并它们。此连接操作使用红黑树的串联操作。在顶部路径中存在两个节点,因此,如果其键值存在于这两个节点之间,则称该节点在底部路径中。要进行连接,我们只需在这两个节点之间分割顶部路径,然后将两个生成的辅助树连接到底部路径,我们的生成辅助树就准备好了。

  • 在探戈树中搜索

    要在Tango树中进行搜索,我们只需在概念性二叉树中进行搜索即可。首先通过搜索其辅助树来搜索首选路径。如果在给定的辅助树中找不到该节点,则搜索下一条路径的辅助树,依此类推,直到搜索整个树或找不到所需的节点。