如何通过访问最少数量的起始顶点来探索有向图 (DAG)?
How do I explore a directed graph (DAG) by visting minimum number of starting vertices?
给定一个 DAG(可能不是强连接 e.i 由几个连接的组件组成),目标是找到访问以充分探索图形所需的起始顶点的最少数量。
我想到的一种方法是生成给定顶点的所有排列,并按此顺序 运行 进行拓扑排序。回溯最少的那个就是答案。
是否有高效的算法来执行上述任务?
这个著名的问题叫minimum path cover,可惜wiki上只字未提,大家可以在google.
中搜索
作为methioned,最小路径覆盖问题是NP-hard in normal graph. But in DAG, it can be solved with Matching。
方法:
将每个顶点u
分成两个不同的顶点u1
和u2
。对于原始图中的每条边 (u->v)
,在新图中添加边 (u1->v2)
。然后做任何你喜欢的匹配算法。结果是n - maximum matching
,n
是原始图中的顶点总数。
给定一个 DAG(可能不是强连接 e.i 由几个连接的组件组成),目标是找到访问以充分探索图形所需的起始顶点的最少数量。
我想到的一种方法是生成给定顶点的所有排列,并按此顺序 运行 进行拓扑排序。回溯最少的那个就是答案。
是否有高效的算法来执行上述任务?
这个著名的问题叫minimum path cover,可惜wiki上只字未提,大家可以在google.
中搜索作为methioned,最小路径覆盖问题是NP-hard in normal graph. But in DAG, it can be solved with Matching。
方法:
将每个顶点u
分成两个不同的顶点u1
和u2
。对于原始图中的每条边 (u->v)
,在新图中添加边 (u1->v2)
。然后做任何你喜欢的匹配算法。结果是n - maximum matching
,n
是原始图中的顶点总数。