我正在寻找可以以规范形式组织的搜索树。
如果我在这里使用“规范”一词错误,请原谅。我的意思是;给定一组要存储在树中的项目,无论做什么操作使这些项目最终都在那里,结果节点结构都是相同的。
我不需要始终提供此功能的结构;只要有一个“让它成为规范请”就足够了。
我目前在C#中创建了一个基本的AVL树实现。
当我向它添加七个项目(1-7)时,通过附加它们,我最终得到以下节点:
4
/ \
2 6
/ \ / \
1 3 5 7
如果我首先添加项目1, 2, 0, 3, 4, 5, 6, 0, 7
,通过附加它们,然后删除这两个零,我最终会使用以下节点:
3
/ \
2 5
/ / \
1 4 7
/
6
枚举这两棵树中的项目会产生相同的预期结果。但节点结构不同,这是我想避免的。
我知道我可以通过从头开始创建一个新树来实现“请使其成为规范”特征。但这不会扩展。
如果达到规范形式需要付出太多努力,我也很乐意将规范财产换成速度。
为什么“规范”?
我正在寻找一个想法,我将使用基于内容的分块算法(TTTD)对树进行分块,然后将这些块存储在不可变的blob存储区中。
使用这种方法,一些子节点将内联:存储在与父节点相同的块中。其他节点将是外部的:由基于内容的地址(SHA-1哈希)引用。
当两个子树具有相同的内容(包括结构)时,它们将具有相同的地址。这个属性有很多原因;包括:
答案 0 :(得分:2)
您可以使用trie,其最大更新次数和搜索时间是您的密钥的位长,或者您可以使用A. Andersson and Th. Ottmann. "Faster Uniquely Represented Dictionaries",其最大更新和搜索时间为\ Theta(n ^ {1/3})。