- P19's solution
P19's Solution
- 2025-9-4 21:59:18 @
第一部分
上述代码的最坏时间复杂度是 。
第二部分
为了证明中间的小猪不会出现左右往复移动而使时间复杂度达到 的情况,我们考虑把场上所有的小猪从左向右平分成三份,分别记为 。
根据题意,在 中都至少有一只小猪还没下桥的情况下, 中的小猪总会向左移动,而 中的小猪总会向左移动。 秒后, 中任意一只小猪和 中任意一只小猪之间的距离将不小于 ,因此它们之间一定有一组全部下桥了。
由上可知,时间每过去 秒,桥上小猪的数量都将至少减少 ,即剩下原来的 或更少。因此,整个过程最多持续 $\dfrac{T}{2} \cdot \log _{\frac{3}{2}} n=O(T \log n)$ 秒。
阅读程序可知,它 while
循环内程序的时间复杂度为 ,而 while
循环每执行一次相当于时间流逝一秒,因此 while
循环最多会执行 次。
综上,上述代码的时间复杂度不高于 。
第三部分
只要让 远大于 (此时可以忽略 对小猪位置的影响),且 足够大,将 只小猪都放在 位置(时间每过去 秒,桥上小猪的数量都将减少 ),即可使上述代码的时间复杂度退化到 。
例如:
- 。
- 。
- 。