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