冬令营解题报告-奶牛浴场_第1页
冬令营解题报告-奶牛浴场_第2页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《奶牛浴场》解题报告模型在平面的一个矩形中,有一些点组成集合P,要求一个面积最大的子矩形使得P中的点都在该子矩形之外(或者在子矩形的边框上算法0、L的线段上,Nxi(0<xi<L)求最长的一条子线段不包含P中的点(P中的点可以是线段端点Ax0 x5图Amaxofxi1xi0i=CBCBA 图( 值从小到大排序。2)枚举确定上边界Top和下边界Bottom:将Top与Bottom之间的点按先前排序的顺序依次到线段上,扫描该方法的时间复杂度为O(N3),显然无法在时间限制内出方法一之所以效率,其原因在于:枚举上下边界后,大致有2次的扫2次扫描是互相独立的,没有任何联系!如果能够弄清它们之间的充分利用以前的信息,在已知的基ACB例如图三所示:确定上下边界后,A和C被到线段上。扫描得“最宽的一带”为AC。ACB A 图在一维线段 了B点CBA在一维线段 了B点CBAB 图因此,所造成的变化是局部的。可以抓住这个关键性质,对原算法进行假设即将的是B点,那么要做以下工作在当前线段中找在B点之前且离BB点之后且离B先来解决:在当前线段中找在BB点最近的点。如图五所示,不妨将点按照x离散化,重新整理。x23x2347891234567图23 789xN个不同的标号。ACB后的标号为A1,C6ACB A 图在left与right之间(包含)的点共都total个。如图七所示:

图 total=0total=0total=1作就可以找到当前线段中在B点之前且离B点最近的点A了。类似的,B点也只需要logN次的操作。经过logN次的操作,得到了在B点之前的离B最近的点A以及在点之后离B最近的点C这样一来,寻找“最宽的一带”只要堆顶即可,时间复杂度 O(1)由此可以整理出解决本题的另法——方法二枚举确定上边界下边界Bottom从上往下移动,每移动一次,按已排好的顺序相应的点。用O(logN)的时间寻找和点,在用O(logN)的时间增删长度,最后用O(1)的时间得到当前“最宽的一带更新当前最优解。该方法的时间复杂度为O(N2logN),比方法一有所提方法二利用到了每次扫描之间的联系,将静态的统计转变为动态的变化,利用线段树和堆为媒介,进行动态的更新操作并不断得到当前最优解。BCABCA 图BACB下边界往上移动一次后,造成的影响是删除了BBACB A 图例如图八中,Next(A)=B,Father(B)=A。要删除BNext(Father(B))=Next(B)Father(Next(B))Father(B)。这样的操作时间复杂度为O(1)B点对长度所造成的影响是:ABAC不存在了,新增了AC。由于AC一定不低于AB和AC,只要判断AC是否比当前“最宽的一带”如此,稍做变化后就得到了一种更快的算法——方法三将点按y枚举确定上边界初始时,所有Top与x轴之间的点,构造链表Next与Father。随Bottomx轴开始往上移动。按照已排好的顺序,在链表上删该方法的时间复杂度仅为O(N2),完全可以在时限内出方法二与方法三大同小异,为什么有如此差别呢?原因在于:方法二中,下边界从上往下移动,需要点,并且得到的“最宽的一带”呈缩短趋势,所以要用堆来保存和。而方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论