【发布时间】:2012-03-10 20:03:08
【问题描述】:
我正在尝试构建一棵树,其中每个节点都可以有未指定数量的子节点。实际上,这棵树将拥有超过一百万个节点。
我已经设法构建了树,但是当我用几千个节点填充树时,由于堆满而出现内存错误。这样做的原因是因为我试图将每个节点的子节点存储在 Dictionary 数据结构(或任何数据结构)中。因此,在运行时,我已经创建了数千个这样的数据结构,因为每个节点都可以有未指定数量的子节点,并且每个节点的子节点都将存储在这个数据结构中。
还有其他方法吗?我不能简单地使用变量来存储子节点的引用,因为每个节点可能有未指定数量的子节点。因此,它不像二叉树,我可以有 2 个变量分别跟踪左孩子和右孩子。
请不要对其他方法提出建议。我有需要创建这棵树的理由,不幸的是我不能这样做。
谢谢!
【问题讨论】:
-
改用数据库怎么样?您可以使用 SQLite 及其内存支持,然后您只为每个节点存储一个父链接?然后,如果您想查找节点 10 的所有子节点,则必须查询表,说出类似
SELECT * FROM nodes WHERE parent_id = 10的内容。注意,我不确定这会使用更少的内存,但如果您在几个一千个节点,我猜你为每个节点使用了过多的内存。 -
您是否考虑过优化节点将包含的数据?这有助于减少内存使用量
-
问题是我从来没有将树实现为数据库,也不知道从哪里开始。在插入、删除等方面需要进行很多复杂的计算,我无法想象用数据库来实现它。
-
我知道你说过不要建议任何其他方法,但我无法抗拒!您是否可以只拥有一本字典并用所有对象填充它,然后将子项的键存储在节点中(例如在列表中)?至少只需填充该字典即可显示您是否出于内存原因需要移动到 64 位。
-
"请不要对其他方法提出建议。" ——这似乎很狭隘。您应该专注于以最有效的方式解决问题,而不是以您已经锁定的一种特定方式解决问题。
标签: c# .net data-structures tree nodes