求欧拉回路的fleury算法的正确性证明

该证明参考王树禾《图论》(第二版)p127的证明,补全了缺失的细节
设fleury算法在无向欧拉图 G ( V , E ) G(V,E) G(V,E)上运行,当fleury算法终止时,设已选出的边按选择顺序依次为 e 1 , e 2 , − − − , e n e1,e2,---,en e1,e2,,en ,这些边按选择顺序通过的由顶点组成的行迹是 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,,vn,vn+1,注意所有顶点被赋予不同的下标,但其中可能存在重复顶点。根据算法执行过程,当选出 e n e_{n} en 并抵达顶点 v n + 1 v_{n+1} vn+1 后,算法将无边可选,此时与 v n + 1 v_{n+1} vn+1 关联的所有边均已被选择,所以他们都在边集 e 1 , e 2 , − − − , e n e1,e2,---,en e1,e2,,en 中,故 G G G的生成子图 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,e_{n}) G(e1,e2,,en) v n + 1 v_{n+1} vn+1 的度为0 。我们断言, v 1 = v n + 1 v1=v_{n+1} v1=vn+1

若不然,若 v n + 1 v_{n+1} vn+1 代表的顶点在行迹 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,,vn,vn+1 v n + 1 v_{n+1} vn+1 之前出现了k次,注意 v 1 ≠ v n + 1 v n ≠ v n + 1 , v 1 , v 2 , − − − , v n , v n + 1 v_{1} \ne v_{n+1} v_{n} \ne v_{n+1} ,v1,v2,---,v_{n},v_{n+1} v1=vn+1vn=vn+1,v1,v2,,vn,vn+1 中的边两两不同,且 v n + 1 v_{n+1} vn+1 在行迹中不可能和自身相邻,故算法在边 e n e_{n} en 之前已经选择 2 k 2k 2k条和 v n + 1 v_{n+1} vn+1 代表的顶点相关联的边.另外 e n e_{n} en 本身也是算法选择的和 v n + 1 v_{n+1} vn+1 关联的边,故算法终止时共选择了 2 k + 1 2k+1 2k+1条与 v n + 1 v_{n+1} vn+1 相关联的边,但 G G G为欧拉图,所有顶点的度为偶数,从而 v n + 1 v_{n+1} vn+1 未被选择的边必然大于等于1,这和算法在 v n + 1 v_{n+1} vn+1 处无边可选矛盾,故必有 v 1 = v n + 1 v1=v_{n+1} v1=vn+1 ,因此 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,,vn,vn+1 为闭行迹

下面设 V 1 V1 V1 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G(e1,e2,,en) 中度为0的顶点组成的集合, V 2 V2 V2 V − V 1 V-V1 VV1 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G(e1,e2,,en) 中所有度不为0的顶点组成的集合,由先前的结论 v 1 ∈ V 1 v1\in V1 v1V1 , V 1 V1 V1不空,现假设算法终止时仍有 G G G中的边未被选择,这样 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G(e1,e2,,en) 中有顶点的度大于0,从而 V 2 V2 V2同样不为空。

考察闭行迹 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,,vn,vn+1 注意到 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G(e1,e2,,en) V 1 , V 2 V1,V2 V1V2不连通,即 V 2 V2 V2中任意顶点均无法到达 V 1 V1 V1中任意顶点(这是显然的,因为 V 1 V1 V1中所有顶点度为0),而 G G G为欧拉图,至多只有1个非平凡连通分量,因此 G G G连通,故当算法开始执行时可以从 V 2 V2 V2中某个顶点出发到达 V 1 V1 V1中某个顶点,算法运行过程中会不断无重复地选择新边,已选择的新边会从图中去除,结合以上事实即可知算法执行过程中必然会选择 G G G中一条边 e m e_{m} em ,在选择 e m e_{m} em 前可以从 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G(e1,e2,,em1) V 2 V2 V2中的某个顶点出发到达 V 1 V1 V1中某个顶点,选择 e m e_{m} em 后在图 G − ( e 1 , e 2 , − − − , e m ) G-(e1,e2,---,e_{m}) G(e1,e2,,em) V 1 , V 2 V1,V2 V1,V2不连通.取 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G(e1,e2,,em1) 中从 V 2 V2 V2中某个节点到 V 1 V1 V1中某个节点的所有简单路径中最短的一条 L L L(含边数最少),则 L L L上除端点以外的所有中间节点不可能属于 V 2 V2 V2 V 1 V1 V1,否则我们可以取 L L L上不位于 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G(e1,e2,,em1) 中由 V 1 V1 V1 V 2 V2 V2生成的子图中的边 e e e( L L L上这样的边必然是存在的,否则 L L L无法连接 V 1 V1 V1 V 2 V2 V2中的顶点), e e e两端的顶点不可能同属 V 1 V1 V1,或 V 2 V2 V2,否则和 e e e的取法相矛盾,即必然一端为 V 1 V1 V1中顶点,一端为 V 2 V2 V2中的顶点,该两顶点不可能是 L L L两端的顶点,否则 e e e即为 L L L,这和 L L L上除端点以外的中间顶点中存在属于 V 2 , V 1 V2,V1 V2,V1的假设矛盾,从而又 e e e的长度1必然小于 L L L的长度,这和 L L L是从 V 2 V2 V2中某个节点到 V 1 V1 V1中某个节点的所有简单路径中最短的一条路径的假设矛盾。故 L L L上除端点以外的所有中间节点不可能属于 V 2 V2 V2 V 1 V1 V1。即 L L L就是一条边

