zoukankan      html  css  js  c++  java
  • 图论1:哥尼斯堡七桥问题的证明

    图论1:哥尼斯堡七桥问题的证明

    结论的证明

    很久很久以前,有个大名鼎鼎的地方,叫哥你是宝哥尼斯堡。。

    哥尼斯堡有一条河,河里有两座小岛,两座小岛和周边的陆地总共有七座桥连接起来。这里风景优美,空气新鲜,以至于很多市民都喜欢来这边旅游观光。

    Figure 1. 风景优美,空气新鲜的哥尼斯堡七桥
     
     【NOTE】 红色方框表示桥,黑色方框表示陆地。

    慢慢的,乐于游玩的市民们就想到一个问题: 有没有一种办法,可以从任意一个地方出发,然后恰巧每个桥只经过一次,观赏完所有风景之后又回到起点呢?

    市民们使用了各种方式:

    Figure 2. 这样的
     
    Figure 3. 这样的
     
    Figure 4. 这样的

    ……

    但不管怎么样都做不到。。

    于是有人把这个问题写了封信,寄给了当时大名鼎鼎的数学家欧拉,

    致敬欧拉大师
     

    欧拉花了一年时间,最终证明了这个问题是无解的!

    那么怎么去证明这个问题无解嘞?

    欧拉大师先把地图模型简化成这样的二维模型:

     
    Figure 5. 风景优美,空气新鲜的哥尼斯堡七桥
    【NOTE】  红色方框表示桥,黑色方框表示陆地。这地方漂亮极了。

    于是简化成了四个点、七条边,如何证明一个图形,从任意一点出发,每条边仅经过一次,最终又回到起点呢?

    这个问题还是有点复杂,我们再对问题做一次简化,把七条边简化成一条,把四个点简化成一个点,那么得到如下模型:

    Figure 6. 简化版的陆地和桥
     

    这……这不就是一个圆嘛!!

    我们给图里的下一个定义:

    从一个点出发,经过若干条边和点之后,最终能够回到原点,整个经过的路径我们称之为

    所以,七桥问题其实等同于画圆问题!

    不管有几个顶点,也不管有几条边,从一点出发最终回到该点,本质上就是画圆。

    所以对于上述证明问题,本质上就是求解能否在图形上构造出一个圆。

    对“简化版的陆地和桥”做一层抽象,其实图中只具备两个元素:

    A岛:连接着X桥。

    X桥:首尾两端都连接着A岛。

    欧拉大师略加思索,得出一个结论,在最简单的情况下,从能够从A点画圆的充要条件为:A点必须具备一个出口,同时也必须具备一个入口。


    然后我们可以引入一个概念,将点A的入口/出口的数量统称为点A的 度 

    让我们再做一次扩展,为A岛再建造一座桥:

    Figure 7. 稍微复杂一点的陆地和桥

    路线不管是 A → X → A → Y → A 还是 A → Y → A → X → A,依然可以回到原点。

    A岛:连接着X桥。

    X桥:首尾两端都连接着A岛。

    Y桥:首尾两端都连接着A岛。

    此时,A岛具备了两个入口和两个出口(4个度)。

    之后,我们还可以再建造第三座桥、第四座桥,但不管建造几座桥,A点的出口数量必须等于入口的数量(即A点的 度 必须是偶数),否则就无法画圆: 

     
    Figure 8. 只有出口或只有入口的A岛
     

    然后我们再回过头来看我们的“七桥”。

     
    Figure 9. 风景优美、空气新鲜的七桥
     

    其中,A、C、D点的度为3,B点的度为5,都是奇数,这就意味着它没有能够画圆的起点/终点。

    所以欧拉大师得到结论:该问题无解!

    欧拉的回路

    但欧拉也不愧是数学界的大师,因为他并没有止步于证明七桥问题无解。

    他往前又做了更深一层的思考:

    七桥问题既然是无解的,那么什么情况下才能使问题有解呢?

    要从一个点出发,最终又能回到同一点的必要条件,是起点的度必须大于0且为偶数。

    而其它的点因为不是起点也不是终点,所以不能停留,一旦进入则必须走出去,所以它们的度也必须大于0且为偶数。

    最后,为了经过所有的顶点和边,还必须保证所有的顶点的边是联通的,否则无法在图中只构造出一个圆。

    简而言之就是两个条件: 1. 所有顶点的度都必须是偶数。 2. 所有的顶点和边都能够联通。

    我们随便画一个图验证一下:

    Figure 1. 五角星

    所有点的度都是偶数,所以任意一点出发都能回到原点。

    C → A → B → D → E → F → G → H → I → J → C → B → E → G → I → C

    还有很多其它路径,咱们就不一一解释啦。

    其实这也很符合一个画圆的规律:在已知的圆上任取一点,都可以沿着路径画出同样一个完整的圆。

    后来,人们把符合上述条件的路径,称为 欧拉回路

    欧拉的路径

    欧拉大师画完圆了之后,感觉还不得劲,这问题太简单了。

    能不能不回到起点,然后又能一条路走完全场呢?

    依然按照之前的思路:

    如果不想回到起点,那么起点必须具备的条件为:只能有奇数个度。

    终点因为至少需要一次进入了之后再也不会出去,也必须具备一个条件:只能有奇数个度。

    而其它的点因为不是起点也不是终点,所以不能停留,一旦进入则必须走出去,所以它们的度也必须大于0且为偶数。

    简而言之也是两个条件: 1. 只能有两个顶点的读为奇数,其他顶点的度必须大于0且为偶数。 2. 所有的顶点和边都能够联通。

    我们再随便画个图验证一下:

    Figure 2. 加了一笔的五角星

    其中只有I和B两个点的度为奇数,因此只能从这两个点出发:

    E → C → …… → C(参考没加一笔的五角星的路径)

    就这么简单。

    后来,人们把符合上述条件的路径,称之为欧拉路径。

    这,就是哥尼斯堡七桥的故事。

    欧拉大师也因此成为了最早的图论的研究者之一。

     ========================================================================================================

    本节涉及到的概念:

    文字表述:包含若干个顶点和若干条边的集合。

    数学表述:图G是一个有序二元组(V,E),其中V称为顶集(Vertices Set),E称为边集(Edges set),E与V不相交。它们亦可写成V(G)和E(G)。

    自环(Loop):若一条边的两个顶点为同一顶点,则此边称作自环。

    :一个顶点的度是指与该顶点相关联的边的条数,顶点v的度记作d(v)。自环边由于既是入度又是出度,因此度为2。

    入度:指顶点与其关联的各边之中,以其为终点的边数。

    出度:指顶点与其关联的各边之中,以其为起点的边数。

    欢迎读者们提出宝贵的意见或建议,作者会持续改进。

  • 相关阅读:
    zabbix api
    cassandra学习笔记
    loki grafana
    logstash配置 filebeat配置
    k8s prometheus api
    51cto 先超Prometheus+Grafana监控告警系统实战
    51cto 张岩峰 Prometheus企业级监控系统:零基础入门
    imooc 使用Prometheus实践基于Spring Boot监控告警体系 笔记
    python3 django migrate
    python3虚拟环境
  • 原文地址:https://www.cnblogs.com/prpl/p/10947348.html
Copyright © 2011-2022 走看看