形式陈述
Cole–Vishkin 颜色缩减把一个颜色很多的合法染色,变成颜色很少的合法染色。本页给出已定向环上的完整版本:先反复用二进制的首次差异位缩减到六色以内,再用三轮得到三色。目标是让每个顶点自己算出颜色,并在所有轮次中保持相邻顶点异色公理库图染色Graph coloring · Vertex coloring为图的顶点赋予颜色并要求每条边的两个端点颜色不同的可行标记。;无需任何顶点收集整张图。[1]
输入与执行模型
网络是一个静态、无故障、含 个顶点的简单环,每条物理边支持双向可靠通信。环的一致方向已作为输入给定:每个顶点 知道自己的前驱 和后继 ,所有边的方向沿同一个环路。这用到有向图公理库有向图Directed graph · Digraph以顶点有序对为弧、能够保留连接方向的有限简单图结构。的前驱与后继关系,但不把通信限制成单向。
初始颜色满足
其中调色板上界 是所有节点共同知道的整数。全球唯一的整数标识可以充当初始颜色,但算法只要求邻点不同;相隔较远的顶点允许同色。方向、标识和共同上界如何取得,不属于下面的算法。
执行遵循同步轮模型公理库同步系统Synchronous distributed system计算步和通信延迟有已知上界的系统模型。:一轮内先根据旧状态发送,再接收,最后统一更新。LOCAL 模型允许每条边每轮传任意有限长消息,有限本地计算不计通信轮数。CONGEST 模型另要求每条边每个方向每轮至多 位。若 ,其中 为固定常数,本页算法也满足这个消息长度限制;没有这一范围条件时,不能把任意长初始颜色直接塞入一轮 CONGEST 消息。[2,3]
一轮位缩减
只要共同上界 ,所有节点执行同一轮变换。令 ,把旧颜色写成补足 位的二进制串,最低位编号为 。顶点 向后继发送自己的旧颜色,收到前驱的旧颜色,然后计算
旧染色合法,因此差异位一定存在。新颜色与下一轮共同上界分别为
这里 指出一项足以区分当前节点与前驱的证据, 记录自己在该位置是哪一方。所有节点完成更新后才进入下一轮;共同上界的递推不依赖实际使用了多少种颜色。
从六色到三色
当 时停止位缩减。接下来固定执行三轮,依次处理颜色 。每轮所有顶点向两个邻居发送旧颜色;仅旧颜色等于 的顶点,把自己改成 中没有被两个旧邻色占用的最小颜色,其余顶点不变。即使某个待消颜色没有出现,这一轮仍按约定经过。三轮后,每个节点输出自己的颜色。
直觉
大颜色携带的绝大多数位,并不参与当前这条边的异色证明。例如颜色 与 只需用第 位即可区分。节点把整串压成“第几位、自己的位值”,标签范围便从 缩成约 。难点在于各节点选择的差异位未必相同:我们必须证明这些各自取得的证据仍能形成一个合法染色。
为什么同时更新仍不冲突
固定任意一条定向边 。若两端选择不同的位置,即 ,则它们的新颜色分别落在两个不相交的二元集合 中,必然不同。
若两端恰好选择同一位置 ,则 选择 的定义给出
此时两端记录的位值正是这两个不同的比特,所以
这已经覆盖全部情况。论证只看边的两个端点,不需要环的起点,也不例外处理首尾闭合边;因此每轮变换都保持合法染色。反复应用这一不变量,六色阶段的输入仍然合法。
收尾阶段利用的则是另一种局部结构:一个合法颜色类内没有相邻节点。因此同一轮所有颜色为 的活动顶点构成独立集,任一活动顶点的两个邻居都保持旧色。两个邻居至多禁用 中两种颜色,至少剩下一种。活动点的新颜色与两个不变的邻居不同,非活动点之间原有的合法性也未改变。消去 后不再产生 ,随后同样消去 和 ,最终只剩 。
为什么轮数是迭代对数
记 。对整数 ,有 ,而 ,所以位缩减会到达六色界,却不能靠继续迭代得到三色。若把 所在区间写成 ,则 ;从 起 ,剩余 可直接检查。
令 。当 时,取整只造成常数项:
第一步可由 和外层取整误差至多 得到;第二步在 成立,且右边随 增长更快。因此每两轮至少取得一次取对数的缩减。降到 后,因为整数上界严格下降,只需与输入规模无关的常数轮便到六色以内。
若 表示反复取以 为底的对数直到数值不超过 所需的次数,位缩减轮数 就满足 ,完整算法需 轮。当初始 时,这可写成 。这里证明的是本算法的上界,尚未给出任何最优性下界。
例子与边界
七点环的五轮完整执行
按给定方向把七点环写成 ,初始共同上界为 ,颜色依次为 。包括闭合边在内,每条边的端点都异色。第一轮的逐点计算如下;二进制从低位开始找差异,表中的前驱色均取本轮更新前的值。
| 顶点 |
旧颜色 |
前驱旧色 |
首次差异位 |
自己的位 |
新颜色 |
|
0 |
15 |
0 |
0 |
0 |
|
8 |
0 |
3 |
1 |
7 |
|
10 |
8 |
1 |
1 |
3 |
|
11 |
10 |
0 |
1 |
1 |
|
3 |
11 |
3 |
0 |
6 |
|
7 |
3 |
2 |
1 |
5 |
|
15 |
7 |
3 |
1 |
7 |
第一轮后 。第二轮也必须从这一整行旧色重新计算,得到
接下来三轮的轨迹为:
| 轮次 |
操作 |
按 排列的轮末颜色 |
| 第 3 轮 |
消去 ;本例无活动点 |
|
| 第 4 轮 |
的邻色为 ,故 |
|
| 第 5 轮 |
的邻色为 ,故 |
|
最终闭合边 的颜色为 ,其余边也均异色。这五轮给出了一份具体三染色;七点奇环本来不能二染,但算法并不需要先判断环的奇偶性。
同一轮必须读取同一份旧状态
如果在数组上从左到右立即覆盖颜色,让后面的点读取前面刚更新的值,执行的就不是上述同步算法。证明中的 与 必须来自同一轮快照,程序可用两个颜色数组或等价的轮次状态来实现。分布式实现中,本轮发送消息也必须在吸收本轮新信息之前由旧状态确定。
只有一致的方向而没有初始合法颜色也不够。若所有节点初始状态完全相同,运行相同确定性程序,各自又看到相同的前驱、后继角色,那么逐轮状态仍然相同,无法得到相邻异色。给定初始合法染色承担了打破这种对称的作用。另一方面,一般有向图可能有多个前驱或更多邻居;任选一个前驱只保护所比较的边,不能把环的证明直接推广到任意度数网络。
推论与应用
这个算法展示了分布式求解与集中式扫描的不同成本:每个节点只看邻居,整个环却同时缩减颜色。最终三色还把节点划成三个互不相邻的集合,可供后续算法分组安排局部操作。这样的安排只保证同组节点不相邻;更远距离的资源冲突仍需另行建模。
设位缩减共有 轮,第 轮前的上界为 ,其中 。每个节点每轮只向后继发送一个颜色,所以这一阶段恰有 次有向发送;三轮收尾每点每轮向两个邻居发送,共 次。采用固定长度颜色编码时,消息有效载荷总量至多为
最后一项来自收尾的 条、每条至多三位的颜色消息。这不计网络帧、地址和其他实现开销;共同上界及固定调度无需逐条附带发送。轮数、发送次数与位数回答不同问题,不能用 轮代替它们全部。
本地处理也并非免费获得常数 CPU 时间。最直接的实现扫描两个长度为 的颜色串,需要 次位检查;某些机器指令可以加速,但应另报机器字长与运算模型。LOCAL 的一轮只是在通信复杂度上不计这些有限本地工作。对没有已知通信时间界的异步系统,还需要实现合适的模拟或重新证明进展;不能直接把本页轮界解释成其实际运行时间。
参考资料
- [1] Juho Hirvonen and Jukka Suomela, Distributed Algorithms 2020, Chapter 1,2025-09-08 版本,§1.4.2–1.4.5、Exercises 1.5–1.6 与 §1.9:位标签颜色缩减、三色化与 Cole–Vishkin 归属。本页反转传色方向,并为闭环和按指定颜色消除的收尾调度给出独立论证;未核读 1986 年原论文。
- [2] Juho Hirvonen and Jukka Suomela, Distributed Algorithms 2020, Chapter 4,2025-09-08 版本,§4.1–4.3:LOCAL 模型、标识范围及本地计算与通信轮的区别。
- [3] Juho Hirvonen and Jukka Suomela, Distributed Algorithms 2020, Chapter 5,2025-09-28 版本,§5.1:每边每轮的消息长度限制。