假设我们有一个有限集中的磁盘,我们希望计算最小磁盘为其。做到这一点的标准方法是使用Matoušek,Sharir和Welzl [1]的算法找到了基础的,并让,最小的盘片容纳。磁盘可以使用代数的事实是,由于计算为基础,在每个磁盘相切。
(为基础的如果是最小的,使得甲基础具有至多三个元件;在一般用于在球的基础具有至多。元素)
它是如下的随机递归算法。(但请参见下面的迭代版本,这可能更易于理解。)
过程:
输入:有限的磁盘,,其中是()的基础。
- 如果,返回。
- 否则选择随意。
- 让。
- 如果然后返回。
- 否则返回,其中乙”是的基乙' ∪ { X }。
用作以计算L的基础。
最近,我有理由实现此算法。在验证了数百万个随机生成的测试用例中的结果正确之后,我注意到我在实现中犯了一个错误。在最后的步骤我被返回,而不是中号小号w ^ (大号,乙”)。
尽管存在此错误,该算法仍给出正确的答案。
我的问题:为什么这种算法的错误版本在这里显然给出正确的答案?它总是(证明)有效吗?如果是这样,那么在更高维度上也是如此吗?
补充:一些误解
几个人提出了不正确的论据,以至于修改后的算法是完全正确的,因此在这里避免一些误解可能很有用。一个普遍的错误信念似乎是。这是该主张的反例。鉴于磁盘一个,b ,c ^ ,d ,È如下面(的边界⟨ 一个,b ,ê ⟩也以红色显示):
我们可以有 ; 并注意Ë &NotElement ⟨ Ç ,d ⟩:
这是可能发生的情况。第一个观察结果是:
- 我们希望计算
- 选择
- 设
- 观察到
- 因此,让是的基乙' ∪ { X } = { 一个,b ,c ^ ,ê }
- 观察到
- 返回,即{ b ,c }
现在考虑。
- 我们希望计算
- 选择
- 设
- 观察到
- 因此,让是的基乙' ∪ { X } = { b ,c ^ ,d }
- 观察到
- 返回,即{ c ,d }
(对于定性的目的,让我们说,磁盘都具有半径为2,并且在居中(30 ,5 ),(30 ,35 ),(10 ,5 ),(60 ,26 ),和(5 ,26 )分别)。
添加:迭代演示
考虑算法的迭代表示可能会更容易。我当然会发现将其行为形象化会更容易。
输入:列表磁盘的输出:的基础上大号
- 令。
- 随机随机播放
- 对于每一个在大号:
- 如果:
- 让是依据乙∪ { X }。
- 返回步骤2。
- 返回。
其原因算法终止,顺便说一句,是步骤5总是增加的半径 -并且只有有限多个可能值乙。
据我所知,修改后的版本没有如此简单的迭代演示。(我曾尝试在上一篇文章中对此文章进行编辑,但这是错误的-并给出了错误的结果。)
参考
[1]JiříMatoušek,Micha Sharir和Emo Welzl。线性编程的次指数界。Algorithmica,16(4-5):498-516,1996。