节点上描述树结构的最少信息
Minimal Information on a Node to Describe a Tree's Structure
我的问题是:描述节点之间的关系以在树上强制实施结构所需的最少信息量是多少? 如何简明扼要地表述这些规则?
我有一个树数据结构(C++,如果它对任何人都重要。 一个 std::vector of std::vectors,带有指向父项的指针。 节点可以专用化。 当一个节点是专用的时,它可能只是"有效"的,因为它有一定的父节点,或者可能只在它有特定的子节点时才有效。 系统没有100%了解所有不同的节点类型(也就是说,用户使用新节点构建插件,这些节点可能有新规则)。 虽然一切正常,但它依赖于我们对如何构建树的先验知识。 (新用户可以将节点放置在逻辑上没有意义的地方,这是我们想要检测和防止的事情。
我们希望能够"执行"一个有效的结构。 允许某些节点连接到任何地方,而其他节点则具有特殊位置等。 当然,所有节点都继承自一个公共基类,并具有其所有子节点的列表和指向其父级的指针。 很简单。
我的第一次尝试是简单地允许节点列出其有效的父类型。 然而,这导致一些节点非常滥交,并将自己附着在父母身上,这根本没有意义。 为了解决这个问题,我添加了一个节点可以接受的子类型的列表。 这在配对树方面效果很好,但使管理更加困难,并且考虑到某些节点将具有多个继承级别,很难在允许其他类型的子节点的同时掩盖某些类型的子节点。
在这一点上,我认为值得问这个问题。 树木不是我的专长...当然,有人知道一种定义明确的方法来构建这样的树,并以灵活而有意义的方式强制执行关系。 想法还是想法?
其他信息,如果重要的话:结构往往非常宽(数百到数千个节点)和浅(2-10层深)。 往往有一个根有一到五个子树......这是真正的工作开始的地方。 我很高兴使用STL,Boost或任何其他可能在这里有所帮助的库。 我不想重新发明这棵树。 能够表示节点之间的关系以构建树是问题的焦点。
我对你的问题的理解是,你想在节点之间建立一个或多个关系。
最简单的方法是为每种关系提供一个链接。 如果要在关系中沿两个方向(向前和向后)遍历,则需要为每个关系提供两个链接。
如果你想有动态的关系,我建议每个节点都有一个map
,std::map<relation, link>
。 第一项(键)将是枚举的关系标识符(或std::string
)。 该值将是指向节点的链接。 这将允许您说以下内容:
next_node = node_links[NEXT_BY_ALPHABETICAL];
我建议你画出对象之间的关系。 还要绘制树和节点之间的关系。
另一种选择是使用单独的树,每个关系一个树。 这些树中的每个节点都将包含一个指向数据项的指针。 因此,仅存在一个数据项;但可能存在一个或多个索引(关系)指针。
最后,您可能需要考虑使用数据库,可能是关系数据库。
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- 使用 trie 数据结构链接不同类型的信息
- 如何从结构列表中筛选信息
- 使用结构保存用户C++输入的信息
- (C++) 如何从要存储在结构数组中的二进制文件中读取.dat信息?
- 从结构化阵列中读取信息
- 通过将结构信息从二进制文件读取到数组中,然后返回到文件C
- 将信息读入结构数组 c++
- 获取存储在矢量结构中的信息时出现问题
- 加载格式化的二进制文件并将信息分配给结构 c++
- 如何将信息从二进制数据文件读取到结构c 的数组中
- 难以调用函数和结构之间的信息
- 将文件中的信息插入到结构中
- 如何获取有关结构/类内部"current type"的信息?
- 结构体的Hexdump未输出正确的信息
- 在类定义中使用结构的详细信息和优点
- 节点上描述树结构的最少信息
- 要聚合的结构必须知道聚合此结构的结构中的信息
- 将2个结构数组中的信息输出到一个文件中