![]() |
VOOZH | about |
Given n eggs and k floors, find the minimum number of trials needed in worst case to find the floor below which all floors are safe. A floor is safe if dropping an egg from it does not break the egg. Please see n eggs and k floors. for complete statements
Example
Input : n = 2, k = 10 Output : 4 We first try from 4-th floor. Two cases arise, (1) If egg breaks, we have one egg left so we need three more trials. (2) If egg does not break, we try next from 7-th floor. Again two cases arise. We can notice that if we choose 4th floor as first floor, 7-th as next floor and 9 as next of next floor, we never exceed more than 4 trials. Input : n = 2. k = 100 Output : 14
We have discussed the problem for 2 eggs and k floors. We have also discussed a dynamic programming solution to find the solution. The dynamic programming solution is based on below recursive nature of the problem. Let us look at the discussed recursive formula from a different perspective.
How many floors we can cover with x trials?
When we drop an egg, two cases arise.
Let maxFloors(x, n) be the maximum number of floors that we can cover with x trials and n eggs. From above two cases, we can write. maxFloors(x, n) = maxFloors(x-1, n-1) + maxFloors(x-1, n) + 1 For all x >= 1 and n >= 1 Base cases : We can't cover any floor with 0 trials or 0 eggs maxFloors(0, n) = 0 maxFloors(x, 0) = 0 Since we need to cover k floors, maxFloors(x, n) >= k ----------(1) The above recurrence simplifies to following, Refer this for proof. maxFloors(x, n) = ∑xCi 1 <= i <= n ----------(2) Here C represents Binomial Coefficient. From above two equations, we can say. ∑xCj >= k 1 <= i <= n Basically we need to find minimum value of x that satisfies above inequality. We can find such x using Binary Search.
4
Time Complexity : O(n Log k)
Auxiliary Space: O(1)
Another Approach:
The approach with O(n * k^2) has been discussed before, where dp[n][k] = 1 + max(dp[n - 1][i - 1], dp[n][k - i]) for i in 1...k. You checked all the possibilities in that approach.
Consider the problem in a different way:
dp[m][x] means that, given x eggs and m moves, what is the maximum number of floors that can be checked The dp equation is: dp[m][x] = 1 + dp[m - 1][x - 1] + dp[m - 1][x], which means we take 1 move to a floor. If egg breaks, then we can check dp[m - 1][x - 1] floors. If egg doesn't break, then we can check dp[m - 1][x] floors.
Output
4
Time Complexity: O(n*k)
Auxiliary Space: O(n*k)
Optimization to one-dimensional DP
The above solution can be optimized to one-dimensional DP as follows:
Output
4
Complexity Analysis: