(已经在主要网站上提出要求,但是在这里也要求获得更好的报道,抱歉)
由于我了解简洁的数据结构,因此迫切需要对这一领域的最新发展进行良好的概述。
我已经在Google上搜索并阅读了很多文章,这些文章是我在脑海中提出的,我可以在google搜索结果中看到的很多文章。我仍然怀疑我在这里错过了一些重要的事情。
以下是我特别感兴趣的主题:
二进制树的简洁编码,通过有效的操作来获取父树,左/右孩子,子树中的元素数量。
这里的主要问题如下:我所知道的所有方法都假定树节点以呼吸优先顺序枚举(例如在该领域的先驱工作中,Jacobson,G. J(1988)。简洁的静态数据结构),该方法没有似乎适合我的任务。我处理的是深度优先布局中给出的巨大的二叉树,而深度优先节点索引是其他节点属性的关键,因此更改树布局对我来说有一些成本,我希望将其最小化。因此,有兴趣参考其他BF树布局来获得对作品的引用。
外部存储器中的大型可变长度项数组。数组是不可变的:我不需要添加/删除/编辑项目。唯一的要求是O(1)元素访问时间和尽可能低的开销,这比直接的偏移量和大小方法更好。这是一些我收集的有关典型数据的统计信息:
典型的物品数量-数亿个,最高达数十毫巴;
大约30%的项目的长度不超过1 位;
40%-60%的项目长度小于8位;
只有百分之几的项目的长度在32到255位之间(限制为255位)
平均项目长度〜4位+/- 1位。
从理论上讲,商品长度的任何其他分布都是可能的,但所有实际有趣的情况下的统计数据都接近上述值。
链接到各种复杂性的文章,任何晦涩难懂的教程,或多或少有文献记载的C / C ++库,-在类似任务中对您有用的任何东西,或者您的有根据的猜测看起来像的东西-都应受到感激。
更新:我忘记添加问题1:我正在处理的二叉树是不可变的。我没有更改它们的要求,我只需要以各种方式遍历它们(总是从节点移动到子节点或到父节点),因此此类操作的平均成本为O(1)。
同样,典型的树有千千万万个节点,因此不应完全存储在RAM中。