Oop 能够映射系统的好处是什么;s依赖项作为DAG(有向无环图)?

Oop 能够映射系统的好处是什么;s依赖项作为DAG(有向无环图)?,oop,data-structures,directed-acyclic-graphs,binary-decision-diagram,Oop,Data Structures,Directed Acyclic Graphs,Binary Decision Diagram,如果我要将一组对象的依赖关系组织到一个DAG中,在什么情况下这比另一个数据结构(如BDD(二进制决策图))更理想?DAG有两个属性,非常适合分析依赖关系 首先,您可以轻松识别系统的“基本级别”组件。这些是DAG中没有边的节点。了解系统的相关层意味着您了解重构的影响。(链条上的所有东西。) 其次,如果你能生成一个DAG,你就知道系统没有奇怪的相互依赖关系。依赖关系图中的周期意味着您有两个组件相互依赖——一个导致奇怪bug和构建错误的配方。在微软,我们使用了一个名为的工具来解决这个问题。我对二元决策

如果我要将一组对象的依赖关系组织到一个DAG中,在什么情况下这比另一个数据结构(如BDD(二进制决策图))更理想?

DAG有两个属性,非常适合分析依赖关系

首先,您可以轻松识别系统的“基本级别”组件。这些是DAG中没有边的节点。了解系统的相关层意味着您了解重构的影响。(链条上的所有东西。)


其次,如果你能生成一个DAG,你就知道系统没有奇怪的相互依赖关系。依赖关系图中的周期意味着您有两个组件相互依赖——一个导致奇怪bug和构建错误的配方。在微软,我们使用了一个名为的工具来解决这个问题。

我对二元决策图不是很了解,但维基百科似乎指出它们基本上是定向的、非循环的图。我对达格有些了解。如果您可以将问题表示为DAG,那么您可以确保没有任何周期(如Chris Smith前面提到的)

二元决策树的另一个可能(也可能不)相关的属性是它们是二元的。但是,我不确定您希望如何将问题建模为二进制决策图。看起来BDD在每个节点上都有零个、一个或两个选择。我很难看到如何将依赖关系映射到这个。将依赖关系映射到图中对我来说更有意义

主要地,我认为这取决于你想要在你的表现上运行什么算法。如果您不确定是否有DAG,可以运行一个命令来告诉您是否有DAG。如果你想找到最短路径,你可以在上面运行。我认为这真的取决于你想做什么,我知道你可以用一个普通的图来做一些事情,主要包括证明它是一个DAG。一旦你有了DAG,我想建立的大部分东西都已经建立了。不过那只是我


-Brian J.Stinar-

我只想到依赖性检查。我喜欢你关于关注“基本级别”组件的建议。请详细说明“基本级别组件”及其在系统中的作用。没有入站连接的边缘表示系统中不依赖任何其他组件的组件。就可编译单元而言,这些单元可以并行编译。根据您的“对象”实际是什么,确定哪些“对象”没有依赖关系可能很有用。这是“图形分区”的一个专门应用程序。从最有用的意义上讲,您希望将图形划分为完全不相交(之间没有边)的分区。同样,就可编译对象而言,这将表示可以并行编译的整套“对象”。