【问题标题】:Algorithm for grouping many singly linked lists对许多单链表进行分组的算法
【发布时间】:2023-03-04 22:40:01
【问题描述】:

我有一个数据集,其中包含以下形式的对象:

    A -> Some parent    (E.g. A -> null)
    B -> Some parent    (E.g. B -> D)
    C -> Some parent    (E.g. C -> A)
    D -> Some parent    (E.g. D -> null)
    E -> Some parent    (E.g. E -> A)
    F -> Some parent    (E.g. F -> G)
    G -> Some parent    (E.g. G -> D)
    H -> Some parent    (E.g. H -> C)
    I -> Some parent    (E.g. I -> G)
    J -> Some parent    (E.g. J -> null)

我想要所有分组的链表,如下所示:

    A <- C <- H
    ^-E

    J

    D <- B
    ^- G <- F
       ^- I

是否有一种通用算法来解决对单链表进行分组的问题,该算法的性能优于纯暴力破解?

这里的用例是,给定G,我怎样才能得到:

    D <- B
    ^- G <- F
       ^- I

以一种有效的方式。

【问题讨论】:

  • 你的输入数据结构是什么?
  • 每个数据结构都是一个对象,包含一个ID、一些数据和另一个对象的ID。
  • 好的,但是您的整体数据结构是什么?例如:它是一个数组吗? (我真正想知道的是:给定一个对象的ID,你能不能高效的找到那个对象对应的入口?)
  • 是的,我可以使用对象的 ID 并使用该 ID 访问地图中的数据和指针。

标签: algorithm grouping hierarchy singly-linked-list


【解决方案1】:
  1. 构造一个2元素结构的数组,其中第一个元素是目标,第二个是源:

    (null, A),
    (   D, B),
    (   A, C),
    (null, D),
    (   A, E),
    (   G, F),
    (   D, G),
    (   C, H),
    (   G, I),
    (null, J)
    
  2. 按第一个元素排序这个数组:

    (null, A),
    (null, D),
    (null, J),
    (   A, C),
    (   A, E),
    (   C, H),
    (   D, B),
    (   D, G),
    (   G, F),
    (   G, I)
    
  3. 然后递归地显示整个图,使用初始数据和刚刚创建的数组:

    a.
          ^- G
    
    b.
          ^- G <- F
             ^- I
    
    c.    D
          ^- G <- F
             ^- I
    
    d.    D <- B
          ^- G <- F
             ^- I
    

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2019-09-01
    • 2010-09-28
    • 2014-08-27
    • 1970-01-01
    • 2019-01-01
    • 2019-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多