多叉树的序列化和反序列化--急求

yang228 2011-09-16 09:29:56
我需要操作一个比较大的多叉树结构,有的结点可能有几千的孩子,这个树结构是我读文件生成的,文件大概2M多,生成树结构太慢了,我想直接序列化之后存储起来,以后直接读序列化的文件,这样应该会快很多吧。 期待高手给点意见啊。。。
...全文
597 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yang228 2011-09-16
  • 打赏
  • 举报
回复
python 搞这个很爽吗? 额,还没用过。。
冻结 2011-09-16
  • 打赏
  • 举报
回复
如果用python,那就爽了。
冻结 2011-09-16
  • 打赏
  • 举报
回复
以前弄过,
序列化的时候,深度遍历。
反序列化的时候,记录一个节点总数,用父子关系,再新建这个结构。

我用的是MFC的序列化。
yang228 2011-09-16
  • 打赏
  • 举报
回复
这个建树的时候,每次都要按层遍历,比较麻烦,解析的时候肯定慢了, 我想着序列化好了的话,下次生成的时候只需要读文件就可以了,不需要解析,这样就能快不少了。
SonicLing 2011-09-16
  • 打赏
  • 举报
回复
先想想如何提高解析速度吧。序列化和反序列化本质还是解析、反解析,只不过采用一种好的顺序可能会快一点,但是也不一定能快多少,这要看你原先的解析难度有多难,速度最快能有多快。
yang228 2011-09-16
  • 打赏
  • 举报
回复
原来的文件吗? 类似于这样的, abc def aag
我做的树就是root
a d
b a e
c g c
大概这样
qq120848369 2011-09-16
  • 打赏
  • 举报
回复
B树么,不解释。
ryfdizuo 2011-09-16
  • 打赏
  • 举报
回复
文件中是怎么存储的。
yang228 2011-09-16
  • 打赏
  • 举报
回复
额,大家给点意见吧。。在线等。
SonicLing 2011-09-16
  • 打赏
  • 举报
回复

template<typename T>
struct node_storage
{
T data;
unsigned parent;
};

template<typename T>
struct node : public node_storage<T>
{
std::list<unsigned> children;
}

typedef std::vector<node<my_type> > tree_t;
tree_t my_tree;

node_storage<my_type> *serial = new node_storage<my_type>(my_tree.size());
for ( ... ) serial[i] = my_tree[i];

fwrite(serial, sizeof(node_storage<my_type>), my_tree.size(), fp);

//========================================

//计算count
fread(serial, sizeof(node_storage<my_type>), count, fp);

for (...) my_tree.push_back(serial[i]);

// 重建children列表
for (...) my_tree[my_tree[i].parent].children.push_back(i);

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