我使用什么算法来解析给定文件集的编译顺序?

时间:2016-10-17 01:12:12

标签: algorithm sorting

我试图在我的编译器类中实现一个小问题以便更好地理解。这个问题如下:假设我有一堆文件要编译如下:

a取决于什么 b取决于c
c取决于f
d依赖于 e取决于b
f取决于什么

因此,在这种情况下,要成功编译的文件的编译顺序是 a,f,c,b,d,e 。我想编写自己的算法来输出所需的依赖项,就像练习一样。我知道链接器会在C ++等中自动完成,但这只是个人练习。我怎样才能解决这个问题。任何对算法/读数的引用都非常受欢迎,因为我相当新。

1 个答案:

答案 0 :(得分:2)

基于@ajb的评论,快速谷歌搜索提出了Topological Sorting的维基百科文章。但是,在我看来,如果你要经历制作图表来代表问题的麻烦,那么这是一个非常简单的方法。

首先,对于您要编译的每个文件,创建一个节点。然后从每个节点到它的依赖关系具有边缘,并且如果文件不需要依赖,则具有到特殊节点的边缘。完成后,您所要做的就是反转边缘并从该特殊节点的breadth first search进行编译。

如果您需要担心循环依赖或任何爵士乐,那么它会变得更复杂,但它仍然可行。

由于您要求提供文献资料,因此有一本名为“数据结构和算法的C ++”一书,涵盖了各种数据结构和算法(令人惊讶!),包括第13章中的图算法。