【问题标题】:Periodic and Aperiodic directed graphs周期性和非周期性有向图
【发布时间】:2019-01-03 21:38:40
【问题描述】:

我对如何区分有向图是非周期性的还是周期性的感到有些困惑。维基百科对非周期图这样说:

'在图论的数学领域,如果没有整数 k > 1 来整除图的每个循环的长度,则称有向图是非周期性的。'

例如下图是非周期性的还是周期性的。我相信该图不是周期性的,但根据维基百科的定义,它是周期性的,因为整数 k = 2 除以图中的所有周期(AC 和 ACDB)

如果有人能提供一种方法来区分图形是非周期性的还是周期性的,那就太好了。也许提供一些周期性和非周期性图的例子来帮助解释。

谢谢。

【问题讨论】:

    标签: graph graph-theory directed-graph pagerank


    【解决方案1】:

    这是一个基于 Networkx 的简短 python 实现,用于查找图是否是周期性的:

    import networkx as nx
    from math import gcd
    from functools import reduce
    
    G = nx.DiGraph()
    G.add_edges_from([('A', 'C'), ('C', 'D'), ('D', 'B'), ('B', 'A'), ('C', 'A')])
    cycles = list(nx.algorithms.cycles.simple_cycles(G))
    cycles_sizes = [len(c) for c in cycles]
    cycles_gcd = reduce(gcd, cycles_sizes)
    is_periodic = cycles_gcd > 1
    print("is_periodic: {}".format(is_periodic))
    

    代码执行以下操作:

    • 根据您的示例构建图表(通过指定边)。
    • 列出所有周期(AC 和 ACDB)。
    • 列出所有周期大小 [2, 4]。
    • 求最大公分母 (GCD)。
    • 如果 GCD 为 1,则表示该图是非周期性的,否则根据定义它是周期性的。

    您在上面给出的图表不是非周期性的,因为它的周期为 2。(即每个节点都可以以 2 步的倍数返回自身)

    您可以使用不同的示例来获得更好的直觉,还可以通过添加以下内容来可视化您的图表:

    import matplotlib.pyplot as plt
    nx.draw_networkx(G, with_labels=True)
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 2016-02-03
      • 2011-12-12
      • 2015-02-19
      • 1970-01-01
      相关资源
      最近更新 更多