首先,讨论了一个现实问题,引入了线性规划相关的知识,即通过一系列的不等式规划出一个区域,然后将目标函数与目标区域的相交点结合,看哪个点最好

# 增量算法

可以首先添加一个简单的且很大的边界,然后将约束条件一次次加入这个区域中,如果最优点 v_i-1 仍然在最新的区域中,那么 v_i=v_i-1,否则重新计算 v_i
复杂度:O(n2)O(n^2)
由于每一轮的遍历复杂度都为 O (i),进行 n 个循环
这是最坏的情况,那么如果我们一开始就将最重要的两个限制加入,直接确定了最终的点 v,那么我们的复杂度会非常低,变成 O (n),但是如果要找到这种最好的顺序,几乎是不可能的,因为情况太多了,所以,我们考虑了接下来这种方式

# 随机增量算法

一系列证明过程,证明随机化后的期望时间为 O (3n) 也就是 O (n)

然后可以引入,最小外接圆问题,有一系列的点,如何找出这个最小的外接圆,能包含所有的点;
我们也可以用随机增量算法来实现,即一次次加入点,如果这个点在圆外,那么这个点一定在新的最小外接圆的边上。

# MinDisk 算法

伪代码讲解:

  1. 把所有点随机排列。

  2. 用前两个点画一个圆。

  3. 然后一个一个加点:

    • 如果新点在旧圆里 → 不用动。

    • 如果新点不在圆里 → 那我们就需要重新算一个新的圆,而且这个点一定在边上。

    这时我们调用另一个函数:MinDiskWith1pt(已知一个边界点来画圆)。

现在你已经知道有一个点(pi)肯定在圆的边上了,那怎么画这个最小圆呢?

老师的方法是:

  1. 把之前所有的点(pi 之前的那些)随机排列。

  2. 用第一个点 p₁ 和 pi 一起画一个圆。

  3. 然后一个个把剩下的点放进去:

    • ✅ 如果这个点还在圆里,什么都不做。

    • ❌ 如果这个点不在圆里,那它也得在新圆的边上。

这时候我们需要再调用一个新函数:MinDiskWith2pts(已知两个边界点来画圆)。

还是用小朋友能懂的语言:

  1. 把之前的点再随机排列一遍。

  2. 用 pi 和 pj 这两个点先画一个圆。

  3. 然后一个个加点:

    • ✅ 如果在圆里,继续。

    • ❌ 如果不在,就用 pi、pj、pk(这三个点)画一个新的圆。

这时候,新的圆一定会把这三个点刚好包在边上。