找到最长的链表?

时间:2017-02-02 18:01:07

标签: algorithm list

我有很多对象。某些对象可以生成链接列表,并且所有对象在条件上都具有链接延续。一个例子将解释更多。让我们说我有这两个对象:

[
  {
    "name": "ObjectA",
    "produce": "ChainA",
    "continuations": [
      { "ChainB": "ChainC" },
      { "ChainC": "ChainC" }
    ]
  }
  {
    "name": "ObjectB",
    "produce": null,
    "continuations": [
      { "ChainA": "ChainB" }
    ]
  }
]

我需要找到列表:

ChainA (ObjectA) => ChainB (ObjectB) => ChainC (ObjectA) => ChainC (ObjectA)

我无法找到一种更好的循环方式。你们有些人有想法吗?

由于

1 个答案:

答案 0 :(得分:0)

这个问题是NP完全的,因为如果你有一个有效的算法来解决它,那么你可以解决https://en.wikipedia.org/wiki/Longest_path_problem。所以这很无望。

这是减少。给定有向图G,将边标记为对象,并将顶点标记为链。每个“对象”(边缘)产生“链”,它是它所到达的顶点。每个“对象”(边)都有一个延续,从源“链”(顶点)到目标“链”(顶点)。

现在应用假设算法。最长的链接列表将是G所需的最长路径的边缘。