假设第一次扔在第x+1层: 如果第一个鸡蛋碎了,那么第二个鸡蛋只能从第1层开始一层一层扔,一直扔到第x层。 这样一来,我们总共尝试了x+1次,和假设尝试x次相悖。由此可见,第一次扔的楼层必须小于x+1层。 假设第一次扔在第x-1层: 如果第一个鸡蛋碎了,那么第二个鸡蛋只能从第1层开始一层一层扔,一直扔到第x-2层。 这样
解析 答案:我们可以使用二分法来找到鸡蛋破裂的临界楼层。首先将一个鸡蛋从50层扔下,如果鸡蛋破裂,则下一步从1层到49层中进行尝试;如果鸡蛋没有破裂,则下一步从51层到100层中进行尝试。以此类推,每一次将楼层范围缩小一半,直到确定鸡蛋破裂的临界楼层。
1、若鸡蛋个数足够多,使用二分法肯定是最优解 最坏情况下的最少测试次数:ceil(logn) 2、若鸡蛋个数不够,这个时候就不能使用二分法了 我们使用动态规划来解决一下这类问题。 1、拆分子问题 若从k层扔下,可以用于测试的鸡蛋有m个 这时有两种情况:a、鸡蛋碎了,这时应该去k层下面进行测试,鸡蛋个数减一。b、...
大楼扔鸡蛋问题的求解 有道经典的算法题,两个一模一样的鸡蛋,某层之上扔鸡蛋就会碎。假如运气最差的话,问要测试多少次才能找出这层楼来。 如果只有一个鸡蛋,我就只能一层一层试验。两个的话关键就是找着第一个鸡蛋试验的位置,第二个鸡蛋还是只能一层一层试验。 这道问题其实可以扩展到任意个鸡蛋,但现在还是只...
我们不妨先把问题具体化,比如给你2个鸡蛋100层楼。 我们首先想到的是第一个鸡蛋从中间的第50楼开始扔,划分楼层更快,剩余测试楼层减半,但是最坏情况是鸡蛋碎了,第二个鸡蛋只能从1楼逐层到49楼扔,总共50次。最糟糕的想法是第一个鸡蛋就从1楼开始扔,最坏需要扔100次,第一次在第一层扔不碎的情况和第一次在...
扔鸡蛋问题是计算机程序设计中的一个经典问题。从一幢楼房的不同楼层往下扔鸡蛋,用最少的最坏情况试验次数,确定鸡蛋不会摔碎的最高安全楼层。仅有一个鸡蛋供试验时,只能采用顺序查找法。有足够多的鸡蛋时,可以采用二分查找法。有多于一个但数量有限的鸡蛋时,采用动态规划方法求解。双蛋问题 (two-egg problem...
动态规划解决问题的过程分为两步:1.寻找状态转移方程式 2.利用状态转移方程式自底向上求解问题 如何找到状态转移方程式?在上一篇漫画中,两个鸡蛋100层楼的条件下,我们找到了一个规律:假设存在最优解,在最坏情况下尝试次数是X,那么第一个鸡蛋首次扔出的楼层也是 X 。这个规律在三个以上鸡蛋的条件上还能否适用...
扔鸡蛋问题的详解如下:问题背景:这是一个经典的动态规划或优化问题,旨在找出用最少的尝试次数确定鸡蛋从哪一层楼扔下会碎的最优策略。解决策略:枚举法:通过逐一尝试每一层楼来确定临界点,但这种方法效率较低,特别是在楼层数较多时。二分法:在鸡蛋数量足够多时,可以通过二分查找的方式确定临界点...
初始问题:在100层楼里,给定2个鸡蛋,在安全楼层以上的楼扔鸡蛋会碎。设计一种方案,测试哪层楼是最高安全楼层,要求测试次数最少。 思路:这是典型的动态规划问题。 假设f[n]f[n]表示从nn层楼找到摔鸡蛋不碎安全楼层的最少判断次数。 假设第一个鸡蛋第一次从第ii层扔下, ...
题目:扔鸡蛋问题 有2个鸡蛋,从100层楼上往下扔,以此来测试鸡蛋的硬度。比如鸡蛋在第9层没有摔碎,在第10层摔碎了,那么鸡蛋不会摔碎的临界点就是9层。 问:如何用最少的尝试次数,测试出鸡蛋不会摔碎的临界点? 举个栗子,最笨的测试方法是什么样呢? 把其中一个鸡蛋从第1层开始往下扔。 如果在第1层没碎,...