可以看到的图形着色

Visual intuition with PythonThe post Graph Coloring You Can See 首先出现在Towards Data Science 上。

来源:走向数据科学

简介

是为图形元素分配颜色的计算任务,以便相邻元素永远不会共享相同的颜色。它在多个领域都有应用,包括体育赛事安排、制图、街道地图导航和时间表。它也具有重要的理论意义,并且是大学图论、算法和组合学课程中的标准科目。

图是一种由一组节点组成的数学结构,其中一些节点对通过边连接。给定任何图,

  • 节点着色是对节点的颜色分配,以便由边连接的所有节点对具有不同的颜色,
  • 边着色是对边的颜色分配,以便在节点处相交的所有边都具有不同的颜色,
  • 图的面着色是为其平面嵌入之一(如果存在这样的嵌入)的面分配颜色,以便具有公共边界的面具有不同的颜色。
  • 这些概念的示例如上图所示。在最后一个示例中观察到,面着色需要将节点排列在平面上,以便图形的边缘不会相交。因此,它们仅适用于平面图。相反,所有图都可以使用节点和边着色。目的是找到使用最少(最佳)颜色数量的着色,这通常是一个 NP 困难问题。

    本论坛中的文章(此处、此处和此处)之前曾考虑过图形着色,主要关注节点着色问题的建设性启发式方法。在本文中,我们考虑节点、边缘和面着色,并寻求通过详细、视觉上引人入胜的示例将主题生动化。为此,我们利用新创建的 GCol,这是一个构建在 NetworkX 之上的开源 Python 库。该库同时使用指数时间精确算法和多项式时间启发式算法。

    节点着色

  • 图的边缘着色可以通过对线图的节点进行着色来实现,