如何在Python中实现makefile风格的算法

2 投票
4 回答
1156 浏览
提问于 2025-04-16 07:48

我正在用Python实现一个声学特征提取系统,我需要实现一个类似于makefile的算法,以确保特征提取系统中的所有模块按正确的顺序运行,并且不会重复任何特征提取的阶段。

这个特征提取系统的输入将是一个图,详细说明特征提取模块之间的链接,我想根据这个图来确定哪些函数在什么时候运行。

这样的系统的一个例子可能是:

            ,-> [B] -> [D] ----+
input --> [A]           ^      v
            `-> [C] ----+---> [E] --> output

而函数调用(假设每个模块X是一个形式为output = X(inputs)的函数)可能类似于:

a = A(input)
b = B(a)
c = C(a)
d = D(b,c)  # can't call D until both b and c are ready
output = E(d,c)   # can't call E until both c and d are ready

我已经将函数图加载为一个字典,每个字典条目的形式是(inputs, function),像这样:

blocks = {'A' : (('input'), A),
          'B' : (('A'), B),
          'C' : (('A'), C),
          'D' : (('B','C'), D),
          'output' : (('D','C'), E)}

我现在对makefile算法到底是干什么的有些迷茫,也不知道该如何实现它。我的谷歌搜索似乎也没有太大帮助。如果有人能给我指个方向,推荐一个关于makefile算法的好讨论,那可能是个不错的开始。

4 个回答

0

blocks 实际上是一个用来表示(无环)依赖关系图的邻接表。简单来说,如果你想要按照正确的顺序来处理这些块,就可以进行一种叫做拓扑排序的操作。

0

如果你想了解很多编程语言里的代码,包括Python,可以看看这些Rosetta Code的链接:拓扑排序,还有拓扑排序/提取顶层项目

撰写回答