LeetCode887题:鸡蛋掉落——动态规划法与数学法

1. 问题介绍

关于临界楼层查找问题最优查找策略,我已经在上一篇博客摔玻璃球(鸡蛋)查找临界楼层中做了详细讲解,本文将继续研究相关问题。

假如题目不要求给出具体的最优查找策略,只问最坏情况下至少需要多少次查找,那么该如何求解呢?LeetCode887题:鸡蛋掉落也提出了相同的问题。

2. 方法研究

为叙述方便,定义如下变量或函数:玻璃球个数 N N N,玻璃球摔碎个数 N b N_b Nb,查找楼层数 F F F,临界楼层 F c F_c Fc,最大查找次数 T T T N N N T T T确定时可查找的最大楼层数 F M a x F_{Max} FMax F M a x F_{Max} FMax N N N T T T的函数关系 f f f( N N N, T T T),查找路径 P P P

最坏情况下的查找次数即为最大查找次数 T T T,在摔玻璃球(鸡蛋)查找临界楼层中, T T T为二叉查找树的深度,假如构造出二叉查找树即可求出 T T T的值。但如果不构造二叉查找树能不能求 T T T的值呢?

2.1 动态规划法

根据定义, N N N, F F F T T T满足如下关系: f f f( N N N, T T T- 1 1 1)< F F F f f f( N N N, T T T),假如能推导出 f f f( N N N, T T T)的公式,然后将 T T T=1, 2, 3, … 依次代入关系式中,使关系式成立的 T T T即为所求。

按照动态规划思想推导 f f f( N N N, T T T)函数的递推公式

  1. N N N= 1 1 1时,只能从第1层开始向上逐层查找,因此有几次查找机会,最多就能查找几个楼层,即 f f f( 1 1 1, T T T)= T T T
  2. T T T= 1 1 1时,不管有几个玻璃球,只有1次查找机会时,最多只能查找1个楼层,即 f f f( N N N, 1 1 1)= 1 1 1
  3. N N N> 1 1 1, T T T> 1 1 1时,第1个玻璃球在某层查找,若摔碎,则用第2个玻璃球查找该层下方楼层,最多可查 f f f( N N N- 1 1 1, T T T- 1 1 1)个楼层,若没碎,则继续查找该层上方楼层,最多可查 f f f( N N N, T T T- 1 1 1)个楼层,一共最多可查楼层数为下方楼层加上方楼层再加当前所在层: f f f( N N N, T T T)= f f f( N N N- 1 1 1, T T T- 1 1 1)+ f f f( N N N, T T T- 1 1 1)+ 1 1 1。同理可继续拆分 f f f( N N N- 1 1 1, T T T- 1 1 1)和 f f f( N N N, T T T- 1 1 1),直到 N N N= 1 1 1 T T T= 1 1 1,即可求得 f f f( N N N, T T T)的值。

综上, f f f( N N N, T T T)的递推公式为:
    f ( N , T ) = f ( N − 1 , T − 1 ) + f ( N , T − 1 ) + 1 f(N,T)=f(N-1,T-1)+f(N,T-1)+1 f(N,T)=f(N1,T1)+f(N,T1)+1    ( N ≥ 2 , T ≥ 2 ) (N≥2, T≥2) (N2,T2)
初始条件为:
    f ( 1 , T ) = T , f(1,T)=T, f(1,T)=T, f ( N , 1 ) = 1 f(N,1)=1 f(N,1)=1    ( N = 1 (N=1 (N=1 或  T = 1 ) T=1) T=1)

根据 f ( N , T ) f(N,T) f(N,T)递推公式计算可得 N N N, T T T F M a x F_{Max} FMax的数值对照表,如表1所示。已知 N N N F F F,查表可得最大查找次数 T T T

                     表1. N N N, T T T, F M a x F_{Max} FMax数值对照表

N / T N/T N/T 1 2 3 4 5 6 7 8 9 10 11 12 13 14 99 100
1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 99 100
2 1 3 6 10 15 21 28 36 45 55 66 78 91 105 4950 5050
3 1 3 7 14 25 41 63 92 129 175 231 298 377 469
4 1 3 7 15 30 56 98 162 255 385 561 793 1092 1470
5 1 3 7 15 31 62 119 218 381 637 1023 1585 2379 3472
6 1 3 7 15 31 63 126 246 465 847 1485 2509 4095 6475
7 1 3 7 15 31 63 127 254 501 967 1815 3301 5811 9907
8 1 3 7 15 31 63 127 255 510 1012 1980 3796 7098 12910
9 1 3 7 15 31 63 127 255 511 1022 2035 4016 7813 14912

根据表1分别绘制 N N N取不同值(1, 2, 3, 4, 5, + ∞ ∞ )时的 F M a x F_{Max} FMax- T T T函数图像,其中 T T T=1, 2, 3, …, 50,如图1所示。当 N N N=+ ∞ ∞ 时, F M a x F_{Max} FMax= 2 T 2^T 2T- 1 1 1
在这里插入图片描述                       图1. F M a x F_{Max} FMax- T T T函数图像

2.2 数学法

利用 f f f( N N N, T T T)的递推公式计算 F M a x F_{Max} FMax的值需要递归计算若干子问题的解,这样未免太过繁琐,如果能推导出 f f f( N N N, T T T)的通项公式,然后将 N N N T T T代入公式直接求出 F M a x F_{Max} FMax,就会极大地减少计算量。

2.2.1 f(N, T)的前T项和与组合数公式

因为 N N N表示玻璃球数量, T T T表示最大查找次数,所以 N N N T T T均为正整数。

  1. N N N 2 2 2, T T T 2 2 2时:
    f ( N , T ) f(N,T) f(N,T)的前 T T T项和为 s ( N , T ) s(N,T) s(N,T),则有
    f ( N , T ) = f ( N − 1 , T − 1 ) + f ( N , T − 1 ) + 1 f(N,T)=f(N-1,T-1)+f(N,T-1)+1 f(N,T)=
  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值