python - 如何通过将每个最长的非分支路径替换为连接路径起点和终点的边来减少 DAG?
问题描述
我想通过将每个最长的非分支路径替换为连接路径起点和终点的边缘来减少 DAG。
例如,对于这样的图表,我想减少它
a->b->c->d
a->d
到以下。当然,真正的 DAG 可能比这更复杂。
a->d
a->d
我找不到使用networkx的方法。有人知道如何在网络中这样做吗?谢谢。
解决方案
据我所知,Networkx 不支持开箱即用。不过实现起来并不复杂。您可以简单地遍历图中的节点,然后执行以下步骤:
- 删除恰好具有一条传入边和一条传出边的每个节点。
- 用一条新边将传入边的源节点连接到传出边的目标节点。
这似乎有效:
def should_remove_node(graph, node):
return graph.in_degree(node) == 1 and graph.out_degree(node) == 1
for node in list(G.nodes()):
if should_remove_node(G, node):
in_node = list(G.in_edges(node))[0][0]
out_node = list(G.out_edges(node))[0][1]
G.add_edge(in_node, out_node)
G.remove_node(node)
推荐阅读
- javascript - 我可以使用 javascript 在跨度文本上附加锚标记吗
- javascript - 如何使用事件 DRY 创建函数?
- ios - 使用自动填充支持更改密码
- python - 当页面偏移值永远不会结束时如何进行网页抓取
- flutter - Flutter 代码是否可以在不混淆的情况下轻松进行逆向工程?
- javascript - 如何将集合复制到 mongoDB 中的另一个新集合
- r - 如何将公式传递给具有权重的 lm 对象?
- java - How to inject beans without interface in Mongock changelogs
- java - 无法通过 Gradle 使用 log4j 将日志写入日志文件
- javascript - TypeError [INVALID_TYPE]:提供的覆盖不是权限覆盖的数组或集合。不和谐 v12