跟踪有向无环图中的节点-如何基于节点标签设置包含/排除?

时间:2019-05-13 13:35:44

标签: python

这不是有关如何处理某些代码中的问题的问题,而是有关如何以最佳方式设置功能的问题。我仍然希望在这里有所帮助!

我在一个团队中使用Python来为节点建立搜索和跟踪功能,这些节点相互连接并且可以显示在有向无环图中。根据某个参数(节点ID或某个标记值)查询包含所有节点的表,用户指定是要跟踪上游,下游还是同时跟踪这两个初始节点,然后返回新节点并全部显示。

通过“连接表”完成跟踪,该表包含每个连接的开始和结束节点的ID。连接表还包含有关输入和输出节点属于哪个“区域”的信息,“ area”标记也为每个节点分别存储在节点表中。

我们已经设置了搜索和跟踪。但是,此处一个非常相关的功能是仅包括其跟踪树包括某个区域中的节点的节点。例如,我可能想要搜索ID包含“ xyz”的节点,在上游和下游对其进行跟踪,但仅显示那些在区域5中至少包含一个节点的跟踪树。初始搜索可能会或可能不会返回节点in这个区域。

搜索返回的起始节点存储在列表中。然后通过使用while循环迭代遍历连接表,比较那里的id并将找到的新id添加到节点列表中来完成跟踪。在跟踪回合中(或在指定的跟踪回合数之后)未添加任何新节点时,while循环将停止。

我认为,要实现目标,可以通过列出列表来完成,每个子列表都包含一个起始节点。在每个跟踪回合中,新跟踪的节点都将添加到包含与其连接的节点的子列表中。这样,每个子列表都可以有一个相应的列表,其中包含节点的面积值,稍后将对其进行检查以确定是包括还是排除它。

但是,某些起始节点最终可能会相互连接,因此,如果它们之间没有比较,则跟踪可能需要运行更多的回合。我可以在每个跟踪回合中比较子列表,如果找到匹配项,则将两个子列表简单地合并(将唯一的节点ID移到新列表中,并删除旧的节点ID)。由于每个回合中可能有任意数量的“会议痕迹”,因此这可能会令人费解。

我想知道是否有更简单的方法来解决这个问题,而我却忽略了它,或者是一种运行起来更快的方法(我知道,我们正在使用Python,但这会非常好)如果添加此功能不会使搜索花费几秒钟的时间)。或者,如果这似乎是解决问题的最佳方法,那么我将对如何有效实施此问题的建议表示赞赏。

0 个答案:

没有答案