두 알고리즘이 입력에 대해 동일한 결과를 반환하는지 어떻게 확인합니까?


18

모든 입력 세트가 무한 할 때 두 알고리즘 (예 : 병합 정렬 및 Naïve 정렬)이 입력에 대해 동일한 결과를 반환하는지 어떻게 확인합니까?

업데이트 : Ben 이 일반적인 경우 알고리즘 적으로 수행하는 방법을 설명해 주셔서 감사합니다 . Dave의 대답 은 항상 작동하지는 않지만 매우 효과적인 알고리즘 및 수동 (인간 위트 및 은유에 따라) 방법을 요약 한 것입니다.


5
yuval이 말했듯이 두 프로그램에 대해 결정할 수있는 절차는 없습니다. 그러나 귀하의 예제와 같은 특별한 경우에 그것을 증명할 수 있습니다.
Sasho Nikolov

1
자동 기술 / 알고리즘 또는 일련의 수동 기술을 원하십니까?
Dave Clarke

@SashoNikolov, 성능이 출력의 일부로 간주되면 동일한 시간 / 공간 복잡성에서 작동한다는 것을 보여 주어야합니다.
edA-qa mort-ora-y

1
"확인"또는 증명 하시겠습니까? "모든 입력"또는 모든 입력을 의미합니까? 질문의 동기와 맥락은 무엇입니까?
Kaveh

2
@AndresRiorio : 증명 기술은 일반적인 문제를 해결하는 알고리즘과 다릅니다. 예를 들어, 중지 문제는 결정할 수 없지만 많은 프로그램 (수동 또는 자동 휴리스틱)이 종료되었음을 증명할 수 있습니다.
Raphael

답변:


16

전문가들이 말하는 것과 달리,이를 수행하기위한 많은 효과적인 기술이 있습니다.

  • Bisimulation은 한 가지 방법입니다. 예를 들어, 공동화 및 기능 프로그래밍 에 대한 Gordon의 논문을 참조하십시오 .

  • 또 다른 접근법은 Pitts 의 작업과 같은 프로그램 동등성의 운영 이론을 사용하는 것입니다 .

  • 세 번째 방법은 두 프로그램이 동일한 기능 사양을 만족 하는지 확인 하는 것입니다. 이 방법에는 수천 가지의 논문이 있습니다.

  • 네 번째 방법은 사운드 프로그램 변환을 사용하여 한 프로그램을 다른 프로그램으로 다시 작성할 수 있음을 보여주는 것입니다 .

물론 이러한 방법 중 어느 것도 결정 불가능으로 완료된 것은 아니지만 문제를 해결하기 위해 많은 양의 작업이 생성되었습니다.


휴리스틱 . [Gr. εὑρίσκω "발견"] n. 1. 솔루션이 올바른 것으로 입증 될 수 있는지 여부를 무시하지만 일반적으로 좋은 솔루션을 생성하거나 더 복잡한 문제의 솔루션을 포함하거나 더 복잡한 문제를 해결하는 문제를 해결하도록 설계된 기술. 2. ( 이론 ) 작동하지 않는 알고리즘.
JeffE

1
바트 심슨 : "이길 수 없습니다. 시도하지 마십시오."
Dave Clarke

9
@JeffE : 두 알고리즘이 동일한 결과를 반환하는지 확인하려면 증거를 만듭니다. 이를 수행하기위한 좋은 기술이 많이 있습니다. 물론, 모든 방법이 불완전하지만 누가 신경 쓰나요? Goedel의 불완전 성 정리는 수학을 포기할 이유가 아닙니다!
Neel Krishnaswami

3
@JeffE 두 개의 임의 알고리즘이 동일한 결과를 리턴하는지 여부를 판별하는 계산 가능한 기능이 없다고해서 특히 두 가지 특정 알고리즘에 대한 질문에 대답 할 수 없다는 것을 의미하지는 않습니다 . 특히 증거를 찾는 프로세스가 계산 가능하지 않다 기능 . 마찬가지로 임의의 알고리즘이 항상 종료되는지 여부를 기계적으로 결정할 수 없다는 사실에 관계없이 특정 알고리즘에 대해 보장 된 종료를 입증하는 많은 논문이 있습니다.
Ben

2
실제로 동일한 함수를 계산해야하는 두 개의 알고리즘은이 시뮬레이션 기반 동등성 증명을 거의 허용하지 않습니다. (위에 언급 한 정렬 알고리즘의 경우 루프 / 재귀의 중간 단계가 다릅니다.) 좋은 구식 Hoare-logic을 사용하여 I / O 동작의 동일한 사양을 구현하는 것이 방법임을 보여줍니다 토고.
Kai

10

"불가능하다"는 문장을 약간 자세히 설명하기 위해 간단한 증거 스케치가 있습니다.

