gpt4 book ai didi

python - 如何解决模块依赖关系的 DAG?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:50:37 24 4
gpt4 key购买 nike

我正在使用 networkx 构建一个 DAG,表示我的几个模块之间的依赖关系。

考虑服装“模块”之间的依赖关系:

import networkx as nx
dependencies = {
'underpants': [],
'socks': [],
'pants': ['underpants'],
'shirt': [],
'sweater': ['shirt'],
'coat': ['shirt', 'sweater'],
'shoes': ['socks', 'pants']
}
modules = dependencies.keys()

G = nx.DiGraph()

for mod in modules:
G.add_node(mod)

for mod, deps in dependencies.items():
for dep in deps:
G.add_edge(mod, dep)

nx.draw_networkx(G)

enter image description here

这意味着如果我想穿鞋,我需要已经穿上 socks 和裤子。并且通过扩展,内裤(裤子的依赖)。

我现在想要一个接受“模块”并以我之前必须运行的正确顺序返回所有其他模块的函数。

例子:

prerequisites("pants") == ["underpants"]
prerequisites("underpants") == []
prerequisites("shoes") == ["underpants", "pants", "socks"] # or: ["socks", "underpants", "pants"] would also work.

我确定存在这个问题,我只是不知道它的算法/函数名称,对吧?

我认为通过 list(nx.topological_sort(G)) 获得的拓扑顺序几乎就是我想要的。然而在这种情况下它会返回

['shirt', 'sweater', 'coat', 'socks', 'underpants', 'pants', 'shoes']

所以如果我想穿 socks ,这个结果会告诉我先穿衬衫、毛衣和外套(即使它们是可选的,但没有依赖性)。

最佳答案

查看深度优先搜索算法

关于python - 如何解决模块依赖关系的 DAG?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53154360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com