【发布时间】:2014-11-12 09:29:34
【问题描述】:
我正在考虑一种算法来解决以下问题:
由顶点和边组成的给定图。
有 N 个客户想要从一个顶点旅行到另一个顶点。 并且每个客户需求都需要一条有向边来连接两个顶点。
问题是如何找到满足所有客户要求的最小边数?
有一个简单的例子:
- 客户 1 想从顶点 a 移动到顶点 b。
- 客户 2 想从顶点 b 移动到顶点 c。
- 客户 3 想要从顶点 a 移动到顶点 c。
最简单的方法是为每个客户提供优势:
- 边 1:顶点 a -> 顶点 b
- 边 2:顶点 b -> 顶点 c
- 边 3:顶点 a -> 顶点 c
但实际上只需要 2 条边(即边 1 和边 2)即可满足三个客户要求。
如果客户数量很大,如何找到满足所有客户需求的最小边?
有解决这个问题的算法吗?
【问题讨论】:
-
是的,图中的每条边都是有向边!那是我的错,我应该强调给定的图是有向图。
-
这是传递约简的问题。 en.wikipedia.org/wiki/Transitive_reduction
-
我很确定您的意思是“每个客户要求都需要一个有向的路径来连接两个顶点。”如果您真的是指“有向边”,那么问题很简单,您的示例问题的答案需要所有 3 条边。
-
其实我只是想尽量减少边的数量并确保可达性不变。
-
传递约简可能不是答案。如果我们有 a->b、a->c、b->d、c->d 之类的客户需求,那么传递约简保留所有客户弧,而三个弧 a->b、b->c、c ->d 产生尽可能多的连接。如果我们只能构建某个客户要求的弧,那么我们不需要传递约简,而是需要最小等价子图(NP-hard to find if there are cycles)。
标签: algorithm graph graph-algorithm