You have been given 2 special, extremely rugged Xboxes. You are in an office building that is 100 stories high. Using the fewest possible number of drops from windows in your office building, determine the highest floor you can drop an Xbox from and have it survive: for example, they might be able to take the drop from the 30th floor, but not the 31st. You can break both Xboxes in your search. State the worst case number of drops needed and explain how you arrived at that answer.
你在一幢100层的办公楼里上班,现在给你两台xbox(已经特意捆绑包扎好),要求你用尽可能少的试摔次数来判断xbox摔不坏的最高楼层层数。比方说,从30层丢下来没问题,但从31层丢下来就不保了。在摸索过程中,允许把两台xbox都砸烂。在最坏情况下,使得试摔次数尽可能小。
- 问题答案必须是在最坏情况下,时间复杂度最小。
- 最容易想到的就是二分法,三分法,多分法,但它们并不符合要求。比如:在50层丢一个,被砸烂。然后在25层丢另外一个,同样被砸烂。此时根本无从找到问题答案。
- 第二个想到的方法就是分段。(1)用第一个xbox寻找损坏区间;(2)用第二个xbox遍历该区间寻找损坏层。假定最优区间长度是x,则第一步最多要摔100/x(大于等于此值的最小整数)次,第二步最多摔x-1次,问题转换为求100/x+(x-1)的最小值。具体描述:以10层楼为一个区间,先摔第一个,以确定摔坏的区间,然后再用另一个在这个区间内从最低的楼层摔,从而找到所要求层数,这种方法最多要摔19次。
- 在“分段”方法中,段区间都是相等的。如果段区间不等,是不是可以找到最优的方法呢?假设最终答案至少要摔n次,那第一次顶多从n层楼摔。如果坏了,第二 个从1至n-1层最多摔n-1次就可以判断了;如果没坏,那么搜索范围改为[n+1,100],相当于搜索空间减少了n层。如果第一次没坏,第二次顶多再 减少n-1的搜索空间。依次类推,当第n次时顶多再减少1的搜索空间。n次之后,顶多排除n+(n-1)+(n-2)+...+1 = n*(n+1)/2个楼层。只要n*(n+1)/2 >= 100就可以了,满足这个条件的最小n为14。具体描述:从14楼丢一个,如果碎了,从1楼开始到13楼为止丢另一个,不碎,在14+13楼丢;...
给一个包含n个元素的数组,{a[1],...,a[n]},a[1]+a[2]+...+a[n]=100。那么如果第k次摔坏了第1台xbox ,那么此时最坏情况下总共需要的次数是k+a[k]-1我们把这个记为cost[k]。此时,问题可以重新描述为:找到一个满足上述条件的数组,{a[1],...,a[n]} ,使得 max<k=1>(cost[k])最小。
sigma<k=1>( cost[k] )
= (1+a[1]-1) + (2+a[2]-1) + (3+a[3]-1) ... + (n+a[n]-1)
= (1+2+3+ ... +n) + (a[1]+a[2]+a[3]+ ... +a[n]) - n
= n*(n+1)/2 + 100 - n
这个式子是个常量仅与n有关,与{a[1],...,a[n]}的具体数值无关。同时,不难看出 max<k=1>( cost[k] ) >= sigma<k=1>( cost[k] ) / n (最大值总是大于平均值),而且仅当 cost[1] =cost[2] = ... cost[n] 的时候,max...可以取到这个最小值。因此,对于任意给定的n,满足 cost[1]= cost[2] = ... cost[n]的解就是最优解。也就是说k+a[k]-1=1+a[1]-1,从而a[k]=a[1]-k+1 。那么a[2]=a[1]-1,a[3]=a[1]-2=a[2]-1...
参考:(1)
摔xbox的题目</k=1></k=1></k=1></k=1>
分享到:
相关推荐
算法初步课件 1.2.2 基本算法语句--条件语句.ppt
2. **wK算法** - 一种专用于处理SAR数据的算法,可能涉及到去除噪声、提高信噪比、恢复图像细节等步骤,但其具体实现和原理没有公开。 3. **Matlab编程** - 作为强大的科学计算工具,Matlab在遥感和图像处理领域有...
首先,Bresenham画线算法是计算机图形学中最基本的算法之一,用于在像素化的屏幕上高效地绘制直线。该算法通过判断每个像素点应该属于哪一侧来决定是否填充,减少了浮点运算,提高了速度。它基于错误累积的概念,...
在机器人路径规划领域,优化算法起着至关重要的作用,它能帮助找到最有效、最经济的运动轨迹。本文将深入探讨“粒子群算法优化3-5-3多项式工业机器人时间最优轨迹规划算法”这一主题,以及如何在MATLAB环境下实现这...
2. **算法**:算法是解决问题或执行任务的步骤序列。常见的算法包括排序(如冒泡排序、快速排序、归并排序)、查找(如线性查找、二分查找)、图遍历(如深度优先搜索、广度优先搜索)以及动态规划等。这些算法不仅...
多目标遗传算法(NSGA-III)matlab源代码 多目标遗传算法(NSGA-III)matlab源代码 多目标遗传算法(NSGA-III)matlab源代码 多目标遗传算法(NSGA-III)matlab源代码已验证
粒子群优化算法源程序--MATLAB编写
该算法的基本思想是通过测量信号从一个发射器到多个接收器的时间差来计算目标的距离。其主要步骤如下: 1. **信号同步**:首先,接收端需与发射端进行时钟同步,确保时间基准一致。 2. **TDOA估计**:记录下信号...
2. `(BM)A Fast String Searching Algorithm.pdf`:这可能是Boyer-Moore算法的详细解释或原始论文。 3. `Aho-Corasick.pdf`:这个文件很可能是Aho-Corasick算法的详细介绍或者原始论文。 4. `(AC-BM)getPDF.pdf`:这...
此PDF教材可能涵盖这些基本概念,并通过实例代码展示C语言中如何实现这些数据结构和算法。学习者不仅可以了解理论知识,还能动手实践,提升编程能力。通过学习,读者应能理解各种数据结构的特点和适用场景,掌握常见...
包含空间谱估计理论与算法(王永良)课本对应各章的matlab程序 MATLAB程序:第2章_空间谱估计基础; 第3章_线性预测算法;第4章_多重信号分类算法;第5章_最大似然及子空间拟合算法;第6章_旋转不变子空间算法;第7...
这是从mathwork上下载的NSGA-3的代码,自己写的注释。因为也没有完全弄懂代码,所以有些地方空着没写注释,有些地方还注释了问号。就是希望能和大家一起讨论交流一下,希望大家指正。希望弄懂代码的小伙伴能回帖说...
使用matlab编写NSGA-2多目标优化算法: 1)针对测试函数集ZDT1进行的NSGA-Ⅱ算法的编写; 2)本程序有详细的备注解释; 3)包含论文《非支配排序遗传算法(NSGA)的研究与应用》.pdf,用来指导学习NSGA-Ⅱ算法
图像处理与计算机视觉算法及应用-第2版-高清-完整目录-2012年5月
用梁友栋-barsky算法或者中点分割法等其它算法(除cohen-sutherland直线裁剪算法外)实现直线段相对于给定窗口的裁剪。 采用C/C++ 、OpenGL编写程序(参考所提供的程序代码clip.cpp及第一次实验提供的建立Project的...
ECC算法校验工具ECC算法校验工具ECC算法校验工具
《算法技术手册》内容简介:开发健壮的软件需要高效的算法,然后程序员们往往直至问题发生之时,才会去求助于算法。《算法技术手册》讲解了许多现有的算法,可用于解决各种问题。通过阅读它,可以使您学会如何选择和...
本资源提供的"GA-PSO混合算法的matlab源码"是一个结合了遗传算法(Genetic Algorithm, GA)与粒子群优化算法(Particle Swarm Optimization, PSO)的混合方法,专门应用于解决WSNs的路由优化问题。这两种算法都是...
针对基本遗传算法GA有局部搜索能力差、计算量大、对较大搜索空间适应能力差和易收敛于局部极小值等问题, 采用将极值优化EO算法与传统遗传算法相结合的方式, 对基本遗传算法进行改进, 提出了一种新的算法:GA-EO算法,...
算法导论中文版(南京大学),主讲算法的基本概念和实现