Data structures O(1)访问具有高分支因子的深度3树
我有一棵深度为3的树,它的分枝因子很高。例如,第一层包含所有分类属,第二层包含所有物种,第三层包含有关物种的数据。 或以图形方式:Data structures O(1)访问具有高分支因子的深度3树,data-structures,Data Structures,我有一棵深度为3的树,它的分枝因子很高。例如,第一层包含所有分类属,第二层包含所有物种,第三层包含有关物种的数据。 或以图形方式: genus1 genus2 ... genus70000 / | \ / | \ / | \ sp1 sp2 sp3 sp4 sp5 sp6 sp330k sp330k+
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。有没有一种方法可以在不增加内存的情况下做到这一点?