假设我们使用一个二进制树来存储只是一系列位的项。顶层节点的左节点表示0,右1表示数据的最低有效位:
Bit 1: 0 1
| |
Bit 2: 0 1 0 1
| | | |
Bit 3:01 01 01 01
^^ ^^ ^^ ^^
Value:04 26 15 37
与正常的基于比较的节点排列相比,这种方式的优势在于永远不需要重新平衡。此外,节点可能占用更少的空间。
这是一个有用的数据结构,还是有更好的版本?它有名字吗?
二进制尝试相对于平衡的二进制搜索树有一些缺点。特别是,存储要求可能要高得多;一个包含n个元素的二叉树需要O(n-logU(空间,其中U是存储在trie中的最大值(需要O(logU(位才能写出它(。当您存储中等数量的大(比如64位(数字时,这可能会成为一个问题。您可以通过使用Patricia trie(有时称为基数trie(来优化存储问题,方法是删除只有一个子节点的节点,尽管这需要更巧妙的实现。
在二叉树的顶部进行一些非常巧妙的优化,可以派生出x-fast-tree和y-fast-tree数据结构。后者使用O(n(总存储,并支持在时间O(log log U(中查找。理论上,这可能比BST要好得多,尽管在实践中,隐藏在这里的恒定因素并不好。