根据相互依赖性在分层列表中对对象进行排序

时间:2014-10-10 08:52:57

标签: algorithm

我有一些相互依赖的对象。

  • A
  • B(取决于A)
  • C(取决于B)
  • D
  • E(取决于B和F)
  • F(取决于C)
  • H(取决于B)

我想创建这些对象的分层列表,其中对象放在列表中,该列表位于包含它的依赖项的列表之后。

上一个对象列表将如下所示:

  1. A,D,G(这些对象没有依赖关系)
  2. B(B取决于A)
  3. C,H(C和H取决于B)
  4. F(F取决于C)
  5. E(E取决于B和F)
  6. Wich算法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

如果你还没有任何帮助结构,那么你应该使用蛮力。

我会使用一个列表,它将在架构中垂直扩展,并为垂直列表的每个节点扩展一个。

因此,在您的示例中,我将在垂直列表中有5个节点,对于第一个节点,我将有一个包含3个节点的列表(第一个节点将托管A,第二个D和第三个G)。垂直列表的第二个节点将有一个包含一个节点的列表,该列表将保存B,依此类推。

所以算法会是这样的:

1.For every item
2.  if item.dependency in list
3.    append item in the correct node
4.  else // item not in list
5.    create node in list with the dependency of the item
6.    append item in the created node

所以,在上面的伪代码中,当我说列表时,我的意思是垂直的。

在第1步,我们会检查您拥有的所有物品。

在步骤2中,检查列表中是否存在您当前正在处理的项目(通过搜索整个列表并返回找到的位置或更智能的内容)。

在步骤3,您进入步骤2中找到的位置,并在位于节点的列表末尾插入项目的值(您不需要再次存储依赖项)。请注意,如果位置中的节点在其列表中没有条目,那么您还需要创建它的列表。

在第4步,我们是在列表中找不到我们的项目。

在第5步,我们在列表中创建一个新节点,该节点将具有项目依赖关系的值。

在步骤6,我们将项目插入在步骤5中创建的节点中。

希望这有帮助!