Java基础 - 图论的起源于发展

2024-03-02 15:30

本文主要是介绍Java基础 - 图论的起源于发展,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、图论的起源

图论是一个古老的但又十分活跃的数学学科,也是一门很有实用价值的学科,它在自然科学、社会科学等各领域均有很多应用。近年来它受计算机科学蓬勃发展的刺激,发展极其迅速。应用范围不断拓广,已渗透到诸如语言学、逻辑学、物理学、化学、电讯工程、计算机科学以及数学的其它分支中。

1736年是图论的历史元年。这一年,欧拉(L•Euler)研究了哥尼斯堡城(Königsberg)的七桥问题,发表了图论的首篇论文。欧拉也因此被称为图论之父。

古老而美丽的哥尼斯堡城濒临蓝色的波罗的海,是著名的哲学家康德(Immanuel Kant)的出生地,城中有一条普莱格尔(Pregel)河,河的两条支流在这里汇合,然后横穿全城,流入大海。河水把城市分成4块,于是,人们建造了7座各具特色的桥,把哥尼斯堡城连成一体,如图1.1(a)所示。

早在18世纪,这些形态各异的小桥吸引了众多的游客,游人在陶醉于美丽风光的同时,不知不觉间,脚下的桥触发了人们的灵感,一个有趣的问题在居民中传开。


图1.1(a) 和 图1.1(b)

谁能够从两岸A,B或两个小岛C,D中任一个地方出发一次走遍所有的7座桥,而且每座桥都只通过一次?这个问题似乎不难,谁都乐意用这个问题来测试一下自己的智力。可是,谁也没有找到一条这样的路线。这个问题极大的刺激了德意志人的好奇心,许多人热衷于解决这个问题,然而始终未能成功。“七桥问题” 难住了哥尼斯堡城的所有居民。哥尼斯堡城也因“七桥问题” 而出了名。这就是数学史上著名的七桥问题。

问题看来不复杂,但谁也解决不了,也说不出其所以然来。1736年,当时著名的数学家欧拉仔细研究了这个问题,他将上述四块陆地与七座桥间的关系用一个抽象图形来描述(见图1.1(b)),其中A、B、C、D分别用四个点来表示,而陆地之间有桥相连者则用连接两个点的连线来表示,这样,上述的哥尼斯堡七桥问题就变成了由点和边所组成的如下问题:

试求从图中的任一点出发,通过每条边一次,最后返回到该点,这样的路径是否存在?于是问题就变得简洁明了多了,同时也更一般、更深刻。这样一来,七桥问题就转变为图论中的一个一笔画问题。即能不能一笔不重复的画出图1.1(b)中的这个图形。

原先人们是要求找出一条不重复的路线,欧拉想,成千上万的人都失败了,这样的路线也许根本不存在。于是,欧拉接下来着手判断:这样不重复的路线究竟存不存在?由于这么改变了一下提问的角度,欧拉抓住了问题的实质。最后,欧拉认真考虑了一笔画图形的结构特征。

欧拉发现,凡是能用一笔画成的图形,都有这样一个特点:每当用笔画一条线进入中间的一个点时,还必须画一条线离开这个点。否则,整个图形就不可能用一笔画出。也就是说,单独考察图中的任何一点(起点和终点除外),这个点都应该与偶数条线相连;如果起点与终点重合,那么,连这个点也应该与偶数条线相连。

在七桥问题的几何图中,A、B、D三点分别与3条线相连,C点与5条线相连。连线都是奇数条。因此,欧拉断定:一笔画出这个图形是不可能的。也就是说,不重复地通过7座桥的路线是根本不存在的!天才的欧拉只用了一步就证明了这个难题,从这里我们也可以看到图论的威力有多么的强大!

欧拉对七桥问题的研究,是拓扑学研究的先声。

1750年,欧拉又发现了一个有趣的的现象。欧拉得到了后人以他的名字命名的“多面体欧拉公式”。正4面体有4个顶点、6条棱,它的面数加顶点数减去棱数等于2;正6面体有8个顶点、

12条棱,它的面数加顶点数减去棱数也等于2。接着,欧拉又考察了正12面体、正24面体,发现都有相同的结论。于是继续深入研究这个问题,终于发现了一个著名的定理:

这个公式证明了多面体只有正四面体、正六面体、正八面体、正十二面体、正二十面体五种。这个定理成为拓扑学的第一个定理,这个公式被认为开启了数学史上新的一页,促成了拓扑学的发展。

二、图论的发展

从19世纪中叶开始,图论进入第二个发展阶段。这一时期图论问题大量出现,诸如关于地图染色的四色问题、由“周游世界”游戏发展起来的哈密顿(W.Hamilton)问题等。

图的染色问题一直是图论研究的焦点问题。最早记载染色问题的是英国伦敦大学(University of London)的数学教授德•摩根(D.Morgan)。

1852年,一位刚从伦敦大学毕业的学生费南西斯•古色利(F.Guthrie)在研究英国地图时想到了一个奇怪的问题。这个问题被称为世界近代三大数学难题之一,这就是著名的“四色猜想”。问题的起源是这样的:

古色利望着挂在墙上的英国地图发呆,他边数着英国的行政区域,边查找它们的位置,同时还注意各区域的地图着色,看着看着他突然发现,该地图仅用四种不同的颜色便可以将地图中相邻的区域分开。古色利无法解释这一现象,于是他写信给仍在大学读书的弟弟,让他向该校有名的数学家德•摩根请教。摩根首先注意到:区分地图上的不同区域少于四种颜色不行。但遗憾的是摩根本人也未能解决这个问题。于是向自己的好友、著名数学家哈密顿爵士请教。哈密顿接到摩根的信后,对四色问题进行论证。但直到1865年哈密顿逝世,问题也没有能够解决。

