我有很多对象。某些对象可以生成链接列表,并且所有对象在条件上都具有链接延续。一个例子将解释更多。让我们说我有这两个对象:
[
{
"name": "ObjectA",
"produce": "ChainA",
"continuations": [
{ "ChainB": "ChainC" },
{ "ChainC": "ChainC" }
]
}
{
"name": "ObjectB",
"produce": null,
"continuations": [
{ "ChainA": "ChainB" }
]
}
]
我需要找到列表:
ChainA (ObjectA) => ChainB (ObjectB) => ChainC (ObjectA) => ChainC (ObjectA)
我无法找到一种更好的循环方式。你们有些人有想法吗?
由于
答案 0 :(得分:0)
这个问题是NP完全的,因为如果你有一个有效的算法来解决它,那么你可以解决https://en.wikipedia.org/wiki/Longest_path_problem。所以这很无望。
这是减少。给定有向图G
,将边标记为对象,并将顶点标记为链。每个“对象”(边缘)产生“链”,它是它所到达的顶点。每个“对象”(边)都有一个延续,从源“链”(顶点)到目标“链”(顶点)。
现在应用假设算法。最长的链接列表将是G
所需的最长路径的边缘。