设计算法1
题目:
有一幢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层开始吧。