• google 面试题目分析


      有一个100层高的大厦,你手中有两个相同的玻璃围棋子。从这个大厦的某一层扔下围棋
    子就会碎,用你手中的这两个玻璃围棋子,找出一个最优的策略,来得知那个临界层面。

      中午猛的又想起google 的那道面试,今天系统的记录一下自己的思路。

      首先,两次要找到临界点,必须区间来找,第一个球找到临界的区间,用第二个球在区间内试。要得到最优的解必须先从问题的根源考虑,玻璃球摔碎的条件是自身的承受力的能力达到自身的极限,不考虑实验过程中球的性能损失等因素(摔裂什么的情况),更具物理知识,受到力的大小Ft = mv2 - mv1,这里我们的初始速度为0F大小和速度成正比。从上到下是一个匀加速的过程,所以应该把速度分成x 个区间,来找最优值。

    速度分成x个区间,必然每个区间的距离是不一样的,但是有联系。

    因为初始速度为0,既然按速度来分区间,于是每个区间的时间是固定的,设为t,先不管分几个区间。

    第一个区间: 2gS1 = (gt)2

    第二个区间: 2gS2 = (2gt)2-(gt)2

    第三个区间 : 2gS3= (3gt)2-(2gt)2 . . .

      事实上,可以发现,每个区间的差值,Sn-S(n-1)是固定值,C = 2(gt)2.

       这样就好办了,假设在100层中,首先在m层试投,然后每隔d 层递减来投(这里的d和上面理论上的差值不是同一个值,上面只是为了确定C是一个常数)。 问题可以简化为,在100 层之内试出临界层,也就是在m投后,在m-d 层投,限制条件为必须在100 层之内出结果 ,表达式为:m+(m-d)+(m-2d)+...+1 >= 100

    等差数列求和的公式 m + {m(m-1)d}/2 >= 100 即:m2+(2-d)m >= 100 限于现有楼层的条件,正整数,求m 的最小值。

    显然 f(m) = m2+(2-d)m 是一个 递增函数,求他的最小值,只有当d 最小的时候,d 1

    得出 m = 14.

    (其实网上面有14 的答案,我这边只是给出这种算法的理由,为什么要分区间,确定以及化解为等差数列,以及等差的确定。使之在理论上成为最优解。)

      

  • 相关阅读:
    织梦dedecms网站数据库出错如何修复
    如何实现织梦dedecms会员登陆后就不显示广告
    搜索框里显示字段鼠标点击后就隐藏的方法
    织梦dedecms首页如何调用联动类别代码
    织梦CMS友情链接调用方法技巧大全
    DedeCMS 标题seo优化给列表页加上第x页
    DedeCMS采集教程:过滤替换的技巧
    织梦dedecms网站数据库出错如何修复
    压力测试-查看索引
    时间同步服务部署
  • 原文地址:https://www.cnblogs.com/zoro/p/2127300.html
Copyright © 2020-2023  润新知