我有一棵包含 125,000 个节点的树(最多 2 个子节点)。我正在尝试确定每个节点的子节点数(直接和间接)。因为树是一个 DAG ,但到每个子节点的链接数量是无限的,所以许多节点实际上会将所有其他节点都作为子节点。树的总复杂度,仅供参考,如果没有记忆,则超过 10^30。这意味着,即使存储一个指向每个子节点的简单指针(并记忆输出)也会产生 15.625GB 的数据块,甚至忽略哈希表、内存分配器和其他开销。
虽然这是所需的输出,但要实现它需要一点时间和太多内存。我只有一个工作站,具有公平但不是顶级的电源(i7 930、6GB RAM)。
有什么方法可以记忆或以其他方式缓存表,以便在合理的时间内仍然可以访问数据(我可能会对数据进行数十万次访问)?我考虑过懒惰地评估查询,但我担心访问它们需要多长时间。
此外,我对哪些节点是子节点并不特别感兴趣,但我确实需要知道它们的数量——这基本上与我相信的相同,因为我不能将同一个子节点数两次。
编辑:树是不可变的。我要做的就是阅读孩子的数量。