交叉发布:需要对简洁数据结构算法有一个很好的概述
由于我了解简洁数据结构,因此我迫切需要对该领域的最新发展有一个很好的概述。
我已经用谷歌搜索并阅读了很多我可以在谷歌搜索结果顶部看到的文章,这些文章来自我头顶的请求。我仍然怀疑我在这里错过了一些重要的事情。
以下是我特别感兴趣的主题:
二叉树的简洁编码,具有获取父、左/右子、子树中元素数量的有效操作。
这里的主要问题如下:我所知道的所有方法都假设树节点以呼吸优先顺序枚举(如该领域的先驱工作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中有几个很好的链接。