双蛋问题

问题:

      奥林匹克大厦楼层高100层,当楼层低时,从楼上扔下鸡蛋不会碎,当楼层高时,从楼上扔下鸡蛋会破碎。现在你有两个鸡蛋,你扔多少次,可以计算得出鸡蛋不会碎的楼层?(除去任何因素,牛顿的棺材已经派人按住了)

  • 方式一:
    • 从一层开始扔,每层递增,那么每次增加1,最多试100次就出结果了。
    • 结果:最少1次就碎,最多100次碎。
    • 既(1, 100)
  • 方式二:平衡二叉树法
    • 每次取中间值楼层,如:50,25,13,7,4,2,1。
    • 如果第一次取50碎了,那说明临界点在50以内,就剩下一个鸡蛋,又开始第一种方式。
    • 既(7, 50)
    • 为了最优反向取,如:1,2,4,7…...。最优1次就碎,最差75碎了,50没碎,那么就是(1,8+24)。
    • 既(1, 32)
  • 方式三:
    • 假设我从N层扔,每次楼层一样,那么:N x N >= 100, N取10层,如:10,20,30,40......100,一共10份。
    • 如果第一次扔10碎了,说明区间在1到10直接。最差的结果在100层扔碎了,区间在91层到99层之间。既(1+9, 10+9)。
    • 既(10, 19)
  • 方式四:最优方案
    • 通过上面三种方式,有没有一种感觉,就是如果想让扔的最大次数最小化,既让最小的数字最大化,也既最大次数和最小次数之间的差最小。则:N + (N-1) + (N-2) + ...... + 1 就是数列求和公式 N(N+1)/2
    • N(N+1) /2>= 100 ,N=13.65,约14。 第一次在14楼扔蛋,第二次14+13=27楼扔,以此类推。如:14,27,39,50,60,69,77,84,90,95,99,100
    • 最多扔1+13次,最少扔12次。
    • 既(14, 12)。

结论

  • 小朋友别拿家里的鸡蛋去试了,小心砸到人。
  • mysql数据库的二叉树方式不是最优的查询方式(针对单条查询,范围查询就算了)。
  • 如果楼高确定,手里的鸡蛋数量不确定,你会怎么算呢?
    • 递归
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值