1878年,英国数学家凯莱(Cayley)在伦敦数学年会上正式提出该问题——平面或球面上的地图仅需四种颜色可以将任何相邻的两区域分开——且征求解答,人称“四色猜想” 的问题便引起了世界数学界的重视。许多一流的数学家纷纷参加了四色猜想的大会战。1878—1880年,著名的律师兼数学家肯普(Kempe)和泰勒(Taylor)两人分别提交了证明四色猜想的论文,宣布证明了四色定理,大家都认为四色猜想从此也就解决了。但是数学家赫伍德(Hedwood)仍然花费毕生精力致力于四色问题。不过,赫伍德却成功地运用肯普的方法证明了五色定理,即一张地图能够用五种或者更少的颜色染色。不久,加拿大数学家托特(Tóth)又举出反例,否定了泰勒的证明。后来,越来越多的数学家虽然对此绞尽脑汁,但仍一无所获。于是,人们开始认识到,这个貌似简单容易的题目,其实是一个可以与费尔马猜想相媲美的难题。

进入20世纪,科学家们对四色猜想的证明基本上是按照肯普的想法在进行,并陆续有所进展。1913年,伯克霍夫(Birkhoff)在肯普的基础上引进了一些新技巧;1939年,美国数学家富兰克林(Franklin)证明了22个以下区域都可以用四色着色。随后又有人给出了更多区域的情形,直到1976年初,人们还是仅能对区域数是96的地图主色的四色猜想给出证明,但这些对区域数是自然数的情形来讲还远远不够。

1976年6月,美国伊利诺斯大学的黑肯(W.Haken)和阿佩尔(Appel),经过四年的艰苦工作,在两台不同的电子计算机的帮助 下,用了1200个小时,作了100亿次的判断,终于完成了四色猜想的证明。四色猜想的计算机证明轰动的世界,该证明不仅解决了一个历一百多年的难题,而且有可能成为q 数学史上亿系列新思维的起点。不r b过也有不少数学家并不满足于计算图的影响。作家莫言曾说,他“这种年纪的作家毫无疑问都受到了西方文学的影响,因为在80年代以前中国是封闭的,……改革开放以后大量的西方文学被翻译进来,我们有一个两三年的疯狂阅读时期,这种影响就自然而然地产生了,从而不知不觉地就把某个作家的创作方式转移到自己的作品中来了。”[3]朱振武作为莫言的同龄人,也是被西方文学滋润的一份子,加之又是研究美国文学的教授,因此他的创作也较多地带有西方文学影响的痕迹。在《崽崽》这部作品中,最明显的一点则非意识流莫属。

朱振武有意借鉴了意识流小说这一文体形式。小说通篇都是按照小兔子的心理活动的轨迹进行组织行文。作品伊始就是爸爸和妈妈的对话,但是却没有引号。而且不仅这里的对话没有引号,全文中的对话都没有使用引号。这不是作者忘记了,或是编辑不细心,而是作者有意舍弃了引号。一方面,因为文中的一切都是小兔子的意识,记述的是小兔子的所见所闻所思所想,所以为了强化作品是小兔子的心理活动这一特点,作者有意识地回避了服务于对话的引号,将小兔子置于一种思想自由驰骋的状态之中。另一方面,朱振武回避引号是和同样“摒弃”引号的女作家赵玫分享了相似的感受,引号的缺席能令作者的创作没有束缚,令作品的表述更加协调紧密,插叙对话和自然描述之间的转换更加灵活,同时也让读者的阅读更为流畅。由于小说的主体内容是小兔子对于往昔的生活片段的回忆,因此意识流的使用完美地解决了文章中的碎片化内容的拼接问题,使散置的回忆自然地串联起来。

在意识流作品中,视角是比较重要的一个因素。在《崽崽》中,作者选择了以一个亡灵的视角来讲述故事,但这个亡灵却不是人,而是一只聪慧伶俐的小白兔,同时还辅以儿童的口吻和心理态势。崽崽深情地回忆了自已曾经在这个家庭生活的点点滴滴。使用儿童视角和心理活动的一个最大的好处就是儿童的思想和认知具有极大的不确定性,所以可以更好地展现更多更深的矛盾和观点。不同的观点和事件可以同时在这一个孩子的心理进行对驳和展现,这一视角可以较好地服务于具有思辨性的内容。以亡灵视角和儿童视角进行叙事的作品不在少数,但以一个死去机取得的成果,他们还在寻找一种简洁明快的书面证明方法。

在哈密顿的周游世界问题中,他用一个正十二面体(具有十二个五边形的面和二十个顶点)的二十个顶点表示世界上的二十座大城市。提出的问题是要求游戏者找一条沿十二面体的棱通过每个顶点恰好一次的闭路。图中a,b,… s,t,a表示出了这样的一条闭路。由于运筹学、计算机科学和编码理论中的很多问题都可以转化为哈密顿问题,从而哈密顿问题引起广泛的关注和研究。

我们看到,正是上述那些似乎没有多大意义的游戏的抽象与论证的方法,开创了图论科学的研究。遗憾的是,由于当时社会生产落后,对图论知识的要求甚寡,这一学科的发展颇为迟缓,甚至处于停滞状态。两百年以后,即1936年,匈牙利著名图论学家柯尼系(König)发表《有限图与无限图理论》,这是图论的第一部专著,它总结了图论二百年的主要成果,是图论的重要里程碑。此后的五十多年,图论经历了一场爆炸性的发展,终于成长为数学科学中一门独立的学科。它的主要分支有图论、超图理论、极值图论、算法图论、网络图论和随机图论等。近二十年来,图论在科学界可以说是异军突起,活跃非常。


这篇关于Java基础 - 图论的起源于发展的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/766583

相关文章

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B