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


17

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

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

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

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

  1. 如果L=∅,返回B。
  2. 否则选择X∈L随意。
  3. 让B′←MSW(L−{X},B)。
  4. 如果X⊆⟨B′⟩然后返回B′。
  5. 否则返回,其中乙”是的基乙' ∪ { X }。MSW(L,B″)B″B′∪{X}

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

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

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


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


补充:一些误解

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

Disks a, b, c, d, e

我们可以有 ; 并注意Ë &NotElement ⟨ Ç ,d ⟩:MSW({c,d},{a,b,e})={c,d}e∉⟨c,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}
  • 观察到X∉⟨B′⟩
  • 因此,让是的基乙' ∪ { X } = { 一个,b ,c ^ ,ê }B″B′∪{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}
  • 观察到X∉⟨B′⟩
  • 因此,让是的基乙' ∪ { X } = { b ,c ^ ,d }B″B′∪{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.   如果:X∉⟨B⟩
  5.     让是依据乙∪ { X }。BB∪{X}
  6.     返回步骤2。
  7. 返回。B

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

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


参考

[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′′)X∈LX∈B′′B′XB⊆MSW(L,B)

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


B⊆MSW(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 X∈B″, for that matter! Did you mean X∈⟨B″⟩? 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 B⊆⟨MSW(L,B)⟩.
— Robin Houston

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

1
Oh, I totally missed that! B′′=⟨B′∪X⟩. 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.