于是我们断言, v m 和 v m + 1 v_{m} 和 v_{m+1} vmvm+1 不可能同在 V 1 或 V 2 V1或V2 V1V2中,否则从 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G(e1,e2,,em1) 中删除的边 e m e_{m} em G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G(e1,e2,,em1) 中由 V 1 V1 V1 V 2 V2 V2生成的子图中的边,这样 L L L不会被删除,因此 G − ( e 1 , e 2 , − − − , e m ) G-(e1,e2,---,e_{m}) G(e1,e2,,em) V 2 V2 V2仍存在顶点和 V 1 V1 V1中某顶点连通,连接它们的就是 L L L,这和图 G − ( e 1 , e 2 , − − − , e m ) G-(e1,e2,---,e_{m}) G(e1,e2,,em) V 1 , V 2 V1,V2 V1,V2不连通矛盾。因此要么 v m v_{m} vm 属于 V 2 V2 V2 v m + 1 v_{m+1} vm+1 属于 V 1 V1 V1,要么 v m v_{m} vm 属于 V 1 , v m + 1 V1, v_{m+1} V1,vm+1 属于 V 2 V2 V2,我们断言前者成立。这是因为若后者成立,注意到算法从 v 1 v1 v1 出发经过闭行迹 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,,vn,vn+1 回到 v 1 v1 v1 ,而 v 1 v1 v1 属于 V 1 V1 V1,这样选择并删去 e m e_{m} em 后,算法将从 v m + 1 v_{m+1} vm+1 出发经过上述闭行迹回到 v 1 v1 v1,注意 v m + 1 v_{m+1} vm+1 属于 V 2 V2 V2,而根据前述 G − ( e 1 , e 2 , − − − , e m ) G-(e1,e2,---,e_{m}) G(e1,e2,,em) V 1 V1 V1 V 2 V2 V2不连通,从而此后删除任意多边后在相应的图中 V 1 V1 V1 V 2 V2 V2仍然不连通,故算法不可能从 v m + 1 v_{m+1} vm+1 出发经闭行迹回到 v 1 v1 v1 ,这是一个矛盾,从而我们有 v m v_{m} vm 属于 V 2 V2 V2 v m + 1 v_{m+1} vm+1 属于 V 1 V1 V1

