地图填色问题的回溯解法(设计剪枝策略)

本文介绍了地图填色问题及其转换为图填色问题,重点探讨了回溯法与剪枝策略的设计,包括顶点搜索顺序、向前1步探测等策略,并分析了算法效率与地图规模、顶点平均度数的关系。
摘要由CSDN通过智能技术生成


前言

本篇记录的是算法课的一次实验报告,这次实验很有意思,笔者断断续续花了两周时间做实验、与大佬交流经验和写报告。最终实验报告99分 ,得到了老师的肯定,所以请放心阅读。本篇只讲思路,不含代码,也没有图(懒得画),想直接copy的可以离开啦


文章共分为4个部分,分别是回溯法介绍,地图填色问题介绍,剪枝策略的设计,算法效率分析。

一、回溯法介绍

做实验前首先要搞懂什么是回溯法,多看看多学学怎么设计剪枝策略之类的知识对做实验有很大帮助

回溯算法是一种遍历问题的整个解空间树,以找到所有可行解或一个最优解的算法。随着问题规模增大,朴素回溯法的效率越来越低。而剪枝策略可以剪掉找不到可行解的分支,减少搜索,提高搜索效率。因此设计好的剪枝策略时提高回溯算法效率的关键。

二、地图填色问题介绍

搞懂回溯法肯定也要搞懂什么是地图填色问题吧,关键不在于理解填色规则的字面意思,而在于要把问题转化为数学问题,便于算法的设计(这点挺重要的,少了报告就不够完整。很多科目的老师们都强调把问题转化为数学问题再编程实现,有点数模的味道)

地图填色问题是指使用不同的颜色为地图不同区域着色,使得具有共同边界的区域颜色不同。由于地图填色与地图区域内部无关,因此每个区域可以看成一个顶点,顶点间用边连接表示这两个区域相邻。于是地图填色问题就转化成了图(数据结构意义的图)填色问题。

三、剪枝策略的设计

设计剪枝策略前,得先整个朴素回溯法的代码,然后设计了新的剪枝策略就往这个代码里加(朴素回溯法比较简单,就不贴代码啦)

然后就是设计剪枝策略,每设计完一个都要利用小规模问题测试正确性,然后尝试三个地图le450_5a、le450_15b、le450_25a的填色,列出填色情况和算法运行效率。这三个图的问题分别为使用5种颜色填涂450个区域,使用15种颜色填涂450个区域,使用25种颜色填涂450个区域,这三个图都不是平面图,平面图只用4种颜色就可以填涂了,这3个图至少得用题目要求的颜色数才能填涂。 有的策略可能跑不出地图le450_15b,因为这个图很怪,非常怪,笔者不清楚它的具体区域分布,但听大佬说,这个图有一个较复杂的完全子图,一般的剪枝策略都要在里面回溯非常多次。(设计完策略然后直接用小规模问题测试正确性是必要的,不保证算法正确性那这个算法再快都是虚的。)

当然你也会问,随便整个小规模问题测的是正确的,但算法其实是有问题的,那是正常的。因为你只测试了若干个小规模问题该算法的正确性,要严格说明算法是正确的,得写个严格的数学证明。笔者菜,就不写证明糊弄人了。

下面列出了较多的策略,有成功的也有失败的,希望能对你有所启发

策略1:顶点搜索顺序

(1)策略提出原因
搜索顺序对算法效率的影响肯定是有的啦,这个策略是很经典的剪枝策略

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值