답변:
다음은 결정 불가능하다는 것을 보여주는 간단한 주장입니다. 즉, 주어진 알고리즘이 실행 시간 또는 메모리 사용량과 관련하여 최적인지 확인하는 알고리즘이 없습니다.
빈 테이프의 정지 문제를 런타임 최적화 문제로 줄입니다.
하자 주어진 튜링 기계합니다. N을 다음 튜링 머신으로 설정하십시오.
n M n M n 2 n : 입력
1. (최대) 단계 동안 빈 테이프에서 을 실행 합니다.
2. 이 단계로 정지되지 않으면 크기의 루프를 실행 한 다음 NO를 리턴하십시오.
그렇지 않으면 YES를 반환하십시오.
두 가지 경우가 있습니다.
경우 공 테이프에 정지하지 않고, 기계 위한 실행 입력 단계에서 . 따라서 실행 시간은 입니다. 이 경우 은 분명히 최적이 아닙니다.N Θ ( 2 n ) n Θ ( 2 n ) N
빈 테이프에서 정지 되면 머신 은 충분히 큰 대해 일정한 수의 스텝으로 실행되므로 실행 시간은 입니다. 이 경우 이 분명히 최적입니다.N n O ( 1 ) N
한마디로 :
또한 코드가 주어지면 코드를 계산할 수 있습니다 . 따라서 빈 테이프 정지 문제에서 실행 시간 최적 성 문제로 줄였습니다. 주어진 튜링 머신 이 최적 인지 결정할 수 있다면 , 위의 축소를 사용하여 주어진 머신 이 블랭크 테이프에서 정지 하는지 확인할 수 있습니다 . 빈 테이프를 정지시키는 것은 불가피하기 때문에 문제도 결정할 수 없습니다.N N M
비슷한 논쟁이 공간에 사용될 수있다. 즉 주어진 Turing 머신이 사용하는 공간과 관련하여 최적인지 확인하는 것도 결정 불가능하다.
더 강력한 진술조차도 사실입니다. 우리는 주어진 계산 가능한 함수가 주어진 계산 가능한 함수를 계산하는 시간의 복잡성에 대한 상한인지 결정할 수 없습니다. 공간과 비슷합니다. 즉, 기본 복잡성 이론조차도 알고리즘에 의해 자동화 될 수 없다 (복잡성 이론가에게는 좋은 소식으로 간주 될 수있다).
다른 사람들이 언급했듯이 대답은 '아니오'입니다.
그러나 Blum " 재귀 함수의 복잡성에 대한 기계 독립적 인 이론 "이 작성한 흥미로운 기사가 있습니다. 그는 이 기능을 계산하기 위해 프로그램이 아무리 빠르더라도 프로그램을 매우 빠르게 계산하기 위해 다른 프로그램이 존재한다는 특성을 가진 일부 기능이 있음을 보여주었습니다 .
아주 좋은 재산!
하아! 우리는 다른 세상에 살고있을 것입니다.
귀하의 질문에 대한 답변이 예라고 생각하십시오 (물론 우리는 귀하의 질문에 대답 할 알고리즘 을 알고 있습니다). 언어 대한 알고리즘 대해 가 최적인지 아닌지 를 알 수 있습니다 ( 사용 ) . A L A 0 A
불행히도, 이것은 불가능하며, 실제로 개인적으로 (최소한) 최적 성을 입증하는 것이 컴퓨터 과학에서 가장 흥미롭고 어려운 문제라고 생각합니다. 내가 아는 한-정정되어 기쁘다-다항식 문제에 대한 최적 결과가 없습니다 (입력 크기에 비례하는 시간이 걸리는 알고리즘 과정의 사소한 최적 결과 제외).