You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

岩石最少分组问题:排序贪心策略的可行性验证

排序后贪心分组的正确性证明

问题明确

给定岩石重量列表weights和整数maxVariance,要求分组后每组内任意两块岩石重量差不超过maxVariance,求最少分组数。比如示例中:

weights = [5,3,2,4,6]
maxVariance = 2

排序后为[2,3,4,5,6],贪心分组得到[2,3,4]和[5,6],共2组,确实是最优解。

贪心策略的具体做法

  • 先将所有岩石重量按升序排序
  • 从第一个元素开始,把它作为当前组的基准,尽可能把后面所有满足重量 ≤ 基准 + maxVariance的岩石都纳入当前组
  • 碰到第一个不满足条件的元素时,开启新组,重复上述步骤

为什么这个策略能得到最少分组?

用反证法就能清晰证明:
假设存在一种分组方式,组数比贪心策略的结果更少。

设贪心分出来的组为G1, G2, ..., Gk,假设最优分组为H1, H2, ..., Hm,且m < k。

从第一个元素开始对比:

  • 贪心的G1是包含第一个元素的最大可能组——也就是直到第一个超过基准+maxVariance的元素为止,能容纳的所有岩石
  • 最优分组的H1必然包含第一个元素,但它的覆盖范围不可能比G1大(否则贪心策略一定会把那些元素都放进G1),也就是说H1最后一个元素的位置不会比G1的靠后

接下来看剩余岩石:H1剩余的岩石数量肯定比G1剩余的多,因为H1覆盖的范围更小。以此类推,每一步最优分组剩余的岩石都不会比贪心策略的少,那最终需要的组数不可能比贪心策略更少,这与假设矛盾。

因此,贪心策略得到的分组数就是最少的,完全可行。

补充说明

这个策略的时间复杂度主要由排序决定,为O(n log n),后续遍历仅为O(n),整体效率很高,适合处理这类问题。

内容的提问来源于stack exchange,提问作者Nathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 16:46:28