【发布时间】:2023-11-02 20:54:01
【问题描述】:
我有一个树形结构
struct TrieNode {
std::unordered_map<std::string, TrieNode> children;
std::vector<std::string> terminals;
};
关于其使用的一些细节:
- 树在填充后不会被修改。
- 无序映射中的键是短字符串(不超过 5 个字符)。
这种结构可以变得非常大。我需要计算它在内存中的大小。这个大小不需要非常精确。 是否有任何现有的方法可以做到这一点?
如果不是,我正在考虑这些选项:
- 我可以单独跟踪对此结构的修改。
- 为跟踪空间的容器使用自定义分配器(是否有通用的实现方式?)。
- 为我的结构重载
new运算符以跟踪内存(不知道如何跟踪插入到vector之后)。 - 通过遍历整棵树来计算树填充后的大小(最后的手段,对于大树,它需要很长时间,但结果更精确)。
最好的方法是什么?
【问题讨论】:
-
有封装这个的树类吗?我会在那里追踪它。
-
@KennyOstrom 是的。这个结构完全封装在另一个类中。
-
只要树在被填充后是固定的,我认为“通过遍历整个树来计算树被填充后的大小”不会花费太多额外的时间,因为时间复杂度是
O(n),达到输入的下限。 -
节点数和总字符串长度(终端)似乎是有用的指标。像这样的抽象可能比依赖于实现的“内存”更有用。