贪心算法解决基站问题
2016-05-24 10:44
281 查看
18.4 历年例题分析(例题16)
2009-03-12 08:49 王勇/唐强 电子工业出版社 字号:T | T《软件设计师考试考点分析与真题详解:最新版》第18章数据流图设计,本章的试题内容涉及到流程图设计、软件界面设计、数据库设计和软件测试等多个方面,要求考生熟练地掌握软件分析和软件设计的常用方法和技术。本节为大家介绍历年例题分析(例题16)。
AD:51CTO 网+ 第十二期沙龙:大话数据之美_如何用数据驱动用户体验
18.4 历年例题分析(例题16)
例题16(2007年5月试题4)
阅读以下说明和图,填补流程图中的空缺,将解答填入答题纸的对应栏内。
【说明】
在一条农村公路的一边稀疏地分布着房子,其分布如图18-42 所示。某电信公司需要在某些位置放置蜂窝电话基站,由于基站的覆盖范围是6公里,因此必须使得每栋房子到某个基站的直线距离不超过6公里。为简化问题,假设所有房子在同一直线上,并且基站沿该直线放置。现采用贪心策略实现用尽可能少的基站覆盖所有的房子。
(点击查看大图)图18-42 |
1.d[i](1≤i≤N)表示第i个房子到公路A端的距离,N表示房子的总数,房子的编号按照房子到公路A端的距离从小到大进行编号。
2.s[k]表示第k(k≥1)个基站到公路A端的距离,算法结束后k的值为基站的总数。
(点击查看大图)图18-43 |
例题16分析
本题是一个程序流程图题,题目以贪心算法来解决一个实际问题。在对程序流程图进行分析之前,我们必须把程序要解决的问题及解决方案搞清楚。为了达到这个目的,不妨手动来尝试解决此问题。
假设实际的房子分布情况如图18-44所示。
(点击查看大图)图18-44 |
是不是建立在6米的位置,让其覆盖第1个房子?不是,因为第1个房子在5米的位置,若将基站建在6米的位置,0~5米之间的信号覆盖将被浪费,所以应将基站1建立在11(5+6)米处,这样正好能覆盖到第1个房子。再看第2个房子,该房子在15米处,由于基站1建立在11米处,能覆盖5~17米范围,所以能被基站1覆盖,无须新建基站。接下来看第3个房子,该房子在25米处,超出了基站1的覆盖范围,所以需要新建基站,该基站的建设位置应是31(25+6)米处。建设好的基站1与基站2的情况如图18-45所示。
(点击查看大图)图18-45 |
<= N。该条件判断的假分支用于新建一个基站。之前分析了在k的初值取决于k自增的位置,从此处我们就可以看出,k是在第(3)空完成的自增,而第(4)空位置是对新基站进行操作。所以(3)填k = k+1,(1)填k = 0。第(4)空的操作是确定新基础的位置,即从上一个基站无法覆盖的d[i]房子起的第6米设基站,所以该空填:d[i] + 6。最后是求算法的时间复杂度,虽然算法中包含两个循环,但我们可以注意到这两个循环并非嵌套,并且只对所有房子遍历了一次,所以算法复杂度是O(N)。
例题16参考答案
(1)k = 0
(2)j <= N ,或其等价形式
(3)k = k+1,或其等价形式
(4)d[i] + 6,或其等价形式
(5)O(N),O(n)
相关文章推荐
- Linux下设置定期(定时)执行脚本crontab命令
- 【BZOJ3143】[Hnoi2013]游走【高斯消元】【期望DP】【贪心】
- PostgreSQL 递归查询
- 调整数组顺序使奇数在前
- 工具类开篇
- c++中构造函数调用构造函数
- windows上安装Anaconda和python
- Android设计模式之单例模式
- 使用python计算夏普比率与最大回撤和最大回撤时间的程序
- iOS常用宏定义
- Android绘图机制与处理技巧
- setjmp和longjmp浅析
- 用 Mahout 和 Elasticsearch 实现推荐系统
- tip动画
- 环形缓冲区-boost circular buffer & 读写锁(shared_mutex)
- Eclipse调试:F5、F6、F7、F8 (总要开个头吧)
- 三层BP
- 计蒜客难题题库之一 泥塑课 python解答
- java回顾
- 《CSS入门经典》学习笔记