设计算法1
2015-11-06 16:49
134 查看
题目:
有一幢100楼的大厦,两部手机,让你设计一种算法确切地知道这部手机在第几楼摔下会坏
分析:
第一步手机是用来决定在0-100层之间需要划分几个区间
第二步手机是用来在已发现可以导致手机摔坏的区间内一级一级往上加楼层已具体测试是哪一层的工具。
假设第一步手机划分的区间为a个,每个区间包含的层数为b。
则可以得出a*b=100。
所谓的最优化,既是让测试的次数尽量最小,即让a+b+1次数尽量最小,也就是让a+b最小。
现在就简单了,转化为一个数学题。已知a*b=100,问当a+b取最小值时,a=?,b=?。
具体做法就是:
将一部手机从10楼扔下,如果坏,则拿第二部手机从一楼开始,逐层往上试,则实验最大次数为10+1=11次。
如果没坏,则将第一部手机从20楼仍下,如果坏,则将第二部手机从11楼开始,逐层往上试,实验最大次数为10+2=12次。
以此类推,当第一部手机从第90层扔下时,如果坏,则从81曾逐层往上,如不坏,也不用从第一百层扔了,从91层开始吧。
有一幢100楼的大厦,两部手机,让你设计一种算法确切地知道这部手机在第几楼摔下会坏
分析:
第一步手机是用来决定在0-100层之间需要划分几个区间
第二步手机是用来在已发现可以导致手机摔坏的区间内一级一级往上加楼层已具体测试是哪一层的工具。
假设第一步手机划分的区间为a个,每个区间包含的层数为b。
则可以得出a*b=100。
所谓的最优化,既是让测试的次数尽量最小,即让a+b+1次数尽量最小,也就是让a+b最小。
现在就简单了,转化为一个数学题。已知a*b=100,问当a+b取最小值时,a=?,b=?。
具体做法就是:
将一部手机从10楼扔下,如果坏,则拿第二部手机从一楼开始,逐层往上试,则实验最大次数为10+1=11次。
如果没坏,则将第一部手机从20楼仍下,如果坏,则将第二部手机从11楼开始,逐层往上试,实验最大次数为10+2=12次。
以此类推,当第一部手机从第90层扔下时,如果坏,则从81曾逐层往上,如不坏,也不用从第一百层扔了,从91层开始吧。
相关文章推荐
- 冒泡排序
- LeetCode -- Implement strStr()
- C++中的友元
- JavaScript__JavaScript中的匿名函数及函数的闭包
- Firebase 特性翻译
- eq,neq,gt,lt等表达式缩写
- Android:图片不加载到内存获取图片的大小
- AVPlayer介绍
- SQL基础--合并查询(union,union all,intersect,minus)用法与介绍
- LeetCode OJ:Implement strStr()(实现子字符串查找)
- 谈谈MVC项目中的缓存功能设计的相关问题
- 11.2.0.2 后crs 新节点隔离机制(IO fencing)
- innerHTML
- Lytro的教训:曾经的光场神器为何不行了?
- Android Fragment---执行Fragment事务
- STL容器之map与hash_map
- Spring3.x中各个jar包的作用总结
- XCode工程中 Project 和 Targets区别
- 【用户行为分析】 用wiki百科中文语料训练word2vec模型
- 你不知道的JavaScript--Item28 垃圾回收机制与内存管理