嵌套哈希的正确数据结构

时间:2013-02-14 04:59:55

标签: algorithm data-structures

表示如下关系的正确数据结构是什么?例如,我最好将其表示为树吗?如果是这样,这三个怎么样?我的目标是在内存中创建具有最佳内存占用空间的A类实例,并快速插入任何级别的嵌套。

每个嵌套词典云都有数百万个项目,E类大小每个类大约10MB。

    public class A
    {
        private Dictionary<int, B> someName;
    }

    public class B
    {
        private Dictionary<int, C> someName;
    }

    public class C
    {
        private Dictionary<int, D> someName;
    }

    public class D
    {
        private Dictionary<int, E> someName;
    }

    public class E
    {
           //10 Mb worth of properties
    }

1 个答案:

答案 0 :(得分:1)

外部存储器上有许多算法和数据结构,由于数据量非常大,因此可能包含您想要的内容。

当我们处理外部内存问题时,我们通常使用每个操作的I / O来评估数据结构的有效性。

I/O Model

您正在考虑将此表示为树,我认为这是一个很有前景的解决方案。基本上,我们需要一个搜索树,比如B树。更具体地说,是外部存储器上的平衡B树。

我认为你可以使用重量平衡的B树,它是B树和BB [α]树的组合,来解决这个问题。

具有参数b和k(b> 8,k≥8)的权重平衡B树具有以下约束:

  1. 所有叶子在同一级别上,包含k / 4和k元素之间。

  2. 级别l的内部节点v具有w(v)&lt; b ^ l * k。

  3. 除了root之外,级别l的内部节点v具有w(v)&gt; 1/4 * b ^ l * k。

  4. 根有多个孩子。

  5. 我们可以推断内部节点度在(1/4 * b ^ l * k)/(b ^ l * k)= 1 / 4b和(b ^ l * k)/(1/4 * b)之间^ l-1 * k)= 4b。

    具有分支参数b和叶参数k =Ω(B)的权重平衡B树具有以下属性:

    Weight-Balanced B-Tree

    1. 空格:O(N / B)
    2. 高度:O(log(b,N / k))
    3. 更新后的O(log(b,N))重新平衡操作
    4. 证明不是很复杂,可以在External Memory Geometric Data Structures编写的Lars Arge中看到。外部存储器数据结构的注释非常好,我强烈建议你阅读。您可以先阅读L.Arge的一些lecture notes,它可以帮助您快速了解此数据结构并做出决定。