我正在创建一个类似国际象棋的程序的变体,它需要同时生成和遍历一个非常大的树状结构。每个节点有 10 个 bool、一个 int、8 个 ulong、一个 short[64] 和 2 个 ulong[64]。根节点接收一些初始参数,然后从那里以编程方式(递归)确定有效的子节点。
基本上,当用户和程序轮流从子节点遍历到子节点时,我的程序会不断地增长这棵树。每次“选择”一个新的子节点时,它的父节点和兄弟节点都不再需要并被丢弃。当树(平均)达到大约 60 的深度(从初始根节点开始)时,有效子节点的数量自然会开始减少,直到大约 75 的深度,树解析为一个最终节点,没有更多的孩子。
这背后的逻辑起初看起来相当简单,但我经常遇到 OutOfMemoryException ,这完全扼杀了任何进一步的进展。
以下是每“一代”有效儿童的某些平均值:
Generation New Nodes
1 1
2 20
3 4,000
4 30,000
5 2,200,000
6 > 50,000,000
在我的实际程序中,我什至无法完全扩展第五代。当我不保留节点特定数据时(一旦节点的数据被用于确定它自己的子节点,我就会清除它)我可以完全扩展第 5 代,但在第 6 代中途遇到了非常坚固的墙。
理想情况下,我希望我的程序最终达到并在“当前”节点之后维护 8 代节点。我看的越多,这似乎就越不可能。
我厌倦了用 sqlite 数据库运行它,但它不能足够快地生长树。
有谁知道处理非常大的树结构的任何潜在替代方案?