테이프에서 출력이 중단되는 Turing Machines의 출력으로 알고리즘을 모델링 할 수 있습니다. 테이프에서 출력을 수락하거나 거부 (출력이없는 경우)하여 거부 할 수있는 시스템을 원할 경우 "중지 또는 정지하지 않음"으로 이러한 시스템을 모델링 할 수있는 인코딩을 쉽게 만들 수 있습니다. 거부 "기계가 없습니다.

이제 두 개의 TM이 모든 입력에 대해 동일한 출력을 갖는지 여부를 결정 하는 알고리즘 P 가 있다고 가정 합니다. 그런 다음 TM A 와 입력 X가 주어지면 다음과 같이 작동 하는 새로운 TM B 를 만들 수 있습니다 .

  1. 입력이 정확히 X 인지 확인
  2. 그렇다면 무한 루프를 입력하십시오.
  3. 그렇지 않은 경우 입력 에서 A 를 실행 하십시오.

이제 AB 에서 P 를 실행할 수 있습니다 . BX 에서 정지하지 않지만 다른 모든 입력에 대해 A 와 동일한 출력을 갖습니다 . 따라서 AX에서 정지하지 않는 경우에만 이 두 알고리즘은 모든 입력에 대해 동일한 출력을 갖습니다. 그러나 P 는 두 개의 알고리즘이 모든 입력에 대해 동일한 출력을 가지고 있는지 여부를 알 수 있다고 가정 했으므로 P 가 있으면 임의의 기계가 임의의 입력에서 정지하는지 여부를 알 수 있습니다. Halting Problem은 결정 불가능한 것으로 알려져 있으므로 P 는 존재할 수 없습니다.

이것은 두 알고리즘이 항상 작동하는 동일한 출력을 갖는지 여부를 결정하는 일반적인 (계산 가능한) 접근 방법이 없기 때문에 분석하는 알고리즘 쌍에 특정 추론을 적용해야합니다. 그러나 실제로는 많은 종류의 알고리즘에서 작동하는 계산 가능한 접근 방식이있을 수 있으며 특정 사례에 대한 증거를 해결하기 위해 사용할 수있는 기술이 있습니다. Dave Clarke의 답변은 여기에서 살펴볼 관련 사항을 제공합니다. "불가능"결과는 모든 알고리즘 쌍에 대해 문제를 한 번에 해결하는 일반적인 방법을 고안하는 경우에만 적용됩니다.



@Raphael 예, 내가 스케치 한 논쟁은 그러한 제한된 P 에 대해서는 아무 것도 말하지 않으며 , 완전히 일반적인 것만 존재할 수는 없습니다. 내 본능은 일반 알고리즘이 아닌 "알고리즘 정렬"로 제한하더라도 정지 문제를 여전히 결정할 수 없다는 것입니다.이 경우 불가능한 증거가 여전히 남아 있지만 그러한 주장을들은 적이 없습니다.
Ben

2
보다 일반적으로, 라이스 정리 는 증명하려는 속성이있는 알고리즘이 하나 이상 있고 그렇지 않은 알고리즘이 있으면 알고리즘에 대해 무언가를 증명할 수있는 계산 가능한 방법이 없다고 말합니다. 예를 들어, 알고리즘 A가 주어지면 알고리즘 B를 입력으로 사용하고 B가 A와 동등한 지 여부를 테스트하는 계산 가능한 함수가 없습니다.
Gilles 'SO-stop

라이스 정리는 튜링 머신이 아닌 언어의 속성에만 적용된다는 점에 유의해야합니다 ( "알고리즘"모델로 사용하는 경우). 두 언어의 튜링 머신이 존재하지만 둘 다 동일한 언어를 인식하지만 하나는 특성을 가지고 있고 다른 하나는 그렇지 않은 경우 라이스 정리가 적용되지 않으며 특성을 테스트하기위한 일반적인 계산 방법이있을 수 있습니다. 그러나 라이스 정리는이 경우에 분명히 적용됩니다.

2

일반적으로 불가능하지만 많은 제약 조건으로 인해 가능합니다. 예를 들어, BDD를 사용하여 두 개의 직선 코드 프로그램의 동등성을 확인할 수 있습니다. 심볼릭 실행은 다른 많은 경우를 처리 할 수 ​​있습니다.


1

이 평등을 일반적으로 증명하는 알고리즘을 고안하는 것은 불가능합니다. 힌트 : Halting 문제의 감소.


완전 자동 기술은 없지만 많은 기술이 존재합니다.
Dave Clarke

나는 가능하지 않은지, 당신의 대답은 단지 의견입니다. 대답이 아닙니다.

@ SaeedAmiri : 나는 대답의 맥락에 약간 반했다; 나는 그것이 특별히 좋지 않다면 충분하다고 생각합니다.
Raphael

@Raphael, Yuval 마음에 드는 감소는 명백하며 OP는 그것을 알지 못한다고 생각하지만 IMO 어려운 문제는 특별한 경우를위한 방법을 찾고 있습니다. 일반적인 경우.

2
@SaeedAmiri : 그것은 OP와 유권자들이 우리가 아닌 그때를 결정할 때입니다.
Raphael
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.