繁体   English   中英

计算有向图中欧拉路径的数量?

[英]Count the number of Euler PATHs in directed graph?

  • 我想在有向图中计算所有的Euler路径。
  • 电路对我不好,只有路径。

我正在做一个问题,我已经得出结论,知道快速的路径数量会有所帮助。 目前,我已经编写了一个用c ++编写的递归函数,可以找到所有这些递归函数,但是它的复杂性迅速增长,因此我的算法很快变慢。 我的算法是〜O(2 ^ n)。 如果可能的话,我想要一个更快的。

我已经研究了该主题,但是我只能在有向图和无向图中找到Euler电路的证明(为NP完整或多项式)和算法。 但是,我再次在有向图中寻找欧拉路径。

我的图只有两个节点,但是有很多边,应该只接触一次,就像在欧拉路径中一样。

因此,总而言之:

  1. 欧拉路径
  2. 有向图。
  3. 只有两个节点。
  4. 高边数。
  5. 边缘成本是相同的。

这是说明可能的设置的图像。

在此处输入图片说明

如果您想生成所有可能的路径,我认为不可能加快速度,因为您必须打印很多路径。 但是,如果您只需要计算它们,则可以更快地完成。

您有4种类型的边。 1)0-0; 2)1-1; 3)0-1; 4)1-0

首先,让我们计算一下我们有多少个类型3和4的边。

假设:

S1-类型1的边总数

S2-类型2的边总数

S3-类型3的边总数

S4-类型4的边总数

如果| S3-S4 | > 1路径不存在。

对于您的图,S3 = 1,S4 =2。假设我们有一条路径。 让我们修复类型3和4的边。

然后该路径将如下所示:

(1-1)*, 1-0, (0-0)*, 0-1, (1-1)*, 1-0, (0-0)*

(1-1)* -表示0或更多次重复边1-1。

现在该算法看起来很明显:

  1. 生成(1-0)边的置换
  2. 生成(0-1)边的置换
  3. 生成(0-0)个边的置换
  4. 生成(1-1)边的置换
  5. 在不超过S1和S2的部分中找到S3和S4的所有成分。
  6. 把答案写下来。

步骤1-4将花费O(S1!* S2!* S3!* S4!)时间(S1 + S2 + S3 + S4 = n)。

因此该算法将很慢。

我们可以使用乘积法则找到总数。

步骤1-4给我们S1! * S2! * S3! * S4! 组合。

可以计算O(N)时间中的第5步组合。 只需计算本文中的前缀总和即可: https : //en.wikipedia.org/wiki/Composition_(combinatorics)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM