모든 입력 세트가 무한 할 때 두 알고리즘 (예 : 병합 정렬 및 Naïve 정렬)이 입력에 대해 동일한 결과를 반환하는지 어떻게 확인합니까?
업데이트 : Ben 이 일반적인 경우 알고리즘 적으로 수행하는 방법을 설명해 주셔서 감사합니다 . Dave의 대답 은 항상 작동하지는 않지만 매우 효과적인 알고리즘 및 수동 (인간 위트 및 은유에 따라) 방법을 요약 한 것입니다.
모든 입력 세트가 무한 할 때 두 알고리즘 (예 : 병합 정렬 및 Naïve 정렬)이 입력에 대해 동일한 결과를 반환하는지 어떻게 확인합니까?
업데이트 : Ben 이 일반적인 경우 알고리즘 적으로 수행하는 방법을 설명해 주셔서 감사합니다 . Dave의 대답 은 항상 작동하지는 않지만 매우 효과적인 알고리즘 및 수동 (인간 위트 및 은유에 따라) 방법을 요약 한 것입니다.
답변:
전문가들이 말하는 것과 달리,이를 수행하기위한 많은 효과적인 기술이 있습니다.
Bisimulation은 한 가지 방법입니다. 예를 들어, 공동화 및 기능 프로그래밍 에 대한 Gordon의 논문을 참조하십시오 .
또 다른 접근법은 Pitts 의 작업과 같은 프로그램 동등성의 운영 이론을 사용하는 것입니다 .
세 번째 방법은 두 프로그램이 동일한 기능 사양을 만족 하는지 확인 하는 것입니다. 이 방법에는 수천 가지의 논문이 있습니다.
네 번째 방법은 사운드 프로그램 변환을 사용하여 한 프로그램을 다른 프로그램으로 다시 작성할 수 있음을 보여주는 것입니다 .
물론 이러한 방법 중 어느 것도 결정 불가능으로 완료된 것은 아니지만 문제를 해결하기 위해 많은 양의 작업이 생성되었습니다.
"불가능하다"는 문장을 약간 자세히 설명하기 위해 간단한 증거 스케치가 있습니다.
테이프에서 출력이 중단되는 Turing Machines의 출력으로 알고리즘을 모델링 할 수 있습니다. 테이프에서 출력을 수락하거나 거부 (출력이없는 경우)하여 거부 할 수있는 시스템을 원할 경우 "중지 또는 정지하지 않음"으로 이러한 시스템을 모델링 할 수있는 인코딩을 쉽게 만들 수 있습니다. 거부 "기계가 없습니다.
이제 두 개의 TM이 모든 입력에 대해 동일한 출력을 갖는지 여부를 결정 하는 알고리즘 P 가 있다고 가정 합니다. 그런 다음 TM A 와 입력 X가 주어지면 다음과 같이 작동 하는 새로운 TM B 를 만들 수 있습니다 .
이제 A 와 B 에서 P 를 실행할 수 있습니다 . B 는 X 에서 정지하지 않지만 다른 모든 입력에 대해 A 와 동일한 출력을 갖습니다 . 따라서 A 가 X에서 정지하지 않는 경우에만 이 두 알고리즘은 모든 입력에 대해 동일한 출력을 갖습니다. 그러나 P 는 두 개의 알고리즘이 모든 입력에 대해 동일한 출력을 가지고 있는지 여부를 알 수 있다고 가정 했으므로 P 가 있으면 임의의 기계가 임의의 입력에서 정지하는지 여부를 알 수 있습니다. Halting Problem은 결정 불가능한 것으로 알려져 있으므로 P 는 존재할 수 없습니다.
이것은 두 알고리즘이 항상 작동하는 동일한 출력을 갖는지 여부를 결정하는 일반적인 (계산 가능한) 접근 방법이 없기 때문에 분석하는 알고리즘 쌍에 특정 추론을 적용해야합니다. 그러나 실제로는 많은 종류의 알고리즘에서 작동하는 계산 가능한 접근 방식이있을 수 있으며 특정 사례에 대한 증거를 해결하기 위해 사용할 수있는 기술이 있습니다. Dave Clarke의 답변은 여기에서 살펴볼 관련 사항을 제공합니다. "불가능"결과는 모든 알고리즘 쌍에 대해 문제를 한 번에 해결하는 일반적인 방법을 고안하는 경우에만 적용됩니다.
이 평등을 일반적으로 증명하는 알고리즘을 고안하는 것은 불가능합니다. 힌트 : Halting 문제의 감소.