如何不计算包含有限的一组圆的最小圆


17

假设我们有一个有限集L中的磁盘R2,我们希望计算最小磁盘D为其LD。做到这一点的标准方法是使用Matoušek,Sharir和Welzl [1]的算法找到了基础BL,并让D=B,最小的盘片容纳B。磁盘B可以使用代数的事实是,由于计算B为基础,在每个磁盘B相切B

BL基础L如果B是最小的,使得B=L甲基础具有至多三个元件;在一般用于在球Rd的基础具有至多d+1。元素)

它是如下的随机递归算法。(但请参见下面的迭代版本,这可能更易于理解。)

过程MSW(L,B)
输入:有限的磁盘LB,其中B是(B)的基础。

  1. 如果L=,返回B
  2. 否则选择XL随意。
  3. BMSW(L{X},B)
  4. 如果XB然后返回B
  5. 否则返回,其中是的基'{ X }MSW(L,B)BB{X}

用作以计算L的基础。MSW(L,)L

最近,我有理由实现此算法。在验证了数百万个随机生成的测试用例中的结果正确之后,我注意到我在实现中犯了一个错误。在最后的步骤我被返回,而不是中号小号w ^ 大号MSW(L{X},B)MSW(L,B)

尽管存在此错误,该算法仍给出正确的答案。


我的问题:为什么这种算法的错误版本在这里显然给出正确的答案?它总是(证明)有效吗?如果是这样,那么在更高维度上也是如此吗?


补充:一些误解

几个人提出了不正确的论据,以至于修改后的算法是完全正确的,因此在这里避免一些误解可能很有用。一个普遍的错误信念似乎是。这是该主张的反例。鉴于磁盘一个b c ^ d È如下面(的边界一个b ê 也以红色显示):BMSW(L,B)a,b,c,d,ea,b,e

Disks a, b, c, d, e

我们可以有 ; 并注意Ë &NotElement Ç d MSW({c,d},{a,b,e})={c,d}ec,d

the smallest enclosing circle of c and d does not contain e

这是可能发生的情况。第一个观察结果是MSW({c},{a,b,e})={b,c}

  • 我们希望计算MSW({c},{a,b,e})
  • 选择X=c
  • B=MSW(,{a,b,e})={a,b,e}
  • 观察到XB
  • 因此,让是的基'{ X } = { 一个b c ^ ê }BB{X}={a,b,c,e}
  • 观察到B={b,c}
  • 返回,即{ b c }MSW({c},{b,c}){b,c}

现在考虑MSW({c,d},{a,b,e})

  • 我们希望计算MSW({c,d},{a,b,e})
  • 选择X=d
  • B=MSW({c},{a,b,e})={b,c}
  • 观察到XB
  • 因此,让是的基'{ X } = { b c ^ d }BB{X}={b,c,d}
  • 观察到B={c,d}
  • 返回,即{ c d }MSW({c,d},{c,d}){c,d}

(对于定性的目的,让我们说,磁盘都具有半径为2,并且在居中30 5 30 35 10 5 60 26 ,和5 26 分别)。a,b,c,d,e(30,5)(30,35)(10,5)(60,26)(5,26)


添加:迭代演示

考虑算法的迭代表示可能会更容易。我当然会发现将其行为形象化会更容易。

输入:列表磁盘的输出:的基础上大号L
L

  1. B
  2. 随机随机播放L
  3. 对于每一个大号XL
  4.   如果XB
  5.     让是依据{ X }BB{X}
  6.     返回步骤2。
  7. 返回B

其原因算法终止,顺便说一句,是步骤5总是增加的半径 -并且只有有限多个可能值BB

据我所知,修改后的版本没有如此简单的迭代演示。(我曾尝试在上一篇文章中对此文章进行编辑,但这是错误的-并给出了错误的结果。)


参考

[1]JiříMatoušek,Micha Sharir和Emo Welzl。线性编程的次指数界。Algorithmica,16(4-5):498-516,1996。


首先,在您的“输入:...”行中,我想您要使用“(L)”而不是“(B)”。其次,当返回MSW(L- {X},B'')而不是MSW(L,B'')时,您的基数B''被定义为[B'联合{X}]的基数,因此X为即使您将其从集合中删除,仍然可以确保它被MSW(L- {X},B'')覆盖。
JimN

不,我的确在这里是“(B)”的意思,在递归调用中B不一定是L的子集。BL的元素不一定由MSW(L,B)覆盖,如本例中的bl.ocks.org/robinhouston/c4c9dffbe8bd069028cad8b8760f392c其中B = { a b e }(按小箭头按钮逐步进行计算。)L={a,b,c,d}B={a,b,e}
罗宾·休斯顿

Answers:


1

在继续递归之前从L删除这一步骤实际上改善了算法,因为它从基本候选项池中删除了已经添加的X。由于它等同于现有算法,因此它将始终有效地起作用,并且还将适用于更高维度。XLX

跟踪算法。当使用,有X 大号X ' '。假设我们在步骤2中再次选择它不管步骤3的结果的'将始终有X,因为递归函数具有不变中号小号w ^ 大号MSW(L,B)XLXBBXBMSW(L,B)

换句话说,您在选择的部分中对算法快捷方式的改进(第3步)。X


BMSW(L,B) in general. Have a look at the example linked in my comment on the question.
Robin Houston

Neither is it true in general that XB, for that matter! Did you mean XB? I suspect if you try to explain your argument more rigorously, you will see that it does not work.
Robin Houston

NB. It isn’t even true in general that BMSW(L,B).
Robin Houston

I’ve added a section to the question giving a counterexample to BMSW(L,B), since several people have supposed it to be true.
Robin Houston

1
Oh, I totally missed that! B=BX. Yeah, this answer is totally wrong. Should I delete it?
Larry B.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.