【问题标题】:Generate a directed graph with n cycles生成具有 n 个循环的有向图
【发布时间】:2016-05-18 11:36:21
【问题描述】:

我想生成一个有向图,其中包含完全指定数量的循环以及它们各自的长度。例如,图表应包含:

2个尺寸3的周期 1个5号的周期
  • 这样的算法是否已经存在?如果不是,您将采取什么方法来解决这个问题?具体给出如下参数:

    1. 顶点数(例如,15)
    2. 组件的数量(例如,2 个)
    3. 必须在图中的循环(例如,{3-cycle, 3-cycle, 5-cycle})
  • 我只发现了几种可以检测现有图中循环的算法(例如 Tarjan)。您认为还可以使用循环检测算法生成具有特定循环数量的图形吗?

【问题讨论】:

  • 顶点数是固定的吗?
  • 这是一个有趣的问题。
  • 是的,该算法将顶点数作为输入参数。
  • 该图还可以包含其他循环,还是仅包含列表中指定的循环?
  • 这是棘手的部分,图表必须只包含指定的循环

标签: algorithm graph-theory graph-algorithm directed-graph cycle-detection


【解决方案1】:

在某些情况下可能会失败的贪心算法需要同行评审。

注意,如果我们有一个一定长度的循环k

1 -> 2 -> 3 -> ... -> k -> 1

我们可以通过引入一个其他节点来制作另一个相同长度的循环:

1 -> 2 -> 3 -> ... -> k -> 1
k' -> 1 -> 2 -> ... -> k - 1 -> k'

或者一个相同长度的循环 - 1:

1 -> 2 -> 3 -> ... -> k -> 1
k' -> 1 -> ... -> k - 2 -> k'

这可以通过始终引入一个新节点并在一个足够大的初始循环中将其连接到其他两个节点来永远持续下去。

所以,如果你能负担得起无限数量的节点,就这样做吧,从你需要的最大循环开始。

如果您必须使用固定数量的节点,我们应该尽量减少用于构建请求循环的节点数量。任何剩余的节点都可以轻松添加,因此它们不会形成任何循环。

再次从最大的循环开始:

1 -> 2 -> ... -> k -> 1

通过不再添加任何节点,我们可以从中获得以下内容:

  1. k 长度2 周期:2 -> 1, 3 -> 2, ... 1 -> k

  2. k - 2 长度3 周期:3 -> 1, 4 -> 2, ..., k -> k - 2

  3. 一般来说,k - p + 1 长度 p 个周期。

这些都不会产生额外的循环。所以整个算法将是:

  1. 构建您最大的请求周期。

    1.1。如果超过一个最大的,则通过为每个节点添加一个新节点来构建更多。请注意,这会影响所描述的通过不添加任何新节点从大循环中构建较小循环的过程,因为您会得到一个特定大小的新循环。会有一些重叠,所以你不能简单地将解决方案的数量加倍。据我所知,它只会将数字增加 1。

  2. 通过不添加任何新节点来构建更小的周期。

  3. 如果没有完成构建所需的循环:

    3.1。如果您还有节点,请使用它们。

    3.2。如果没有剩余节点,输出no solution

  4. 如果完成构建周期:

    4.1。如果您还有节点,请将它们作为链表添加​​到某处,这样它们就不会打扰您。

    4.2。如果没有剩余节点,您就完成了。

【讨论】:

    猜你喜欢
    • 2016-09-15
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    相关资源
    最近更新 更多