java 地图四色着色算法_趣味地图系列之6 四色定理之我见
四色定理(four color map theorem)是一个著名的数学定理[1],即对任意的(平面上的)地图染色,要求相邻的国家颜色不同,四种颜色即可完成着色。
南非数学家法兰西斯·古德里在1852年提出“四色问题”或“四色猜想”。证明宽松一点的“五色定理”(即“只用五种颜色就能为所有地图染色”)很容易,但是四色定理证明持续了很长时间。
四色定理不是地图学的定理,四色定理是第一个由计算机证明的数学定理。1976年,哈肯及其学生在伊利诺伊大学(即现在UIUC)的IBM360电脑上编程,经过电脑1200小时的验证,他们终于在6月证明四色定理。1976年6月22日,哈肯和阿佩尔在于多伦多大学召开的美国数学学会(A.M.S.)夏季会议公布他们的结果。不久,伊利诺伊大学数学系的邮戳上加上了“四种颜色就够了”(FOUR COLORS SUFFICE)的一句话,以庆祝四色猜想得到解决。1977年,哈肯和阿佩尔将结果写成名为《任何平面地图都能用四种颜色染色》(Every planar map is four colorable)的论文,分成上下两部分,发表在《伊利诺伊数学杂志》(Illinois Journal of Mathematics)上[2][3].
图1 四色定理的证明(自[4])
这是现在伊利诺伊大学大学厄巴纳香槟分校数学系主楼(离我们CyberGIS办公楼大约2分钟步行距离)。我和同事曾在午饭后参观过UIUC数学楼,学术氛围非常浓厚。
图2UIUC数学楼
四色定理被证明后,经历了十几年争议、修正和改进的过程。1986年,哈肯和阿佩尔应《数学情报》杂志的邀请,发表了1篇清晰易懂的证明总结文章,1989年的最终的定稿超过400页(貌似图论中的经典定理证明都比较长)。
图3 四色定理专著(自[4])
四色定理不是地图学定理,但它是地图学的经典问题。地图设计的专著中对四色定理描述很少。四色定理在地图中的应用其实没有想象的那么广,其实原因比较多,第一个是地图着色中可能会有飞地,即两个不连通的区域属于同一个国家(例如美国的阿拉斯加州),而地图着色时仍需要这两个区域涂上同样颜色。即使很多情况下,有些地图可以用四色着色,但是实际成图中依然用多种颜色(大于等于5种)[5]。我认为还有个原因是四种颜色来着色上千个多边形,四种颜色交错、不够美观。5年前我看到有学者基于强化学习来计算平面点集的凸包时,曾想过基于强化学习求解地图着色问题,这或许可行?
图4 地图设计原理
关于四色定理算法的综述、算法和应用的文献资源比较多,我推荐两个参考资源。作为一个GISer,Marco关于图着色研究的算法进展[6]和Joe介绍的多种着色算法[7](比如经典的DSATUR算法等)值得一看。
图 5 DSATUR算法原理
后记:大约十几年前,我曾在北京超图软件股份有限公司(SuperMap)的研究院(之前称为研发中心)完成四色算法的编码实现,针对全国2800多个县市级数据,当时的着色算法能在秒内时间完成5着色,4着色大概需要十几秒?SuperMap iDesktop新版本中的地图着色算法,想必已经被同事们提升了更高的计算效率。
参考:
1. 维基百科四色定理. https://zh.wikipedia.org/wiki/%E5%9B%9B%E8%89%B2%E5%AE%9A%E7%90%86
2. K. Appel, W. Haken. (1977). Every planar map is four colorable part I. discharging. Illinois Journal of Mathematics, 21, 429-490.
3. K. Appel, W. Haken, J. Koch. (1977). Every planar map is four colorable. Part II: Reducibility. Illinois Journal of Mathematics, 21(3), 491-567.
4. https://www.math.ku.dk/formidling/moed-math/moed-math-2014/oplaegholdere/WilsonFOURCS.pdf
5. Tyner, J. A. (2014). Principles of map design. Guilford Publications.2014.
6.http://www.imada.sdu.dk/~marco/gcp/
7.http://webdocs.cs.ualberta.ca/~joe/Coloring/
java 地图四色着色算法_趣味地图系列之6 四色定理之我见相关推荐
- java 地图四色着色算法_继陈景润之后周立敬攻破世界三大数学难题之一:地图四色难题...
地图四色问题又称四色猜想,与哥德巴赫猜想.费马猜想一起并称为为世界三大数学猜想.世界三大数学难题. 1965年5月,陈景润发表论文<大偶数表示一个素数及一个不超过2个素数的乘积之和>,最接 ...
- java 地图四色着色算法_四色定理的简单证明:从四色猜想到四域公理
摘要 "四色猜想"也称"四色定理",一直以来都没有一种简捷明快的证明方法,然而,本文认为"四色猜想"可以作为一个平面区域相邻关系的" ...
- Python实现地图四色原理的遗传算法(GA)着色实现
1 任务需求 首先,我们来明确一下本文所需实现的需求. 现有一个由多个小图斑组成的矢量图层,如下图所示:我们需要找到一种由4种颜色组成的配色方案,对该矢量图层各图斑进行着色,使得各相邻小图斑间 ...
- 地图四色着图的C语言实现
四色问题又称四色猜想.四色定理,是世界三大数学猜想之一.四色定理是一个著名的数学定理,通俗的说法是:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接的区域颜色相同.1976年借助电子计算机证明了 ...
- c语言电子地图程序,地图四色着图的C语言实现
四色问题又称四色猜想.四色定理,是世界三大数学猜想之一.四色定理是一个著名的数学定理,通俗的说法是:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接的区域颜色相同.1976年借助电子计算机证明了 ...
- 算法_趣味分数_Question5_列出真分数序列(java实现)
这篇文章讲述的是算法趣味分数部分的列出真分数序列问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的<c语言趣味编程1000例>,如有错误或者不当之处,还望各位大神批评指正. ...
- 算法_趣味分数_Question7_分数比大小(java实现)
这篇文章讲述的是算法趣味分数部分的分数比大小问题的java实现,参考的书籍为清华大学出版社出版,贾蓓等编著的<c语言趣味编程1000例>,如有错误或者不当之处,还望各位大神批评指正. 问题 ...
- 图的四色着色(C语言)
2017计算机学硕复试真题 用四种颜色给地图着色,要求相邻块颜色不同,图用邻接矩阵存储,求所有着色方案. 思路: (草稿) 递归,如用下图,做出邻接矩阵: map[N][N] = { 0,1,1, ...
- java 最少使用(lru)置换算法_「Redis源码分析」Redis中的LRU算法实现
如果对我的文章感兴趣.希望阅读完可以得到你的一个[三连],这将是对我最大的鼓励和支持. LRU是什么 LRU(least recently used)是一种缓存置换算法.即在缓存有限的情况下,如果有新 ...
最新文章
- python若干整数的最大值_实例讲解Python中整数的最大值输出
- 用 C 语言开发一门编程语言 — 条件分支
- python从1到n出现了多少个1-Python解决 从1到n整数中1出现的次数
- 深入理解模板模式及实际应用
- hbase 学习(十四)Facebook针对hbase的优化方案分析
- [蓝桥杯2016决赛]反幻方-next_permutation枚举
- pytorch利用rnn通过sin预测cos 利用lstm预测手写数字
- 计算与推断思维 十七、更新预测
- 企业者的福音之8266接入阿里智能,点亮一盏灯
- U-Boot>WebHome翻译
- Ubuntu下好用的小工具
- function signature是什么
- Codeforce 1800Difficulty Graphs 20 questions
- Hibernate学习(八):检索方式
- java 企业级安全_《企业级Java安全性—构建安全的J2EE应用》 尹亚 【正版电子纸书阅读_PDF下载】- 书问...
- aic准则和bic准则_用户故事准则
- 高德地图 删除marker(指定marker)
- vue-cli3打包时图片压缩处理
- C语言提取字符对应的ASCAl,ascall码对照表(ASCII码表)
- 用青龙跑渤海宣传员(收益很稳定)
热门文章
- [ROC-RK3568-PC] [Firefly-Android] 10min带你了解ADC的使用
- TIA博途V16专业版与博途V15.1专业版或其他版本能否安装在同一台PC中?
- 万字长文细说 Code Review 的正确姿势
- Correcting Chinese Spelling Errors with Phonetic Pre-training
- 大数据挖掘-伤寒论和金匮要略(COVID-19用药启示录)
- office之PPT插入页码没有反应
- 2017北京ICPC -G - Liaoning Ship’s Voyage (HihoCoder - 1633)几何
- 读研攻略--如何选择你的研究方向并展开学习
- 如何用计算机名安装打印机,如何添加打印机(如何在电脑上安装打印机?)
- Unity3D--加载界面、开始界面