Algorithm 如何以最少的步骤删除图形?
给定一个有向图,如何找到删除最小数量的节点以删除整个图所需的顺序?我假设如果一个节点被删除,所有连接到它的外部节点(任何程度)也会被删除 例如,在二叉搜索树中,删除树中所有节点的最快方法(假设)是删除根节点。然而,给定任何一个图,如何确定要删除哪些节点 我的想法(相当缓慢):Algorithm 如何以最少的步骤删除图形?,algorithm,graph,computer-science,graph-theory,theory,Algorithm,Graph,Computer Science,Graph Theory,Theory,给定一个有向图,如何找到删除最小数量的节点以删除整个图所需的顺序?我假设如果一个节点被删除,所有连接到它的外部节点(任何程度)也会被删除 例如,在二叉搜索树中,删除树中所有节点的最快方法(假设)是删除根节点。然而,给定任何一个图,如何确定要删除哪些节点 我的想法(相当缓慢): 生成所有可能的子图,并找到最外边的子图 删除那个子图 重复此操作,直到不再有剩余节点 为什么这是个好问题: 假设我们得到一个有向图,其中的节点表示世界上所有的问题,所有这些节点都与表示原因/影响(即,一些问题导致其他问题)
假设我们得到一个有向图,其中的节点表示世界上所有的问题,所有这些节点都与表示原因/影响(即,一些问题导致其他问题)的边相连。我们怎样才能找到最少的问题来解决,从而解决所有的问题 一个顶点可以有:
a->b->c->a
或在两个方向上具有连接边的顶点a->b->c+c->b->a
;或a->b->c
或一组分支路径a->b->c+b->d->e+f->b
中的b
删除这些顶点的顺序并不重要-删除其中任何一个顶点都不会删除最小删除集中的任何其他顶点,因此它们可以按任何顺序删除,并且必须全部删除才能删除整个图形。(最小删除集中的顶点可能共享其部分或全部子体,删除顺序将影响这些子体的删除顺序,但问题中未涉及此问题。)欢迎使用stackoverflow。从问题的复制/粘贴性质可以很明显地看出,这是一个作业问题。我们不介意帮助他们,但目前的格式是“为我做”,我们不是来这里做的。如果是的话,我们最终会拿到学位。用一些你尝试过的例子来更新你的问题,如果可以,我们会帮助你。我已经为这个问题添加了我的答案,但我不得不承认这是一个相当慢的算法。另外,请记住,这不是一个作业问题。我只是想知道是否有人能想出一个更好的方法来解决这个问题。好得多。现在您将收到一个不错的响应。因此,如果您删除一个节点,您将删除它指向的每个节点,以及这些节点指向的每个节点,依此类推。而且,它是一个图形而不是一棵树。考虑到这一点,你什么时候可以说,“删除那个节点比删除这个节点更好,因为如果我删除那个节点,我会同时删除两个节点,可能还有其他节点?”你需要计算出从图的每个节点可以到达多少个节点。为此,需要从每个节点开始执行图遍历(bfs/dfs)。找到具有最大可达节点数的起始节点后,删除该节点及其所有“可达”节点,然后重复该过程,直到没有剩余节点