【问题标题】:Which is faster, a ternary search tree or a binary search tree?三叉搜索树和二叉搜索树哪个更快?
【发布时间】:2014-10-12 07:27:06
【问题描述】:

三叉搜索树需要 O(log(n)+k) 比较,其中 n 是字符串的数量,k 是要搜索的字符串的长度,二叉搜索树需要 log(n) 比较,那么为什么 TST 比BST ?

【问题讨论】:

    标签: time-complexity binary-search-tree ternary-search-tree


    【解决方案1】:

    因为在三进制情况下是 log3(n),而在二进制情况下是 log2(n)。

    【讨论】:

    • -1,对不起。三元搜索树在 log₃(n) 时间内找不到元素。如果您有某种假设的三叉树,其中三个孩子中的每一个都有三分之一的后代,那么 log₃(n) 时间就是您将得到的时间;但是在 ternary search tree 中,中间的孩子通常只有很小一部分的后代。
    【解决方案2】:

    三元搜索树是专门为存储字符串而设计的,因此我们的分析需要考虑到存储的每个项目都是一个具有一定长度的字符串。假设数据结构中最长的字符串长度为L,总共有n个字符串。

    您是正确的,二叉搜索树在进行查找时仅进行 O(log n) 比较。但是,由于存储在树中的项目都是字符串,因此每次比较都需要 O(L) 时间才能完成。因此,在这种情况下,使用二叉搜索树进行搜索的实际运行时间将是 O(L log n),因为有 O(log n) 次比较,每次花费 O(L) 时间。

    现在,让我们考虑一个三元搜索树。使用标准 TST 实现,对于要查找的输入字符串的每个字符,我们执行 BST 查找以找到要下降到的树。这需要时间 O(log n),我们执行 L 次,总运行时间为 O(L log n),与 BST 查找时间相匹配。但是,您实际上可以通过将三元搜索树中的标准 BST 替换为 weight-balanced trees 来改进这一点,其权重由每个子树中的字符串数给出,可以使用更仔细的分析来表明查找的总运行时间将为 O(L + log n),这比标准 BST 查找要快得多。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      相关资源
      最近更新 更多