궁극적으로, 수학적 정확성에 대한 증거가 필요합니다. 아래에 그에 대한 몇 가지 증명 기술을 얻을 것입니다.하지만 먼저 다이빙을 시작하기 전에 시간을 절약 할 수 있습니다. 증명을 찾기 전에 무작위 테스트를 시도하십시오.
무작위 테스트
첫 번째 단계로 랜덤 테스트를 사용하여 알고리즘을 테스트하는 것이 좋습니다. 내 경험상 탐욕스러운 알고리즘의 경우 무작위 테스트가 부당하게 효과적 인 것 같습니다. 5 분 동안 알고리즘을 코딩하면 증거를 제시하는 데 1-2 시간을 절약 할 수 있습니다.
기본 아이디어는 간단합니다. 알고리즘을 구현하십시오. 또한 올바른 것으로 알고있는 참조 알고리즘 (예 : 모든 가능성을 철저히 시도하고 최선을 다하는 알고리즘)을 구현하십시오. 작은 문제 인스턴스에서만이 알고리즘을 실행하므로 참조 알고리즘이 점진적으로 비효율적이면 좋습니다. 그런 다음 무작위로 백만 개의 작은 문제 인스턴스를 생성하고 각각에 대해 두 알고리즘을 모두 실행하고 후보 알고리즘이 모든 경우에 정답을 제공하는지 확인하십시오.
경험적으로 후보 욕심 알고리즘이 올바르지 않은 경우 일반적으로 무작위 테스트 중에이를 발견하게됩니다. 모든 테스트 사례에서 올바른 것 같으면 다음 단계로 넘어 가야합니다. 수학적 정확성 증명이 나옵니다.
수학적 정확성 증명
욕심 많은 알고리즘이 올바른지 증명해야합니다. 최적의 솔루션을 출력한다는 것입니다 (또는 동일한 최적의 솔루션이 여러 개 있으면 그 중 하나를 출력 함).
기본 원칙은 직관적입니다.
원칙 : 잘못된 선택을하지 않으면 괜찮습니다.
탐욕 알고리즘은 일반적으로 일련의 선택을 포함합니다. 기본 증명 전략은 알고리즘이 결코 나쁜 선택을하지 않음을 증명하려고 시도하는 것입니다. 탐욕스러운 알고리즘은 역 추적 할 수 없습니다. 일단 일단 선택하면, 그들은 최선을 다하고 그 선택을 취소하지 않을 것입니다. 따라서 결코 나쁜 선택을하지 않는 것이 중요합니다.
좋은 선택은 무엇입니까? 최적의 솔루션이 하나 인 경우 최적의 솔루션이 무엇인지와 동일한 선택이 무엇인지 쉽게 알 수 있습니다. 다시 말해, 탐욕스러운 알고리즘의 실행 단계에서 알고리즘에 의해 선택된 선택 순서가 지금까지 최적 솔루션의 접두사와 정확히 일치 함을 증명하려고 노력할 것입니다. 동일하게 최적의 솔루션이 여러 개있는 경우 최적의 솔루션 중 하나 이상과 일치하는 솔루션을 선택하는 것이 좋습니다. 다시 말해, 알고리즘의 선택 순서가 지금까지 최적의 솔루션 중 하나의 접두사와 일치하면 지금까지는 아무 문제가 없습니다.
삶을 단순화하고 방해 요소를 없애기 위해 유대가없는 경우에 집중합시다. 하나의 고유 한 최적의 솔루션이 있습니다. 모든 기계는 근본적인 변경없이 동일하게 여러 가지 최적화가 가능한 경우에 적용되지만 기술적 인 세부 사항에 대해서는 좀 더주의를 기울여야합니다. 이러한 세부 사항을 무시하고 최적의 솔루션이 고유 한 경우에 중점을 두어 시작하십시오. 그것은 당신이 필수적인 것에 집중하는 데 도움이 될 것입니다.
우리가 사용하는 매우 일반적인 증거 패턴이 있습니다. 알고리즘의 다음 속성을 증명하기 위해 열심히 노력할 것입니다.
제 : 하자 알고리즘에 의해 출력 용액 및 O는 최적의 솔루션. 경우 S는 다른 O , 우리는 조정할 수 O를 다른 솔루션을 얻기 위해 O * 다른 O 엄격하게보다 나은 O를 .SOSOOO∗OO
이것이 왜 유용한 지 주목하십시오. 주장이 사실이면 알고리즘이 올바른 것입니다. 이것은 기본적으로 모순에 의한 증거입니다. 어느 동일하다 OSO 또는 다르다. 이 다른 경우, 우리는 또 다른 솔루션을 찾을 수 있습니다 엄격하게보다 나은의 O를 - 그러나 우리는 정의 즉, 모순의 O를 최적의 솔루션으로 더 나은보다 상관 없음 해결책이 될 수 없다. 따라서 S 는 O 와 다를 수 없다는 결론을 내릴 수밖에 없습니다 . S 는 항상 O와 같아야합니다O∗OOSOSO즉, 탐욕스러운 알고리즘은 항상 올바른 솔루션을 출력합니다. 위의 주장을 입증 할 수 있다면 알고리즘이 올바른 것으로 입증 된 것입니다.
벌금. 그렇다면 어떻게 주장을 증명할 수 있습니까? 우리 용액 생각 벡터로서 ( S 1 , ... , S , N ) 의 시퀀스에있는 대응 해당 알고리즘에 의해 선택하고, 마찬가지로, 우리는 최적의 솔루션을 생각 O 벡터로서 ( O (1) , ... , O의 N ) 로 이어질 것이다 선택의 순서에 대응 O . 경우 S는 다른 O , 일부 인덱스가 존재해야 내가 S 난을 ≠S(S1,…,Sn)nO(O1,…,On)OSOi , 우리는 작은 같은 할것 난 다음, 우리가 조정할 수 있습니다. O를 변경하여 이여 에서 조금Si≠OiiOO 경기가 제 위치를 S 난을 즉, 우리는 최적의 솔루션 조정할 수 있습니다 O를 변화에 의해 내가에게 욕심 알고리즘에 의해 선택된 하나 일 선택을 한 다음 우리는 이것이 더 나은 해결책으로 이어진다는 것을 보여줄 것입니다. 특히 O * 를 다음과 같이정의합니다.iSiOiO∗
O∗=(O1,O2,…,Oi−1,Si,Oi+1,Oi+2,…,On),
종종 우리는 O i + 1 을 수정해야한다는 것을 제외하고전역 일관성을 유지하기 위해 2 ,…, O n 부분을 약간. 증명 전략의 일부는 O *를 적절하게정의 할 때 약간의 영리함을 포함합니다. 그런 다음 증명의 고기는 어떻게 든 알고리즘에 대한 사실을 사용하고 O * 가O보다 엄격하게 우수하다는 문제를 보여줍니다Oi+1,Oi+2,…,OnO∗O∗O; 여기서 문제 별 통찰력이 필요합니다. 어떤 시점에서 특정 문제의 세부 사항을 살펴볼 필요가 있습니다. 그러나 이것은 욕심 많은 알고리즘에 대한 전형적인 정확성 증명의 구조에 대한 감각을 제공합니다.
간단한 예 : 최대 합이있는 부분 집합
간단한 예제를 자세히 살펴보면 이해하기가 더 쉬울 수 있습니다. 다음과 같은 문제를 생각해 봅시다.
입력: 정수 의 집합 , 정수 k 출력 : 합이 가능한 큰 크기 k 의 집합 S ⊆ UUk
S⊆Uk
이 문제에 대한 자연스럽고 탐욕스러운 알고리즘이 있습니다.
- 설정하십시오 .S:=∅
- 옵션 :
i:=1,2,…,k
- 하자 에서 가장 큰 숫자 U 아직 (즉, 포착되지 않은xiU 에서 일 가장 많은 U ). x i 를 S에 추가하십시오.iUxiS
무작위 테스트는 이것이 항상 최적의 솔루션을 제공한다고 제안하므로이 알고리즘이 올바른지 공식적으로 증명합시다. 최적의 솔루션은 고유하기 때문에 관계에 대해 걱정할 필요가 없습니다. 위에서 설명한 주장을 증명합시다 :
클레임 : 를 입력 U , k 및 O 에서이 알고리즘에 의해 솔루션 출력으로 하자SU,kO 최적해. 경우 , 우리는 다른 용액을 만들 수도 O * 그 합보다 더 큰 O가 .S≠OO∗O
증명. 가정 하고하자 제가 첫번째 인덱스 반복 될 여기서 X I ∉ O . ( 우리는 S ≠ O 라고 가정 하고 이러한 알고리즘의 정의에 따라 S = { x 1 , … , x k }가 있기 때문에 인덱스 i 가 존재해야합니다 .) 가정에 따르면 i 는 최소이므로 x 1 , … , x i - 1 ∈ O , 특히S≠Oixi∉OiS≠OS={x1,…,xk}ix1,…,xi−1∈O 폼 갖는다 O를 = { X 1 , X 2 ,O(여기서 숫자x1,…,xi-1)은 내림차순으로 나열됩니다. 알고리즘이x1,…,xi를 어떻게 선택하는지 살펴보면모든j≥i에대해xi>x ' 가 있어야한다는 것을 알 수 있습니다. 특히,xi>x ' i 입니다. 따라서O=O={x1,x2,…,xi−1,x′i,x′i+1,…,x′n}x1,…,xi−1,x′i,…,x′nx1,…,xixi>x′jj≥ixi>x′i, 즉, 우리는 얻을O*삭제하여난을의 일 수를O 및 x i 추가하기. 이제 O * 의 원소의 합은 O + x i - x ' i 의 원소의 합이며 x i - x 'O=O∪{xi}∖{x′i}O∗iOxiO∗Oxi−x′i이므로O*의 합보다 확실히 크다O의 합 '. 이것은 주장을 증명합니다. ◼xi−x′i>0O∗O■
여기서 직관은 욕심 많은 알고리즘이 O 와 일치하지 않는 선택을한다면O 한다면, 그 단계에서 욕심 많은 알고리즘에 의해 선택된 요소를 포함하도록 수정된다면 가 더 나아질 수 있다는 것을 . O 가 최적 이기 때문에 더 나은 방법으로 만들 수는 없으며 (모순 일 수도 있음) 유일하게 남아있는 가능성은 우리의 가정이 잘못되었을뿐입니다. 즉, 탐욕스러운 알고리즘은 결코 선택하지 않을 것입니다 O 와 일치하지 않습니다 .OOO
이 인수를 종종 교환 인수 또는 교환 보조 라고합니다 . 우리는 최적의 솔루션이 욕심 많은 솔루션과 다른 첫 번째 장소를 발견하고 해당 욕심 많은 선택에 대해 요소를 교환하는 것을 상상했습니다 ( x 교환O 위한XI). 일부 분석에 따르면이 교환은 최적의 솔루션 만 개선 할 수 있지만 정의에 따르면 최적의 솔루션은 개선 할 수 없습니다. 따라서 최적의 솔루션이 욕심 많은 솔루션과 다른 곳이 없어야한다는 유일한 결론입니다. 다른 문제가있는 경우 특정 상황에서이 교환 원칙을 적용 할 수있는 기회를 찾으십시오.x′ixi