Algorithm 根据对象之间的相互依赖性对层次列表中的对象进行排序

Algorithm 根据对象之间的相互依赖性对层次列表中的对象进行排序,algorithm,Algorithm,我有一些相互依赖的对象 A B(取决于A) C(取决于B) D E(取决于B和F) F(依赖于C) G H(取决于B) 我想创建这些对象的层次结构列表,其中对象被放置在包含其依赖项的列表之后的列表中 previou对象列表的放置方式如下: 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

我有一些相互依赖的对象

  • A
  • B(取决于A)
  • C(取决于B)
  • D
  • E(取决于B和F)
  • F(依赖于C)
  • G
  • H(取决于B)
我想创建这些对象的层次结构列表,其中对象被放置在包含其依赖项的列表之后的列表中

previou对象列表的放置方式如下:

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
  • A、 D、G(这些对象没有依赖关系)
  • B(B取决于A)
  • C、 H(C和H取决于B的数量)
  • F(F依赖于C)
  • E(E取决于B和F)

  • 哪个算法可以解决这个问题?

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

    我将使用一个列表,它将在模式中垂直扩展,并且垂直列表的每个节点都有一个列表

    因此,在您的示例中,我将在垂直列表中有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
    
    在上面的伪代码中,当我说list时,我指的是垂直的

    在步骤1中,我们检查您拥有的所有项目

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

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

    在步骤4中,如果列表中找不到我们的项目,则我们将执行此操作

    在步骤5中,我们在列表中创建一个新节点,该节点的值为项目的依赖项

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

    希望这有帮助