Data structures O(1)访问具有高分支因子的深度3树

Data structures O(1)访问具有高分支因子的深度3树,data-structures,Data Structures,我有一棵深度为3的树,它的分枝因子很高。例如,第一层包含所有分类属,第二层包含所有物种,第三层包含有关物种的数据。 或以图形方式: genus1 genus2 ... genus70000 / | \ / | \ / | \ sp1 sp2 sp3 sp4 sp5 sp6 sp330k sp330k+

我有一棵深度为3的树,它的分枝因子很高。例如,第一层包含所有分类属,第二层包含所有物种,第三层包含有关物种的数据。 或以图形方式:

         genus1         genus2         ...         genus70000
        /   |   \      /   |   \                  /     |    \
      sp1  sp2  sp3   sp4  sp5 sp6           sp330k sp330k+1  sp330k+2
      |    |    |     |    |    |              |       |        |
  data1 data2 data3 data4 data5 data6   data330k data330k+1 data330k+2
事实上,平均每个属大约有5个物种,而不是3个,但这并不重要。我希望以这样的方式存储这些数据,以支持
O(1)
中的以下操作(假设每个属中的物种数量是恒定的):

  • 获取与物种相关的数据
    s
  • 获取属中所有物种的数据
    g
  • 使用数据插入属为
    g
    的物种
    s
  • 我当前的实现在属和属于每个属的成对物种的列表之间存储一个哈希映射,以及与该物种相关的数据。在该方案中,操作
    2
    3
    O(1)
    中运行,但操作
    1
    必须迭代所有属,以便找到包含物种
    s
    的属

    我想知道什么样的数据结构会更好

    编辑

    在将所需内存翻倍的同时解决此问题很容易。我可以只存储一个从物种到它们数据的单独散列图。如果我能做到这一点,而不用把树存放两次,那就太好了

    附言


    如果有什么不同的话,我是用Java7写的。

    你可以有一个额外的
    HashMap
    ,它可以从
    s
    映射到
    g

    你可以尝试一个多维数据结构,其中包含3维数据、属和sp。 例如:kd树、R树或PH树。 不过,我不确定这些方法的效果如何

    PH tree最适合具有10^6个或更多条目的大型数据集。但它部分忽略了维度的数量,因为它们在内部以“转置”64位字符串进行处理

    不管怎样,你得试试看


    免责声明:这是我自己的数据结构。

    是的,这可以工作,但会使我的内存占用增加一倍。我也可以只存储两个hashmap。一个来自g->s->d,一个来自s->d。有没有一种方法可以在不增加内存的情况下做到这一点?