【发布时间】:2015-03-12 09:01:36
【问题描述】:
我知道依赖图(比如在安装过程中找出哪个包依赖于哪个包)可以表示为有向无环图。
a
|--> b
| |--> d
| `--> e
| |
| |
`--> c <--'
例如,上图代表如下。
- a 取决于 b、c、d、e
- b 取决于 d、e、c
- c 不依赖任何东西
- d 不依赖任何东西
- e 取决于 c
这个图可以帮助我们回答某个包在线性时间内依赖什么,即 O(n),其中 n 是图中包和边的总数。示例: a 依赖于哪些包?结果是:b、c、d、e。
它可以帮助我们回答简单的问题,例如某个包在恒定时间内立即依赖什么。示例: a 立即依赖哪些包?结果是:b,c。
但它不能回答一个简单的问题,比如在恒定时间内立即依赖于某个包。示例:哪些包直接依赖于 c?结果是:a 和 e。要回答这个简单的问题似乎需要对图进行完整搜索,因此需要线性时间。如果每个子顶点保持到其父顶点的反向链接,同时仍保持子顶点和父顶点之间的区别,则可以改进这一点。
如果我们引入从每个子顶点到其父顶点的反向链接,它就变成了一个双向无环图,并且它似乎简化了许多图搜索算法。
我有以下问题。
- 此类依赖关系图有正式名称吗?
- 为什么我们在计算理论的研究中看不到双向无环图?
- 在依赖图的实际实现中是否使用了这种双向图?例子?
【问题讨论】:
标签: algorithm data-structures graph dependencies