由于删除 e m e_{m} em 前在可以在 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G(e1,e2,,em1) 中从 V 2 V2 V2中某顶点出发抵达 V 1 V1 V1中某顶点,而删除后 G − ( e 1 , e 2 , − − − , e m ) G-(e1,e2,---,e_{m}) G(e1,e2,,em) V 1 , V 2 V1,V2 V1V2不连通,故 e m e_{m} em 为割边,即桥,根据算法执行过程,只有在无其他非桥边可选时才会选择桥,于是我们断言算法当前选择的边 e m e_{m} em 是算法此时能够选择的和 v m v_{m} vm 关联的唯一一条边。如若不然,则算法当前还可以选择与 v m v_{m} vm 关联的另一条边 e m ′ e_{m}' em ,由上文所述可知 e m ′ e_{m}' em 必为 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G(e1,e2,,em1) 的桥,注意由于选择并删除 e m e_{m} em V 1 , V 2 V1,V2 V1,V2不连通,所以 e m ′ e_{m}' em上与 v m v_{m} vm相对的另一顶点必然位于 V 2 V2 V2中(否则删除 e m e_{m} em 后在 G − ( e 1 , e 2 , − − − , e m ) G-(e1,e2,---,e_{m}) G(e1,e2,,em) 中仍然可以从 v m v_{m} vm 出发通过边 e m ′ e_{m}' em 抵达 V 1 V1 V1中顶点,矛盾),又 e m ′ e_{m}' em G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G(e1,e2,,em1) 的桥,故 e m ′ e_{m}' em 必为 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G(e1,e2,,em1) 中由 V 2 V2 V2生成的子图中的桥。而算法当前删除的边 e m e_{m} em 并非 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G(e1,e2,,em1) 中由 V 2 V2 V2生成的子图 G 2 G_{2} G2 中的边(因为 v m v_{m} vm 属于 V 2 V2 V2, v m + 1 v_{m+1} vm+1 属于 V 1 V1 V1),另外由于删除 e m e_{m} em V 1 V1 V1 V 2 V2 V2不连通,此后无论如何选择删除边, V 1 V 2 V1 V2 V1V2始终不连通,因此闭行迹 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,,vn,vn+1 v m + 1 v_{m+1} vm+1 v m + 1 v_{m+1} vm+1 后的所有顶点 均属于 V 1 V1 V1,从而边 e m + 1 , e m + 2 , − − − , e n e_{m+1},e_{m+2},---,e_{n} em+1,em+2,,en 的两端点均属于 V 1 V1 V1,因此从 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G(e1,e2,,em1) 开始依次选择并删除 e m , e m + 1 , − − − , e n e_{m},e_{m+1},---,e_{n} em,em+1,,en 的过程中每删除一条边得到的新图中由 V 2 V2 V2生成的子图始终为 G 2 G_{2} G2 ,故 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G(e1,e2,,en) V 2 V2 V2生成的子图 G n G_{n} Gn 仍然为 G 2 G_{2} G2 从而 e m ′ 为 G n 从而 e_{m}' 为 G_{n} 从而emGn 的桥,但 G n G_{n} Gn 中每顶点的度数均为偶数(这是因为对 V 2 V2 V2中每一个顶点 v v v ,如果算法运行过程中与之关联的每一条边均未删除,则由 G G G 是欧拉图可知 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G(e1,e2,,en) 中该顶点度数为偶数,否则由 v v v 属于 V 2 V2 V2, v 1 v1 v1 属于 V 1 V1 V1, v ≠ v 1 v\ne v1 v=v1 v v v 出现在闭行迹 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,,vn,vn+1 上, v v v 在该闭行迹上不可能和自身相邻,闭行迹上每一条边两两不同可知算法运行过程中 v v v 被删去了与之关联的偶数条边,故由 G G G 是欧拉图和 V 2 V2 V2定义知 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G(e1,e2,,en) v v v 的度数为正偶数 而 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G(e1,e2,,en) V 1 V1 V1中每一顶点的度数均为 0 0 0,故对 V 2 V2 V2中每一个顶点 v v v , G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G(e1,e2,,en) 中与之关联的每一条边 e e e v v v 相对的另一顶点必属于 V 2 V2 V2,故 e e e 属于 G n G_{n} Gn ,从而 G n G_{n} Gn 中任意顶点的度为偶数)

G n G_{n} Gn 为偶图,而偶图可以被分解为一系列环,所以 G n G_{n} Gn 中任意边均在环上故不可能是桥,从而 e m ′ e_{m}' em 不为 G n G_{n} Gn 的桥,矛盾,故选择并删除 e m e_{m} em 时边 e m e_{m} em 是算法此时能够选择的和 v m v_{m} vm 关联的唯一一条边, 所以 e m e_{m} em 被选择后,与 v m v_m vm 关联的所有边全部被选择并从 G G G中删除,此后 v m v_m vm 无边与之关联,而我们知道算法终止时 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G(e1,e2,,en) V 2 V2 V2中的 v m v_{m} vm 的度数不为零,这说明算法结束后 v m v_{m} vm 仍然有边与之关联,从而导出矛盾。这就证明了当fleury算法终止时, G G G中所有边均已被选择,它们位于 e 1 , e 2 , − − − , e n e1,e2,---,en e1,e2,,en 中,这些边两两不同,从而 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,,vn,vn+1 为欧拉回路 这和算法终止时 G G G中仍有边未被选择, v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,vn,vn+1 v1,v2,,vn,vn+1非欧拉回路矛盾

证毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值