우리는 유한 집합이 있다고 가정
L의 디스크
R2, 우리는 가장 작은 디스크 계산하고자하는
D에 대한
⋃L⊆D. 이렇게하는 표준 방법은 기저 찾을 Matoušek, Sharir 및 Welzl [1]의 알고리즘을 사용하는
B의
L하고하게
D=⟨B⟩, 작은 디스크 함유
⋃B. 디스크
⟨B⟩때문에, 사실하여 수학적 계산 될 수
B기준 인, 각 디스크
B에 접하는
⟨B⟩.
(
B⊆LA는 기준 의
L만약
B최소가되도록
⟨B⟩=⟨L⟩기준 많아야 세 요소를 가진다.에서 공에 대한 일반적인
Rd기준이 최대 갖는
d+1. 요소)
다음과 같이 무작위 재귀 알고리즘입니다. (그러나 이해하기 쉬운 반복 버전은 아래를 참조하십시오.)
절차 :
MSW(L,B)
입력 : 유한 디스크 세트
,
B여기서
B는 (
B) 기준 입니다.
- 만일
L=∅ , 리턴 B . - 그렇지 않으면 무작위로
X∈L 을 선택하십시오 . - 하자
B′←MSW(L−{X},B) . - 경우
X⊆⟨B′⟩ 후 반환 B′ . - 그렇지 않으면 리턴하십시오 . 여기서 B ″ 는 B ′ ∪ { X } 의 기초입니다 .
MSW(L,B″) B″ B′∪{X}
쓰임 에 기초하여 계산하기 위해 L이 .
MSW(L,∅)L
최근 에이 알고리즘을 구현해야했습니다. 무작위로 생성 된 수백만 개의 테스트 사례에서 결과가 올바른지 확인한 후 구현에 오류가 있음을 알았습니다. 마지막 단계에서 I는 반환 된 보다 M S W ( L , B를 “ ) .
MSW(L−{X},B″)MSW(L,B″)
이 오류에도 불구하고 알고리즘은 정답을 제공했습니다.
내 질문 : 이 잘못된 버전의 알고리즘이 왜 여기에 올바른 답변을 제공합니까? 항상 (아마도) 작동합니까? 그렇다면 더 높은 차원에서도 마찬가지입니까?
추가 : 몇 가지 오해
몇몇 사람들은 수정 된 알고리즘이 사소하게 정확하다는 효과에 대한 잘못된 주장을 제안 했으므로 여기에서 약간의 오해를 포괄하는 것이 유용 할 수 있습니다. 하나의 인기있는 잘못된 믿음은 것으로 보인다 . 그 주장에 대한 반례가 있습니다. 디스크를 감안 , B , C , D , E (경계를 아래와 같이 ⟨ , B는 , 예를 ⟩ 빨강에 도시되어있다) :
B⊆⟨MSW(L,B)⟩a,b,c,d,e
⟨a,b,e⟩
우리는 ; 및 참고 예 ∉ ⟨ C , D ⟩ :
MSW({c,d},{a,b,e})={c,d}e∉⟨c,d⟩
어떻게 이런 일이 일어날 수 있습니다. 첫 번째 관찰은 .
MSW({c},{a,b,e})={b,c}- 우리는 M S W ( { c } , { a , b , e } ) 를 계산하려고합니다
MSW({c},{a,b,e}) - X = c를 선택하십시오
X=c - 하자
B′=MSW(∅,{a,b,e})={a,b,e} - 그 관찰
X∉⟨B′⟩ - 따라서 를 B ′ ∪ { X } = { a , b , c , e } 의 기초로 두십시오.
B″ B′∪{X}={a,b,c,e} - 관찰
B″={b,c} - 리턴 이며, { B , C }
MSW({c},{b,c}) {b,c}
이제 .
MSW({c,d},{a,b,e})- 우리는 M S W ( { c , d } , { a , b , e } ) 를 계산하려고합니다
MSW({c,d},{a,b,e}) - X = d를 선택하십시오
X=d - 하자
B′=MSW({c},{a,b,e})={b,c} - 그 관찰
X∉⟨B′⟩ - 따라서 를 B ′ ∪ { X } = { b , c , d } 의 기초로 두십시오.
B″ B′∪{X}={b,c,d} - 관찰
B″={c,d} - 리턴 이며, { C , D }
MSW({c,d},{c,d}) {c,d}
(명확성을 위해, 우리는 디스크라고하자 , B는 , (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
- 보자 .
B←∅ - 셔플 무작위로.
L - L의 각 에 대해 :
X L - 만약 :
X∉⟨B⟩ - 하자 의 기초가 될 B ∪ { X } .
B B∪{X} - 2 단계로 돌아가십시오.
- 반환 합니다.
B
그 이유는이 알고리즘이 종료하면, 또한, 항상 반경이 증가 단계 5 – 그리고 단지 유한 한 다수의 가능한 값이있는 B는 .
⟨B⟩B
수정 된 버전에는 내가 볼 수있는 한 간단한 반복 표현이 없습니다. (이 게시물의 이전 편집에서 하나를 제공하려고 시도했지만 잘못되어 잘못된 결과가 발생했습니다.)
참고
[1] Jiří Matoušek, Micha Sharir 및 Emo Welzl. 선형 프로그래밍을위한 부분 지수입니다. Algorithmica, 16 (4-5) : 498–516, 1996.
답변
재귀를 계속하기 전에 L 에서 를 제거하는이 단계는 기본 후보 풀에서 이미 추가 된 X 를 제거하기 때문에 실제로 알고리즘을 개선합니다 . 기존 알고리즘과 동일하기 때문에 항상 작동 할 가능성이 높으며 더 높은 차원에서도 작동합니다.
XL
X
알고리즘을 추적하십시오. 사용할 때 ,가 X ∈ L 및 X ∈ B ‘ ‘ . 2 단계에서 다시 선택했다고 가정합니다. 3 단계의 결과에 관계없이 재귀 함수에는 불변 값 B ⊆ M S W ( L , B ) 가 있기 때문에 B ‘ 는 항상 X를 갖습니다 .
MSW(L,B′′)X∈L
X∈B′′
B′
X
B⊆MSW(L,B)
다시 말해, 가 선택된 부분에서 3 단계의 알고리즘 바로 가기가 개선 되었습니다.
X