交叉发布:Need a good overview for Succinct Data Structure algorithms
因为我知道Succinct Data Structures我迫切需要对该领域的最新发展有一个很好的概述。
我已经谷歌搜索并阅读了很多文章,我可以在google结果的顶部看到我的头顶请求。我仍然怀疑我错过了一些重要的事情。
以下是我特别感兴趣的主题:
二进制树的简洁编码,有效地获取父,左/右子,子树中的元素数。
这里的主要问题如下:我所知道的所有方法都假设以节点优先顺序枚举的树节点(如该领域的先驱工作 Jacobson,G.J(1988)。简洁的静态数据结构),这似乎不适合我的任务。我处理深度优先布局中给出的巨大二叉树,深度优先节点索引是其他节点属性的关键,因此更改树形布局对我来说有一些成本,我想最小化。因此,有兴趣参考考虑其他BF树布局的工作。
外部存储器中的大型可变长度项目数组。数组是不可变的:我不需要添加/删除/编辑项目。唯一的要求是O(1)元素访问时间和尽可能低的开销,比直接的偏移和大小方法更好。以下是我收集的有关我的任务典型数据的一些统计数据:
典型的物品数量 - 数亿,高达数十万;
约30%的项目长度不超过1 位;
40%-60%的项目长度小于8位;
只有几个百分比的项目长度在32到255位之间(255位是限制)
平均项目长度~4位+/- 1位。
项目长度的任何其他分布在理论上都是可能的,但所有实际上有趣的案例都有接近上述描述的统计数据。
链接到任何复杂的文章,任何模糊的教程,或多或少记录在案的C / C ++库, - 在类似的任务中对你有用的任何东西,或者你的教育猜测看起来像什么 - 所有这些都非常感谢
更新:我忘了添加问题1:我正在处理的二叉树是不可变的。我没有改变它们的要求,我只需要以各种方式遍历它们,总是从节点移动到子节点或父节点,这样这些操作的平均成本是O(1)。
此外,典型的树有毫单位的节点,不应完全存储在RAM中。
更新2 如果有人感兴趣的话。我在https://cstheory.stackexchange.com/a/11265/9276中收到了一些很好的链接。