节点上描述树结构的最少信息

Minimal Information on a Node to Describe a Tree's Structure

本文关键字:信息 结构 描述 节点      更新时间:2023-10-16

我的问题是:描述节点之间的关系以在树上强制实施结构所需的最少信息量是多少? 如何简明扼要地表述这些规则?

我有一个树数据结构(C++,如果它对任何人都重要。 一个 std::vector of std::vectors,带有指向父项的指针。 节点可以专用化。 当一个节点是专用的时,它可能只是"有效"的,因为它有一定的父节点,或者可能只在它有特定的子节点时才有效。 系统没有100%了解所有不同的节点类型(也就是说,用户使用新节点构建插件,这些节点可能有新规则)。 虽然一切正常,但它依赖于我们对如何构建树的先验知识。 (新用户可以将节点放置在逻辑上没有意义的地方,这是我们想要检测和防止的事情。

我们希望能够"执行"一个有效的结构。 允许某些节点连接到任何地方,而其他节点则具有特殊位置等。 当然,所有节点都继承自一个公共基类,并具有其所有子节点的列表和指向其父级的指针。 很简单。

我的第一次尝试是简单地允许节点列出其有效的父类型。 然而,这导致一些节点非常滥交,并将自己附着在父母身上,这根本没有意义。 为了解决这个问题,我添加了一个节点可以接受的子类型的列表。 这在配对树方面效果很好,但使管理更加困难,并且考虑到某些节点将具有多个继承级别,很难在允许其他类型的子节点的同时掩盖某些类型的子节点。

在这一点上,我认为值得问这个问题。 树木不是我的专长...当然,有人知道一种定义明确的方法来构建这样的树,并以灵活而有意义的方式强制执行关系。 想法还是想法?

其他信息,如果重要的话:结构往往非常宽(数百到数千个节点)和浅(2-10层深)。 往往有一个根有一到五个子树......这是真正的工作开始的地方。 我很高兴使用STL,Boost或任何其他可能在这里有所帮助的库。 我不想重新发明这棵树。 能够表示节点之间的关系以构建树是问题的焦点。

我对你的问题的理解是,你想在节点之间建立一个或多个关系。

最简单的方法是为每种关系提供一个链接。 如果要在关系中沿两个方向(向前和向后)遍历,则需要为每个关系提供两个链接。

如果你想有动态的关系,我建议每个节点都有一个mapstd::map<relation, link>。 第一项(键)将是枚举的关系标识符(或std::string)。 该值将是指向节点的链接。 这将允许您说以下内容:

next_node = node_links[NEXT_BY_ALPHABETICAL];

我建议你画出对象之间的关系。 还要绘制树和节点之间的关系。

另一种选择是使用单独的树,每个关系一个树。 这些树中的每个节点都将包含一个指向数据项的指针。 因此,仅存在一个数据项;但可能存在一个或多个索引(关系)指针。

最后,您可能需要考虑使用数据库,可能是关系数据库。