加载中…
正文 字体大小:

Ternary Search Tree 三元搜索树

(2013-06-21 10:34:06)
分类: 算法

计算机科学中三元搜索树是一种前缀树作为一个二叉搜索树的节点排列。像其他的前缀树,三元搜索树可以用于作为关联映射结构与增量字符串检索的能力。但是,三元搜索树,空间利用率更高标准前缀树相比,在成本,速度。三元搜索树的常见应用包括拼写检查自动完成

内容

  隐藏 

说明编辑 ]

三元搜索树的每个节点存储一个字符,一个对象(或指针对象取决于实施),以及它的三个孩子的传统命名为“平等孩子”卤味孩子“和”喜小子的指针。“ ]节点的状态也有一个指针到它的父节点,以及节点是否标志着一个单词的结尾的一个指标。]劳的孩子指针必须指向的字符值是一个节点小于当前节点。相反,喜的孩子指针必须指向一个节点,其特征是大于当前节点。]下图显示了三元搜索树的琴弦“为”,“”,“杯”,“可爱” “他”,“我”和“我们”:


          Ç
        / | \
       AUH
       | | | \
       tteu
     / / | / |
    speis

与其他特里的数据结构,三元搜索树中的每个节点代表存储的字符串的前缀。中间的一个节点开始,前缀子树中的所有字符串。

三元搜索树操作编辑 ]

来查找编辑 ]

要查找特定节点与节点相关联的数据,需要一个字符串键。查找程序开始检查该树的根节点,并确定以下条件已经发生。如果第一个字符的字符串小于根节点的字符,可以被称为一个递归查找树,其根是当前根的LO的孩子。同样,如果第一个字符是大于当前树中的节点,然后递归调用树的根是喜在当前节点的孩子。]作为最后的情况下,如果第一个字符该字符串是等于当前节点的字符,则该函数返回的节点,如果有没有更多的字符键。如果有更多的字符键,则键的第一个字符必须除去的递归调用是由给定的平等的孩子节点和修改后的键。]这也可以通过使用写在一个非递归的方式到当前节点的指针和一个指针指向的当前字符的键。]

插入编辑 ]

三元搜索插入值,可以定义递归定义查找。该递归方法正不断被称为树的给定的密钥获得通过修剪字符逐渐缩短关闭前的关键节点上。如果此方法达到的节点尚未创建,创建节点,并赋予它在关键的第一个字符的字符值。是否创建一个新的节点或没有,该方法检查,看是否在字符串中的第一个字符是大于或小于该节点的字符值,使在查找操作中的相应节点的递归调用。如果,但是,关键的第一个字符是等于节点的值,然后插入过程称为等于孩子和密钥的第一个字符远离修剪。]一样的二进制搜索树和其他数据结构,三元搜索树可以成为退化键的顺序而定。]插入键为了达到最坏的可能堕落的树是单向的。]随机顺序插入钥匙经常会产生一个均衡的树。]

运行时间编辑 ]

三元搜索树的运行时间与输入显着变化。三元搜索树运行最好的时候,给出了几个类似的字符串,尤其是当这些字符串都有一个共同的前缀。另外,三元搜索树是有效的,当存储大量相对较短的字符串(如在一本字典的话)。]运行时间为三元搜索树二叉搜索树,因为它们通常运行在数时间都差不多,但可以以线性时间运行在退化情况。

三元搜索树操作的时间复杂度为:]

平均情况的运行时间 最差情况下的运行时间
查找 O(log n)的 O(N)
插入 O(log n)的 O(N)
删除 O(log n)的 O(N)

其他数据结构的比较编辑 ]

尝试编辑 ]

虽然比其他的前缀树慢,三元搜索树对于较大的数据更适合设置,由于它们的空间效率。]

哈希映射编辑 ]

哈希表也可以用来代替字符串映射到值的三元搜索树。然而,哈希映射也经常使用更多的内存比三元搜索树(但不是尽可能尝试)。此外,哈希映射通常慢于报告,是不是在相同的数据结构,因为它必须比较整个字符串,而不是仅仅的前几个字符的字符串。有一些证据表明三元搜索树,运行速度比哈希映射。]此外,哈希映射不容许许多三元搜索树的用途,如近邻查找。

使用编辑 ]

三元搜索树可以用来存储和检索大量的字符串必须以任意顺序来解决很多问题。一些最常见的或最有用的是如下:

编辑 ]

哈希表

参考文献编辑 ]

  1. Ç 奥斯特洛夫斯基,伊戈尔。“高效自动完成三元搜索树”
  2. 一个 B̶ Ç ð Ë H I    Ń 多布斯。“三元搜索树”
  3. A B 罗贝尔,卢卡斯。“三元搜索树”
  4. Ç 弗林特,沃利“植物的三元搜索树”您的数据

外部链接编辑 ]

隐藏 ]
二叉树
自平衡二叉搜索树
B-树
尝试
二进制空间分割(BSP)
非二进制树
空间数据分区树木
其他树木

0

阅读 评论 收藏 转载 喜欢 打印举报
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有