具有规范布局的搜索树

时间:2016-03-16 14:42:42

标签: c# algorithm data-structures

我正在寻找可以以规范形式组织的搜索树。

如果我在这里使用“规范”一词错误,请原谅。我的意思是;给定一组要存储在树中的项目,无论做什么操作使这些项目最终都在那里,结果节点结构都是相同的。

我不需要始终提供此功能的结构;只要有一个“让它成为规范请”就足够了。

我目前在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哈希)引用。

当两个子树具有相同的内容(包括结构)时,它们将具有相同的地址。这个属性有很多原因;包括:

  • 有效计算两个子树之间的差异。
  • 缓存。
  • 同步。

1 个答案:

答案 0 :(得分:2)

您可以使用trie,其最大更新次数和搜索时间是您的密钥的位长,或者您可以使用A. Andersson and Th. Ottmann. "Faster Uniquely Represented Dictionaries",其最大更新和搜索时间为\ Theta(n ^ {1/3})。