区间问题
按左端点排序
- 贪心策略的正确性:当我们按照左端点从小到大对区间进行排序时,我们实际上是在按照区间的开始顺序来组织这些区间。这样做的好处是,对于任何一个给定的区间,如果它不能加入到当前的任何一个组中(即它的左端点小于或等于当前组的最大右端点),那么它必须开启一个新的组。因为之后的所有区间的左端点都将更大,所以它们也不可能加入到当前的组中。
- 最小化分组数:这种排序方式有助于最小化所需的分组数。因为我们总是尝试将当前的区间加入到已有的组中(如果可能的话),并且这种尝试是基于区间开始顺序进行的,这有助于我们尽可能地利用每个组,从而减少总的分组数。
- 简化逻辑:按照左端点排序还简化了实现逻辑。我们只需依次考虑每个区间是否能加入到某个现有组中(基于右端点)。如果不能,则开启新组。这种逻辑非常直接,易于实现。
按右端点排序
按照右端点排序虽然也是一种常见的排序策略,但在区间分组问题中,它并不适用。这是因为:
- 当区间按照右端点排序时,我们确实可以确保每个选择的点都能覆盖尽可能多的区间(例如,在区间选点问题中)。但在区间分组问题中,我们的目标是最小化分组数量,而不仅仅是覆盖所有区间。按照右端点排序,不能保证尽可能多地利用每个组,因为一个区间的结束不一定告诉我们它是否能与之前的区间形成不相交的组。
Huffman 树
排序不等式
绝对值不等式
推公式
压力最大的牛一定是最底层的牛,我们的算法让 w+s 最大的放在最下面,可以分成两种情况去看:
- w 很大,s 很小:由于 w 最大的牛在最下面,对其余牛造成的压力自然较小,可能能达到最小的最大压力
- w 很小,s 很大:这种情况是完美的情况,最强壮的牛放在最下面,可能能达到最小的最大压力
因此我们按照 w+s 从小到大去排列。