1、IOI2008 冬令营论文 顾研1感受随机的美浅谈随机化思想在几何问题中的应用广东省中山一中 顾研摘要近几年来,可以使用随机化来解决的几何题目越来越多。本文将着重介绍两种在信息学竞赛中常见的随机几何算法:随机增量法与模拟退火法,以及和传统方法的比较,说明了随机化思想的优势。关键字随机化 随机增量算法 模拟退火算法 调整目录摘要 1关键字 1目录 1正文 31 随机算法简介 31.1 数值概率算法 .31.2 拉斯维加斯(Las Vegas)算法 31.3 蒙特卡罗(Monte Carlo )算法 31.4 舍伍德(Sherwood)算法 .42 随机增量算法 52.1 增量算法 .52.2 随
2、机增量算法的一个例子 .52.2.1 张角法 62.2.2 改进算法 62.3 随机增量算法的应用 .82.3.1 蛮力算法 92.3.2 切割线段算法 102.3.3 随机增量算法 123 模拟退火(Simulated Annealing)算法 14IOI2008 冬令营论文 顾研23.1 模拟退火算法介绍 .143.1.1 模拟退火算法的原理 143.1.2 模拟退火算法的模型 143.2 例一:Run Away .143.3 例二:Empire strikes back .173.4 例三:激光坦克 .193.5 小结 .244 总结 24感谢 25参考文献 25附录 25附录 1 蒙特
3、卡罗抽样的步骤 .25附录 2 2.2.2 定理的证明 26附录 3 论文原题 .28附录 3 参考程序 .31联系方式 31IOI2008 冬令营论文 顾研3正文1 随机算法简介随机算法是这样的一类算法:它在接受输入的同时,在算法中引入随机因素,即通过随机数选择算法的下一步。也就是说,一个随机算法在不同的运行中对于相同的输入可能有不同的结果,或执行时间有可能不同。随机算法的特点:简单、快速、灵活和易于并行化,这些特点都会在本文中得到体现。随机算法可以理解为在时间、空间和精度上的一种的平衡。常见的随机算法有四种:数值概率算法,蒙特卡罗(Monte Carlo)算法,拉斯维加斯(Las Vega
4、s)算法和舍伍德(Sherwood)算法。1.1 数值概率算法数值概率算法常用于数值问题的求解。这类算法所得到的往往是近似解。而且近似解的精度随计算时间的增加不断提高。在许多情况下,要计算出问题的精确解是不可能或没有必要的,因此用数值概率算法可得到满意的解。举个例子:计算 的近似值时,我们可以在单位圆的外接正方形内随机撒n个点,设有k个点落在单位圆内,可以得到 。nk4数值概率算法不是本文的重点,这里仅作简单介绍。有兴趣的同学可自行研究。1.2 拉斯维加斯(Las Vegas)算法拉斯维加斯算法不会得到不正确的解,也就是说,一旦用拉斯维加斯算法找到一个解,那么这个解肯定是正确的。但是有时候用拉
5、斯维加斯算法可能找不到解。算法所用的时间越多,得到解的概率就越高。1.3 蒙特卡罗(Monte Carlo)算法又是一个以赌城命名的算法。通常所说的蒙特卡罗算法分为两类。1蒙特卡罗判定:蒙特卡罗算法总是能给出问题的解,但是偶尔也可能会产生非正IOI2008 冬令营论文 顾研4确的解。求得正确解的概率依赖于算法所用的时间。蒙特卡罗判定的错误必须是“单边”的,即实际答案是YES(NO) ,算法给出的答案可能是NO(YES) ,但是实际答案是NO(YES) ,则算法给出的答案一定是NO(YES) 。因此蒙特卡罗算法得到正确解的概率随着计算次数的增加而提高,即在时间和精度上的一种平衡。最常见的蒙特卡罗
6、判定是众所周知的Miller-Rabin素数测试字符串匹配的Rabin-Karp算法。2蒙特卡罗抽样:它的基本思想是,对于所求的问题,通过试验的方法,通过大样本来模拟,得到这个随机变量的期望值,并用它作为问题的解。它是以一个概率模型为基础,按照这个模型所描绘的过程,通过模拟实验的结果,作为问题的近似解的过程。蒙特卡罗抽样的主要步骤可参考附录1。本文第三章的模拟退火算法就使用了蒙特卡罗抽样的思想。1.4 舍伍德(Sherwood)算法舍伍德算法总能求得问题的一个解,且所求得的解总是正确的。当一个确定性算法在最坏情况下的计算复杂性与其在平均情况下的计算复杂性有较大差别时,可以在这个确定算法中引入随
7、机性将它改造成一个舍伍德算法,消除或减少问题的好坏实例之间的这种差别。舍伍德算法精髓不是避免算法的最坏情况的发生,而是设法消除这种最坏行为与特定实例之间的关联性。舍伍德算法最广泛的一个应用就是快速排序的随机化实现。本文第二章的随机增量算法就是舍伍德算法的一种应用。除了随机算法,国家集训队2006年论文:唐文斌浅谈“调整”思想在信息学竞赛中的应用中很多带有随机化的调整思想也可以用在几何问题中。比如Ural1578的Mammoth Hunt:给出平面上的n个点,找一条n-1段的折线将点连接起来,并且相邻两段折线的夹角是锐角。我们可以先任意生成一条折线,并且按一定规则进行调整,直到满足要求。IOI2
8、008 冬令营论文 顾研52 随机增量算法2.1 增量算法增量法(Incremental Algorithm)的思想与第一数学归纳法类似,它的本质是将一个问题化为规模刚好小一层的子问题。解决子问题后加入当前的对象。写成递归式是: ngTn1增量法形式简洁,可以应用于许多几何题目中。2.2 随机增量算法的一个例子增量法的优势在于它是线性递增的,代码实现通常比较简单,但是时间复杂度相对比较高 1,尤其在 ACM/ICPC 竞赛中,一个极限数据很容易成为算法的瓶颈,导致 TLE。因此,增量算法往往结合舍伍德算法的思想(随机) ,成为“随机增量算法” ,在一大类问题中大大改进了平均情况下的时间复杂度。
9、在增量算法中加入舍伍德算法(随机化) ,我们要做两件事:(1) 给出一个高效的随机洗牌算法。这个问题不复杂,以下代码就可以以线性的时间复杂度得到一个 1n 的随机排列。 (记录在数组 O 中。 )Algorithm Random_shufflefor i 2 to n交换 Oi,Orandom(i)(其中 random(n)返回一个 1n 的随机数。 )(2) 计算随机化后 种等概率的顺序的时间复杂度的数学期望的平均值。这个问题!将在引例中讨论。引例:最小外接圆(经典问题) 2题目描述:已知平面上 n 个点的坐标,求能够覆盖所有的点的最小圆。1 构造极限数据很容易。2 可在 zju1450 提
10、交。IOI2008 冬令营论文 顾研6分析:本节主要讨论随机增量算法,仅在张角法前提下分析一些随机增量算法的性质。2.2.1 张角法首先,易知至少有两个点在圆上(除非总共只有一个点) 。我们首先枚举这两个点(设为 A, B) 。初中的平面几何知识告诉我们对于同一段弧,圆周角小于圆内角(如 ) ,设 上方最小的张角为 ,下方最小的张角为 ,则当 时, 或 的外接圆可以覆ABCD盖所有的点。特别地,当 时 ABCD 四点共圆。可以看到,该算法的时间复杂度为 ,并且是一个确定性算法。3nO2.2.2 改进算法我们用 表示题目中的点。考虑使用增量算法,令 ,npP,1 iipP,1则代表相对于 的最小
11、外接圆。iDi定理:设 ,有:2(i) 若 ,则 ;(这个非常显然。 )1iiDp1ii(ii) 若 ,则 必然落在 的边界上。ii ipiD(ii)部分“看起来”就是正确的。但是证明部分却不是那么容易。当然这个证明不是本节的重点,有兴趣的同学可以参看附录 2。因此我们很容易设计出基于定理的算法,每次插入 时判断其是否属于 ,不属于iPiD则枚举 和 ,并用张角进行判断。ip)(ij图 1IOI2008 冬令营论文 顾研7Algorithm MiniDiscRandom_shufflefor i 3 to nif not (poi in D)* for j 1 to i-1* 以 oi,oj
12、为圆周上的点进行求解return D如果不使用随机化,复杂度依然是 的(图 2) 。如果我3nO们使用上文所描述的洗牌算法将 中元素的顺序打乱,复杂度如P何呢?取随机变量 ,若 ,则 ,否则 。算iX1iiDpiX0i法在*处一共需要 的时间。因此,整个最小外接圆的算法复2O杂度就是 iniXO12为了界定上述和式的期望值,我们需要利用期望的线性率(linearity of expectation):一组随机变量总和的期望值,等于这些随机变量各自期望值的总和,即便其中的随机变量不是相互独立的,也依然满足这个性质。因此,总的运行时间的期望值为 ininii XEOXE1212而 是多少呢?它等于
13、 的概率。但是这个问题比较棘手。iXEiiDp正难则反,我们从反方向看待这个问题。对于 , 在它的边界上的概率是多少呢?iip是由 中的 3 个点构成的,恰好是 的概率则为 ,即 。因此该算法的时iDiPii3iXE3间复杂度就为 212nOini最后再次声明一点,这里所指出的“期望” ,是相对于洗牌算法所给出的随机的顺序而言的,并不是对各种输入数据的平均。确切地讲,这个期望的时间复杂度和输入顺序完全没有关系。1iiDp图 2IOI2008 冬令营论文 顾研8至此,我们通过随机增量算法将原问题 的时间复杂度成功地优化至 。3nO2nO补充两点。一、此算法并不是该问题的最优算法,如果将算法的*处
14、也作定理所指出的性质的优化,时间复杂度则可以进一步下降到 。这不是本节的重点,因此不再展开了,有兴趣的读者可以自行思考。二、本题也可以使用本文第三节的模拟退火算法解决,并且效果很好。2.3 随机增量算法的应用昂贵的“饮品” 3题目描述:你淘气的小妹妹喜欢将厨房里的水、咖啡、酒和糖掺在一起,并且让你帮他试尝!你当然不愿意做,因此你决定帮她计算这种“饮品”的价格。你妹妹非常喜欢她的饮品,因此你得帮她计算出最大可能的价格。水、咖啡、酒和糖的价格分别为 c1, c2, c3, c4,并且 0c1c2c3。如果你分别使用 a1, a2, a3, a4 数量的原料,饮品的价格就是 a1c1+a2c2+a3
15、c3+a4c4。你妹妹告诉了你她先前配制的 n种饮品的价格 p,每种饮品的 a1、a 2、a 3,并且告诉你所有饮品 a4c4 的价格在区间L, R 中。你的任务是推算出当前某种使用 a1, a2, a3 的饮品的最大可能的价格。数据规模:n100,2000 组数据,2s 时限。分析:为了方便起见,我们用 x, y, z 代替 c1, c2, c3。题目实际上与 c4 没有关系,对于第 i 种饮品,我们可以列出方程 LpzayxRp321同时题目要求 0c1c2c3,我们也可以表示成 0yxz最后题目要求求出 的最大值。全部约束整理一下就是:zayx3213 2007ACM/ICPC Regi
16、onal Contest, Problem E, Expensive Drink, Beijing, AsiaIOI2008 冬令营论文 顾研9maximize czbyaxs.t. 111rl222 333 nnnzcybxal可以看出,这是一个有 2n+6 个线性约束的三维线性规划问题 4。在赛场上遇到这样的问题,我们非得敲一个单纯形法、甚至内点法吗?答案是否定的。2.3.1 蛮力算法让我们回到起点,一起看看最基本的一些问题。首先,问题的解会在哪里呢?显然可以分以下几种情况: 无解。 解在三个平面的交点上。 (见图 3-a。 ) 解在两个平面的公共棱上。这时我们不妨用棱与某个平面的交点来表
17、示它。 (见图3-b。 ) 解就是某个平面。我们可以任取它与某个平面的交点,则问题同样转化成。 (见图 3-c。 ) 解无穷大。我们可以认为的加上一个非常大的框,使问题变到情况。在输出答案的时候判断解是否在框上。a) b) c)图 3也就是说只要问题有解(设解集为 ans) ,则必然与三个平面交点的集合(设为 P)的交非空,即 。因此我们可以设计出一个最基础的算法:枚举三个平面求出交Pans4 关于线性规划问题及其解法,可参看 07 年集训队论文:李宇骞浅谈信息学竞赛中的线性规划简洁高效的单纯形法实现与应用 。IOI2008 冬令营论文 顾研10点,并对其余约束条件逐一判断。 (如果没有交点或
18、交点退化则可忽略。 )Algorithm drink_simplefor i 1 to totfor j i+1 to totfor k j+1 to totif 第 i,j,k 个平面存在唯一交点 intthen flag truefor l 1 to tot doif int 不满足第 l 个约束then flag false; breakif flag then 试图更新答案很显然,这个算法的时间复杂度为 ,需要优化。4nO2.3.2 切割线段算法上述算法之所以没有做到高效,是因为没有用到问题的特殊之处。众所周知,线性规划问题的可行区域(核)是凸的。在本题里,核是一个凸多面体。这个性质怎
19、么利用呢?如果我们不枚举三个平面而是枚举两个,这时我们得到了一条直线。而当我们用剩余的每对 5约束和直线求交,得到的一定是一条线段(不相交的不计) 。我们将所有的约束与直线求交,最终的结果非空,该线段(可能退化成点)即可满足所有不等式。怎么更新答案呢?我们有:定理 1 只有线段的两个端点有可能成为最优解。证明 设线段的两个端点分别在 p0 和 p1,我们用 表示线段上的点,其10P中 、 、 。因为 是空间中的一条直线,求导后,0pP10Px、y、z 对于 的变化量都是常数。设 为 的目标函数的值,则 也为常数。CC不妨设 。kC若 k=0,则线段上每个点的解相同。5 形如 的两个约束。rcz
20、byaxl图 4IOI2008 冬令营论文 顾研11若 k0,则 是线段上的最优解。1C若 kepsilonfor 每个候选解for i 1 to L随机一个模长为 delta,方向随机的向量加到点上作为新解试图用最优的合法新解替代原解Delta *= 0.8取目标函数值最大(距最近的陷阱距离最大)的解作为答案由于我们必须保证能覆盖矩形上的每个位置,因此在中确定 p 后(我们按网格状放置) ,中的 delta 可取 。设算法的迭代次数为 t,则算法的复杂度为nmax形。tnLpO使用本算法,p 取 10,L 取 30。我们发现可以轻松地通过全部测试数据。那么这个算法的正确性如何呢?感性认识:最
21、优解之所以能成为最优解,因为它附近(如点 A,B)的陷阱非常稀少且距离很远,因此有点在它周围(所在的 Delaunay 三角剖分区域内)的概率是很大的。而且此时的距离比较大,我们对方向进行多次尝试,因此调整出去的概率也很小。理性认识:前面说明了候选解的存在性,我们同时还必须保证调整过程候选的解都要向更优的位IOI2008 冬令营论文 顾研17置进发。当然,一开始的大范围调整主要是向比较优的解逼近,为了覆盖更多的点。我们着重分析一下调整范围较小( )时候的调整情r2况。如图 10 所示,假设点到中垂线(Voronoi 边)的距离为 d,到下方陷阱距离为 r,与垂线夹角 ,目前调整长度为 ,一次随
22、机调整成功的概率为 P,则。 (有可能向左调整) 。2Pr2acosr2(当 时 )0d rP2acos21若我们的 L 取 30,则经过 L 次随机后随机调整成功的概率为 Pt。我们的 每次乘以 0.8,因此 50%的调整成功率就足够了。令 ,求得 ,即 。这里若 ,则%50tP7.2P473.0cosr 1473.0调整可以满足。当 时, 取到最大值 ,因为此时两者垂直,因此 对于答案的影响很小。085. 另外我们还必须清楚:这里我们把 、d 都当成 0 计算,而事实上却不会是 0,同时这两者对于调整的概率的影响还是很大的。但是如果题目的精度要求非常高,怎么办呢?算法是死的,人是活的,既然
23、很难随机到向量和 Voronoi 边平行,我们可以直接枚举平行于 Voronoi 边的向量,虽然在时间上付出一点代价,但是在调整成功的概率和解的精度将大大提高。当然对于普通的题目(本节三道例题) ,普通的随机调整就可以了。当然你可以怀疑本题的数据比较弱,精度要求比较低,但是本算法在下一题中的表现,可以打消你的顾虑。3.3 例二:Empire strikes back 8题目描述:图 10IOI2008 冬令营论文 顾研18Saddam 的国度是半径为 R 的圆,圆心在(0,0)。其中有 N 个化学武器工厂,坐标分别为(X i, Yi) ,George II 将在每个工厂中投掷炸弹,炸弹将炸平以
24、工厂为圆心一定半径内的一切。但由于不清楚 Saddam 躲藏在哪里,George II 决定使炸弹的杀伤范围将整个国土都覆盖,问题是炸弹的最小杀伤半径为多少。数据范围:1n300,1R1000。精度要求:保留 5 位小数。分析:这道题目是 Ural 的经典难题之一,曾出现在 2007 年国家集训队论文:高逸涵 与圆有关的离散化方法中,文中给出了一个复杂度为 的优秀算法,但是本RnOlog2题的时间限制比较苛刻,有超时的可能。笔者目前知道方戈同学在本算法上进行了改进,使复杂度减少一维,并通过测试。有兴趣的同学可以和他进行交流。仔细分析,可知本题只是将 3.2 例一中的边框从矩形变成了圆,其他并无
25、太大区别。因此我们还是可以使用 Voronoi 图解。因为这题的数据范围稍小,因此 的算法如果3nO实现得很好,也是可以 Accepted 的。既然和例一类似,我们是否可以直接套用同样的随机调整呢?两题唯一的区别就在于边界的情况。但是恰恰就在这里,单纯使用模拟退火算法有一点问题。如图 11 所示,候选解一旦比较接近边界,无论调整的长度如何,调整成功的概率都非常低。而在这里一点的误差都是直接加在答案上。(不同于例一中两者垂直,基本没有影响。 )因而候选点很有可能一旦接近边界就动弹不得。好在这个问题一点都不难处理,答案在边界上无非两种情况: 在工厂所处直径与圆的交点。 某条 Voronoi 边(两
26、点中垂线)与圆的交点。 (图 12。)8 Ural State University Online Judge 1520图 11图 12IOI2008 冬令营论文 顾研19两者分别是线性数量级和平方数量级的。加之 的判断,可以在 的时间复杂nO3nO度内完成,而且常数比较小,不会使用很多时间,压缩主算法的时限。加上特判,模拟退火算法就可以通过所有的官方测试数据。即使本题精度要求非常高,对于人工构造的一些极限数据也可以出解。在 ACM 比赛中使用模拟退火算法风险还是比较大的,因为一旦有一个数据的分析不到位,很容易就导致整道题目的全军覆没,而且在参数(冷却进度参数)的把握上也要下一番功夫。但是在单
27、组测试数据为主的 OI 比赛中,尤其一些根据解的质量评分的题目,正是模拟退火算法表现的舞台。3.4 例三:激光坦克 9 题目描述:在平面上有 N 个坦克,抽象为点; M 个镜子,抽象成线段。激光发射器可以向任何方向发射激光。激光碰到镜子后发生反射,经过不超过 k 次反射的激光碰到坦克就能将其摧毁。你的任务是架设一台激光发射器,在满足摧毁所有敌方坦克的前提下,最长的一条激光攻击路径长度最短。本题是提交答案式题目,根据你所给出的解的优劣评分。分析:乍一看题目,感觉完全无从下手,我们脑海中那些常用的几何算法都和题目没有关系。这题是提交答案式题目,没有思路时不妨先观察一下数据的特点,看看是否能得到启发
28、。Testcase k N M9 CTSC2007N=4M=4k=2图 13IOI2008 冬令营论文 顾研206 0 200000 02 1 2 503 1 2 10007 1 10000 35 2 3 308 2 3 701 3 4 44 3 2 359 3 18 3010 5 25 100我们把测试数据以k为关键字排序,得到了不少有用的信息: k很小,除数据10外都有 。k 除数据1、2规模较小外,对于相同的k,N+M的值比较接近,但不同的k之间则相差若干个数量级。很显然,测试数据暗示我们采用分段处理的程序,对于不同的k,进行不同处理。同时本题的计分函数 保证只要出解就有C 1的底分,并
29、大致按AnsCBest2110照解与官方解答的比例向上取整,可见公式还是比较宽松的,因此我们要力保出解。 k=0:这时因为没有镜子的存在(数据6) ,我们可以使用最远点Voronoi图求解。但是数据规模过于庞大,因此应该不会有人在比赛中写一个基于分治法的 构造最远点nOlogVoronoi图解的方法去获得10 分。本题和先前的题目相比,只是最近距离改成了最远距离,但这丝毫不影响模拟退火算法的使用。加入镜子,相当于把平面中的一些区域标志为不可到达(图14) ,并不影响图的几何性质,因此我们可以一并处理。Algorithm Check-No-Reflection(point p, int i)fo
30、r j 1 to m doif 线段 p-tanki与镜子 j 相交then return return 线段 p-tanki的长度图 14IOI2008 冬令营论文 顾研21Algorithm Count(point p)dist 0for i 1 to n dodist max(dist, Check-No-Reflection(p, i)return dist我们还是使用3.1中的算法框架,加入上面的判断的过程就可以了,算法复杂度为。但是第6、7组数据中的N非常大,因此,模拟退火算法的另一个优mtnLpO1势灵活,便体现出来了。因为解集的大小和每轮迭代的次数是我们自己设定的,也就是说算法
31、的运行时间是可以控制的。我们可以先适当牺牲解的质量,找到最优解的大体位置,然后再在最优解附近再次求解即可。 (当然如果不放心的话多迭代几次也没关系。 )Testcase K 得分6 0 102 1 103 1 07 1 15 2 108 2 61 3 94 3 109 3 010 5 0总计 56红色表示得到的解小于等于官方解答。 (许多官方解答非最优解)我们试着实现一下,其中输入输出等代码约为60行,再加上100行左右的模拟退火的过程(包括一些基本的几何模块) ,最理想的情况下可以得到56分,是一个性价比很高的算法。 (参加过的同学可能都有体会,CTSC的每一分得起来都是那么艰难)当然如果大
32、家仍有时间、有能力,还可以进行进一步的挖掘。 k=1:此时我们要处理一次的反射。不过有个很好性质,就是激光发射器确定后,不经过反射的路径必然比发生反射的路径短。因此我们可以在情况中略加修改,并加入一个过程。IOI2008 冬令营论文 顾研22Algorithm Check-One-Reflection(point p, int i)dist for f 1 to m doif 存在 p 经过镜子 f 的反射到 tanki的路径inter 路径与镜子 f 的交点ok truefor j 1 to m doif 线段 p-inter,inter-tanki与镜子 j 相交then ok false
33、; breakif okthen dist min(dist, 路径长度 )return distAlgorithm Count(point p)dist 0for i 1 to n dotemp Check-No-Reflection(p, i)if temp=then dist max(dist, Check-One-Reflection(p, i)else dist max(dist, temp)return dist加上这两段代码,以及一些反射、求线段交点等过程总计约80行后,算法的时间复杂度为 (这里不存在m =0) ,所幸我们依旧可以通过参数来控制程序的运行2tnLpO时间。我们看
34、一下运行的实际效果。Testcase K 得分6 0 102 1 103 1 107 1 105 2 108 2 101 3 104 3 109 3 010 5 0总计 80k1的时候程序当然可以得到最优解,最后两组数据仍然无法出解。然而令我们感到兴奋的是第1、4、5、8组数据中有的结果并不逊于官方解答,有的虽然不及官方解答,但是通过算分公式向上取整后也能得到满分。当然在真正的比赛中,心情肯定比较紧张,不IOI2008 冬令营论文 顾研23一定能将所有数据的当前的最优解跑出来(参数设置的问题,多次随机取最优值等,笔者在CTSC 中实现这个算法的得分是63分) , 但是240行左右的代码,608
35、0的得分应该能让多数人满意,毕竟有半数的集训队队员在这次比赛中的成绩不足25分。从这张成绩表中可以看出,再进行k2的分析,意义并不大。但是作为论文,本着科学严谨的思想,笔者还是对于k=2的情况进行了编码实现。 k=2:k=2的时候情况就复杂多了,这体现在两个方面:a. 两次反射的求解和判断。我们不仅要求出反射的坐标,还要判断相交顺序的先后,稍不留心就会出现图15中的荒谬情况。同时三条线段的判断要比两条麻烦不少。b. 没有情况中优美的性质,因为反射一次不一定优于反射两次,因此我们不得不对Count 过程进行修改,先将每种情况的距离统统计算出来再取最小值。同时在输出的部分也要做较大的改动。所幸的是
36、加入诸多代码同时对程序进行了很多改动后,程序能对第9组数据出解了。不过在真正的比赛中为了区区10分对程序大动干戈是很不划算的。 k3:我们只剩下第10组数据了,图16是使用VB 生成出来的示意图。可以看到,并没有什么明显的位置可供我们放置激光发射器。同时我们的算法复杂度是 ,这组1kmtnLpO数据中m达到100之大,即便想做,也恐怕运行不出结果。 (这组数据很有可能是反向出的,先找到路径,再添加镜子。 )图 15图 16IOI2008 冬令营论文 顾研24小结:我们把三个表格进行汇总。Testcase k 程序 1 程序 2 程序 36 0 10 10 102 1 10 10 103 1 0
37、 10 107 1 1 10 105 2 10 10 108 2 6 10 101 3 9 10 104 3 10 10 109 3 0 0 1010 5 0 0 0总得分 56 80 90代码长度 60 160 240 300可以看出,前两个程序的性价比比较高,尤其是程序1,思维难度和代码量都不是太大,得分还算可观。如果时间充裕,或其他题目没有思路,程序2也可以考虑,而程序3相对就不推荐了。3.5 小结这种模拟退火算法可以推广到一些最大、最小、第 k 小距离的问题甚至距离和的最大、最小的问题(比如 zju1901, A Star not a Tree?) ,尤其是在一些函数值随位置连续变化的
38、问题里。比如说,大家不一定会最远点 Voronoi 图的构造算法,k 阶 Voronoi 图的构造算法,但是模拟退火算法都可以在一定程度上解决这些问题。同时,模拟退火算法有着随机算法共有的优点:简单(主过程很短小,实现也很简单) 、快速、灵活和易于并行化。经常做网上题库的同学一定知道 Ural 这个网站的测试数据是相当严谨的,因此从侧面反映了解的质量还是比较高的。当然笔者提出这个算法,肯定还有分析涵盖不到位的地方,对于算法的确定性以及应用范围等问题,欢迎大家与我讨论。4 总结近几年,随着信息学的发展,几何题目不再是经典问题的代码比赛了,各种各样灵活多变的问题层出不穷。随机算法以其简单、快速、灵
39、活和易于并行化的特点,容易在时间、空间和精度三者之间实现平衡。希望本文的思想能为大家打开一扇窗,在遇到几何问题的IOI2008 冬令营论文 顾研25时候多一种思路。当然,随机化思想的灵活运用,是在对于经典问题的熟练掌握的前提下的,因为创新永远都是建立在扎实的基础之上的。感谢感谢刘汝佳教练的指导。感谢和俞华程同学在多道题目中的讨论。感谢在中山一中信息学竞赛组多年的训练和讨论。感谢 Internet 的提供的资源。参考文献1 算法引论一种创造性方法 美Udi Manber 著2 算法设计技巧与分析 沙特M.H.Alsuwaiyel 著3 算法艺术与信息学竞赛 刘汝佳、黄亮著4Computation
40、al Geometry Algorithms and Applications: M. de Berg 等 著5国家集训队 2006 年论文:唐文斌浅谈“调整”思想在信息学竞赛中的应用6国家集训队 2007 年论文:王栋浅析平面 Voronoi 图的构造及应用7国家集训队 2007 年论文:高逸涵与圆有关的离散化方法8国家集训队 2007 年论文:李宇骞浅谈信息学竞赛中的线性规划简洁高效的单纯形法实现与应用附录附录 1 蒙特卡罗抽样的步骤蒙特卡罗抽样主要分为三个主要步骤:1 构造或描述概率过程。2 实现从已知概率分布抽样。3 建立各种估计量。 IOI2008 冬令营论文 顾研26构造或描述概率
41、过程: 对于本身就具有随机性质的问题,主要是正确描述和模拟这个概率过程,对于本来不是随机性质的确定性问题,比如计算定积分,就必须事先构造一个人为的概率过程,使它的某些参量正好是所要求问题的解。即要将不具有随机性质的问题转化为随机性质的问题。实现从已知概率分布抽样: 构造了概率模型以后,由于各种概率模型都可以看作是由各种各样的概率分布构成的,因此产生已知概率分布的随机变量(或随机向量) ,就成为实现蒙特卡罗方法模拟实验的基本手段,这也是蒙特卡罗方法被称为随机抽样的原因。随机数就是具有这种均匀分布的随机变量。随机数序列就是具有这种分布的总体的一个简单子样,也就是一个具有这种分布的相互独立的随机变数
42、序列。产生随机数的问题,就是从这个分布的抽样问题。在计算机上,可以用物理方法产生随机数,但代价昂贵,不能重复,使用不便。另一种方法是用数学递推公式产生。这样产生的序列,与真正的随机数序列不同,所以称为伪随机数,或伪随机数序列。不过,经过多种统计检验表明,它与真正的随机数,或随机数序列具有相近的性质,因此可把它作为真正的随机数来使用。由已知分布随机抽样有各种方法,都是借助于随机序列来实现的,也就是说,都是以产生随机数为前提的。由此可见,随机数是我们实现蒙特卡罗模拟的基本工具。 建立各种估计量: 一般说来,构造了概率模型并能从中抽样后,即实现模拟实验后,我们就要确定一个随机变量,作为所要求的问题的
43、解,我们称它为无偏估计。建立各种估计量,相当于对模拟实验的结果进行考察和登记,从中得到问题的解。 附录 2 2.2.2 定理的证明设 P 为平面上的一个点集;设 R 为另一个(允许为空的)点集,而且 ;设RP,则下列命题成立:p 如果存在某个圆覆盖了 P,而且其边界穿过 R 中的所有点,那么这样的圆中必然存在唯一的最小者。我们将其记作 。Pmd, 如果 ,那么 。RpmdP, p,IOI2008 冬令营论文 顾研27 如果 ,那么RpPmd,pRPmd,证明 如图 17 所示,假设存在半径相同的两个不同的覆盖圆 D0 和D1,其圆心分别在 x0 和 x1。显然 P 中的所有的点必然落在交集 中
44、。我们将按照下面的方法,构造出一系列连续的圆 。取 D010和 D1 的边界的一个交点 z, 的圆心是点 ,其半径为 ,对于任何满足 0 1 的10)(xxzxdr,,都有 ,因此作为一个特例, =0.5 时也成立。于是鉴于 D0 和 D1 都分10别覆盖了 P 中的所有点,故 也必然如此。此外 也必然经过 和 的每2D21D01个交点。由于 ,故有 。也就是说, 不仅是 P 的一个覆10RR盖圆,而且其边界同样会穿过 R 中的所有点。然而,就半径而言, 要严格小于 D021和 D1。因此,一旦出现了半径相等的两个圆,而且它们的边界都各自穿过 R 中的所有点,就说明肯定存在另一个半径更小的覆盖
45、圆,而且它们的边界都各自穿过 R 中的所有点。于是,最小覆盖圆 是唯一的。RPmd, 令 ,若 ,则 D 必然包含 P,而且其边界穿过 R 中的所p有点,不可能有任何更小的圆可以覆盖 P,而且其边界穿过 R 中的所有点。否则,这样的一个圆必然是 的一个包围圆,同时其边界穿过 R 中的所有点,这与 D 的定义矛盾。P因此可以得到 。RmdD, 令 ,取 。再次考虑前面所定义的一系列 。p0 PmdD,1注意到, , 。实际上,由这一系列的圆,定义了从 D0 到 D1 的一个连图 17IOI2008 冬令营论文 顾研28续变形的过程。根据假设,有 。因此,由其连续性,必然存在某个 ,使1Dp10*
46、得 p 正好落在 的边界上。与的证明同理,我们可以得到 和 ,*DDP*R对于任何 01, 的半径必然会严格地小于 D1 的半径。然而根据其定义,D 1 是 P 的最小覆盖圆,因此我们只有一种选择 。也就是说,D 1 的边界必然穿过 p。*附录 3 论文原题昂贵的“饮品”题目描述There are some water, milk and wine in your kitchen. Your naughty little sister made some strange drinks by mixing them together, and then adds some sugar! She
47、wants to know whether they taste good, but she doesnt want to try them herself. She needs your help.Your sister knows that you dont want to drink them either (anyone wants to?), so she gives you a chance to escape: if you can guess the price of a special drink, she gives you freedom. Warning: she lo
48、ves her special drink so much that you should never under-estimate its cost! That is, youre to find the most expensive possible price of it.The price of each drink equals to its cost. If the amounts of water, milk, wine and sugar used in the drink are a1, a2, a3 and a4 respectively, and the unit costs of water, milk, wine and sugar are c1, c2, c3 and c4 re